annotate vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php @ 13:5fb285c0d0e3

Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've been lucky to get away with this so far, as we don't support self-registration which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5 was vulnerable to.
author Chris Cannam
date Mon, 23 Apr 2018 09:33:26 +0100
parents 4c8ae668cc8c
children 129ea1e6d783
rev   line source
Chris@13 1 <?php declare(strict_types=1);
Chris@0 2
Chris@0 3 namespace PhpParser\Node\Stmt;
Chris@0 4
Chris@13 5 use PhpParser\Node\Expr\Variable;
Chris@13 6 use PhpParser\Node\Name;
Chris@13 7 use PhpParser\Node\Param;
Chris@13 8 use PHPUnit\Framework\TestCase;
Chris@13 9
Chris@13 10 class ClassMethodTest extends TestCase
Chris@0 11 {
Chris@0 12 /**
Chris@0 13 * @dataProvider provideModifiers
Chris@0 14 */
Chris@0 15 public function testModifiers($modifier) {
Chris@13 16 $node = new ClassMethod('foo', [
Chris@0 17 'type' => constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
Chris@13 18 ]);
Chris@0 19
Chris@0 20 $this->assertTrue($node->{'is' . $modifier}());
Chris@0 21 }
Chris@0 22
Chris@0 23 public function testNoModifiers() {
Chris@13 24 $node = new ClassMethod('foo', ['type' => 0]);
Chris@0 25
Chris@0 26 $this->assertTrue($node->isPublic());
Chris@0 27 $this->assertFalse($node->isProtected());
Chris@0 28 $this->assertFalse($node->isPrivate());
Chris@0 29 $this->assertFalse($node->isAbstract());
Chris@0 30 $this->assertFalse($node->isFinal());
Chris@0 31 $this->assertFalse($node->isStatic());
Chris@13 32 $this->assertFalse($node->isMagic());
Chris@0 33 }
Chris@0 34
Chris@0 35 public function provideModifiers() {
Chris@13 36 return [
Chris@13 37 ['public'],
Chris@13 38 ['protected'],
Chris@13 39 ['private'],
Chris@13 40 ['abstract'],
Chris@13 41 ['final'],
Chris@13 42 ['static'],
Chris@13 43 ];
Chris@0 44 }
Chris@0 45
Chris@0 46 /**
Chris@0 47 * Checks that implicit public modifier detection for method is working
Chris@0 48 *
Chris@0 49 * @dataProvider implicitPublicModifiers
Chris@0 50 *
Chris@13 51 * @param string $modifier Node type modifier
Chris@0 52 */
Chris@13 53 public function testImplicitPublic(string $modifier)
Chris@0 54 {
Chris@13 55 $node = new ClassMethod('foo', [
Chris@0 56 'type' => constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
Chris@13 57 ]);
Chris@0 58
Chris@0 59 $this->assertTrue($node->isPublic(), 'Node should be implicitly public');
Chris@0 60 }
Chris@0 61
Chris@0 62 public function implicitPublicModifiers() {
Chris@13 63 return [
Chris@13 64 ['abstract'],
Chris@13 65 ['final'],
Chris@13 66 ['static'],
Chris@13 67 ];
Chris@13 68 }
Chris@13 69
Chris@13 70 /**
Chris@13 71 * @dataProvider provideMagics
Chris@13 72 *
Chris@13 73 * @param string $name Node name
Chris@13 74 */
Chris@13 75 public function testMagic(string $name) {
Chris@13 76 $node = new ClassMethod($name);
Chris@13 77 $this->assertTrue($node->isMagic(), 'Method should be magic');
Chris@13 78 }
Chris@13 79
Chris@13 80 public function provideMagics() {
Chris@13 81 return [
Chris@13 82 ['__construct'],
Chris@13 83 ['__DESTRUCT'],
Chris@13 84 ['__caLL'],
Chris@13 85 ['__callstatic'],
Chris@13 86 ['__get'],
Chris@13 87 ['__set'],
Chris@13 88 ['__isset'],
Chris@13 89 ['__unset'],
Chris@13 90 ['__sleep'],
Chris@13 91 ['__wakeup'],
Chris@13 92 ['__tostring'],
Chris@13 93 ['__set_state'],
Chris@13 94 ['__clone'],
Chris@13 95 ['__invoke'],
Chris@13 96 ['__debuginfo'],
Chris@13 97 ];
Chris@13 98 }
Chris@13 99
Chris@13 100 public function testFunctionLike() {
Chris@13 101 $param = new Param(new Variable('a'));
Chris@13 102 $type = new Name('Foo');
Chris@13 103 $return = new Return_(new Variable('a'));
Chris@13 104 $method = new ClassMethod('test', [
Chris@13 105 'byRef' => false,
Chris@13 106 'params' => [$param],
Chris@13 107 'returnType' => $type,
Chris@13 108 'stmts' => [$return],
Chris@13 109 ]);
Chris@13 110
Chris@13 111 $this->assertFalse($method->returnsByRef());
Chris@13 112 $this->assertSame([$param], $method->getParams());
Chris@13 113 $this->assertSame($type, $method->getReturnType());
Chris@13 114 $this->assertSame([$return], $method->getStmts());
Chris@13 115
Chris@13 116 $method = new ClassMethod('test', [
Chris@13 117 'byRef' => true,
Chris@13 118 'stmts' => null,
Chris@13 119 ]);
Chris@13 120
Chris@13 121 $this->assertTrue($method->returnsByRef());
Chris@13 122 $this->assertNull($method->getStmts());
Chris@0 123 }
Chris@0 124 }