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
|
Chris@17
|
9 class ClassMethodTest extends \PHPUnit\Framework\TestCase
|
Chris@0
|
10 {
|
Chris@0
|
11 /**
|
Chris@0
|
12 * @dataProvider provideModifiers
|
Chris@0
|
13 */
|
Chris@0
|
14 public function testModifiers($modifier) {
|
Chris@13
|
15 $node = new ClassMethod('foo', [
|
Chris@0
|
16 'type' => constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
|
Chris@13
|
17 ]);
|
Chris@0
|
18
|
Chris@0
|
19 $this->assertTrue($node->{'is' . $modifier}());
|
Chris@0
|
20 }
|
Chris@0
|
21
|
Chris@0
|
22 public function testNoModifiers() {
|
Chris@13
|
23 $node = new ClassMethod('foo', ['type' => 0]);
|
Chris@0
|
24
|
Chris@0
|
25 $this->assertTrue($node->isPublic());
|
Chris@0
|
26 $this->assertFalse($node->isProtected());
|
Chris@0
|
27 $this->assertFalse($node->isPrivate());
|
Chris@0
|
28 $this->assertFalse($node->isAbstract());
|
Chris@0
|
29 $this->assertFalse($node->isFinal());
|
Chris@0
|
30 $this->assertFalse($node->isStatic());
|
Chris@13
|
31 $this->assertFalse($node->isMagic());
|
Chris@0
|
32 }
|
Chris@0
|
33
|
Chris@0
|
34 public function provideModifiers() {
|
Chris@13
|
35 return [
|
Chris@13
|
36 ['public'],
|
Chris@13
|
37 ['protected'],
|
Chris@13
|
38 ['private'],
|
Chris@13
|
39 ['abstract'],
|
Chris@13
|
40 ['final'],
|
Chris@13
|
41 ['static'],
|
Chris@13
|
42 ];
|
Chris@0
|
43 }
|
Chris@0
|
44
|
Chris@0
|
45 /**
|
Chris@0
|
46 * Checks that implicit public modifier detection for method is working
|
Chris@0
|
47 *
|
Chris@0
|
48 * @dataProvider implicitPublicModifiers
|
Chris@0
|
49 *
|
Chris@13
|
50 * @param string $modifier Node type modifier
|
Chris@0
|
51 */
|
Chris@13
|
52 public function testImplicitPublic(string $modifier)
|
Chris@0
|
53 {
|
Chris@13
|
54 $node = new ClassMethod('foo', [
|
Chris@0
|
55 'type' => constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
|
Chris@13
|
56 ]);
|
Chris@0
|
57
|
Chris@0
|
58 $this->assertTrue($node->isPublic(), 'Node should be implicitly public');
|
Chris@0
|
59 }
|
Chris@0
|
60
|
Chris@0
|
61 public function implicitPublicModifiers() {
|
Chris@13
|
62 return [
|
Chris@13
|
63 ['abstract'],
|
Chris@13
|
64 ['final'],
|
Chris@13
|
65 ['static'],
|
Chris@13
|
66 ];
|
Chris@13
|
67 }
|
Chris@13
|
68
|
Chris@13
|
69 /**
|
Chris@13
|
70 * @dataProvider provideMagics
|
Chris@13
|
71 *
|
Chris@13
|
72 * @param string $name Node name
|
Chris@13
|
73 */
|
Chris@13
|
74 public function testMagic(string $name) {
|
Chris@13
|
75 $node = new ClassMethod($name);
|
Chris@13
|
76 $this->assertTrue($node->isMagic(), 'Method should be magic');
|
Chris@13
|
77 }
|
Chris@13
|
78
|
Chris@13
|
79 public function provideMagics() {
|
Chris@13
|
80 return [
|
Chris@13
|
81 ['__construct'],
|
Chris@13
|
82 ['__DESTRUCT'],
|
Chris@13
|
83 ['__caLL'],
|
Chris@13
|
84 ['__callstatic'],
|
Chris@13
|
85 ['__get'],
|
Chris@13
|
86 ['__set'],
|
Chris@13
|
87 ['__isset'],
|
Chris@13
|
88 ['__unset'],
|
Chris@13
|
89 ['__sleep'],
|
Chris@13
|
90 ['__wakeup'],
|
Chris@13
|
91 ['__tostring'],
|
Chris@13
|
92 ['__set_state'],
|
Chris@13
|
93 ['__clone'],
|
Chris@13
|
94 ['__invoke'],
|
Chris@13
|
95 ['__debuginfo'],
|
Chris@13
|
96 ];
|
Chris@13
|
97 }
|
Chris@13
|
98
|
Chris@13
|
99 public function testFunctionLike() {
|
Chris@13
|
100 $param = new Param(new Variable('a'));
|
Chris@13
|
101 $type = new Name('Foo');
|
Chris@13
|
102 $return = new Return_(new Variable('a'));
|
Chris@13
|
103 $method = new ClassMethod('test', [
|
Chris@13
|
104 'byRef' => false,
|
Chris@13
|
105 'params' => [$param],
|
Chris@13
|
106 'returnType' => $type,
|
Chris@13
|
107 'stmts' => [$return],
|
Chris@13
|
108 ]);
|
Chris@13
|
109
|
Chris@13
|
110 $this->assertFalse($method->returnsByRef());
|
Chris@13
|
111 $this->assertSame([$param], $method->getParams());
|
Chris@13
|
112 $this->assertSame($type, $method->getReturnType());
|
Chris@13
|
113 $this->assertSame([$return], $method->getStmts());
|
Chris@13
|
114
|
Chris@13
|
115 $method = new ClassMethod('test', [
|
Chris@13
|
116 'byRef' => true,
|
Chris@13
|
117 'stmts' => null,
|
Chris@13
|
118 ]);
|
Chris@13
|
119
|
Chris@13
|
120 $this->assertTrue($method->returnsByRef());
|
Chris@13
|
121 $this->assertNull($method->getStmts());
|
Chris@0
|
122 }
|
Chris@0
|
123 }
|