Chris@13
|
1 <?php
|
Chris@13
|
2
|
Chris@13
|
3 /*
|
Chris@13
|
4 * This file is part of Psy Shell.
|
Chris@13
|
5 *
|
Chris@13
|
6 * (c) 2012-2018 Justin Hileman
|
Chris@13
|
7 *
|
Chris@13
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@13
|
9 * file that was distributed with this source code.
|
Chris@13
|
10 */
|
Chris@13
|
11
|
Chris@13
|
12 namespace Psy\Test\Sudo;
|
Chris@13
|
13
|
Chris@13
|
14 use PhpParser\NodeTraverser;
|
Chris@13
|
15 use Psy\Sudo\SudoVisitor;
|
Chris@13
|
16 use Psy\Test\ParserTestCase;
|
Chris@13
|
17
|
Chris@13
|
18 class SudoVisitorTest extends ParserTestCase
|
Chris@13
|
19 {
|
Chris@13
|
20 public function setUp()
|
Chris@13
|
21 {
|
Chris@13
|
22 $this->traverser = new NodeTraverser();
|
Chris@13
|
23 $this->traverser->addVisitor(new SudoVisitor());
|
Chris@13
|
24 }
|
Chris@13
|
25
|
Chris@13
|
26 /**
|
Chris@13
|
27 * @dataProvider propertyFetches
|
Chris@13
|
28 */
|
Chris@13
|
29 public function testPropertyFetch($from, $to)
|
Chris@13
|
30 {
|
Chris@13
|
31 $this->assertProcessesAs($from, $to);
|
Chris@13
|
32 }
|
Chris@13
|
33
|
Chris@13
|
34 public function propertyFetches()
|
Chris@13
|
35 {
|
Chris@13
|
36 return [
|
Chris@13
|
37 ['$a->b', "\Psy\Sudo::fetchProperty(\$a, 'b');"],
|
Chris@13
|
38 ['$a->$b', '\Psy\Sudo::fetchProperty($a, $b);'],
|
Chris@13
|
39 ["\$a->{'b'}", "\Psy\Sudo::fetchProperty(\$a, 'b');"],
|
Chris@13
|
40 ];
|
Chris@13
|
41 }
|
Chris@13
|
42
|
Chris@13
|
43 /**
|
Chris@13
|
44 * @dataProvider propertyAssigns
|
Chris@13
|
45 */
|
Chris@13
|
46 public function testPropertyAssign($from, $to)
|
Chris@13
|
47 {
|
Chris@13
|
48 $this->assertProcessesAs($from, $to);
|
Chris@13
|
49 }
|
Chris@13
|
50
|
Chris@13
|
51 public function propertyAssigns()
|
Chris@13
|
52 {
|
Chris@13
|
53 return [
|
Chris@13
|
54 ['$a->b = $c', "\Psy\Sudo::assignProperty(\$a, 'b', \$c);"],
|
Chris@13
|
55 ['$a->$b = $c', '\Psy\Sudo::assignProperty($a, $b, $c);'],
|
Chris@13
|
56 ["\$a->{'b'} = \$c", "\Psy\Sudo::assignProperty(\$a, 'b', \$c);"],
|
Chris@13
|
57 ];
|
Chris@13
|
58 }
|
Chris@13
|
59
|
Chris@13
|
60 /**
|
Chris@13
|
61 * @dataProvider methodCalls
|
Chris@13
|
62 */
|
Chris@13
|
63 public function testMethodCall($from, $to)
|
Chris@13
|
64 {
|
Chris@13
|
65 $this->assertProcessesAs($from, $to);
|
Chris@13
|
66 }
|
Chris@13
|
67
|
Chris@13
|
68 public function methodCalls()
|
Chris@13
|
69 {
|
Chris@13
|
70 return [
|
Chris@13
|
71 ['$a->b()', "\Psy\Sudo::callMethod(\$a, 'b');"],
|
Chris@13
|
72 ['$a->$b()', '\Psy\Sudo::callMethod($a, $b);'],
|
Chris@13
|
73 ["\$a->b(\$c, 'd')", "\Psy\Sudo::callMethod(\$a, 'b', \$c, 'd');"],
|
Chris@13
|
74 ["\$a->\$b(\$c, 'd')", "\Psy\Sudo::callMethod(\$a, \$b, \$c, 'd');"],
|
Chris@13
|
75 ];
|
Chris@13
|
76 }
|
Chris@13
|
77
|
Chris@13
|
78 /**
|
Chris@13
|
79 * @dataProvider staticPropertyFetches
|
Chris@13
|
80 */
|
Chris@13
|
81 public function testStaticPropertyFetch($from, $to)
|
Chris@13
|
82 {
|
Chris@13
|
83 $this->assertProcessesAs($from, $to);
|
Chris@13
|
84 }
|
Chris@13
|
85
|
Chris@13
|
86 public function staticPropertyFetches()
|
Chris@13
|
87 {
|
Chris@13
|
88 return [
|
Chris@13
|
89 ['A::$b', "\Psy\Sudo::fetchStaticProperty('A', 'b');"],
|
Chris@13
|
90 ['$a::$b', "\Psy\Sudo::fetchStaticProperty(\$a, 'b');"],
|
Chris@13
|
91 ];
|
Chris@13
|
92 }
|
Chris@13
|
93
|
Chris@13
|
94 /**
|
Chris@13
|
95 * @dataProvider staticPropertyAssigns
|
Chris@13
|
96 */
|
Chris@13
|
97 public function testStaticPropertyAssign($from, $to)
|
Chris@13
|
98 {
|
Chris@13
|
99 $this->assertProcessesAs($from, $to);
|
Chris@13
|
100 }
|
Chris@13
|
101
|
Chris@13
|
102 public function staticPropertyAssigns()
|
Chris@13
|
103 {
|
Chris@13
|
104 return [
|
Chris@13
|
105 ['A::$b = $c', "\Psy\Sudo::assignStaticProperty('A', 'b', \$c);"],
|
Chris@13
|
106 ['$a::$b = $c', "\Psy\Sudo::assignStaticProperty(\$a, 'b', \$c);"],
|
Chris@13
|
107 ];
|
Chris@13
|
108 }
|
Chris@13
|
109
|
Chris@13
|
110 /**
|
Chris@13
|
111 * @dataProvider staticCalls
|
Chris@13
|
112 */
|
Chris@13
|
113 public function testStaticCall($from, $to)
|
Chris@13
|
114 {
|
Chris@13
|
115 $this->assertProcessesAs($from, $to);
|
Chris@13
|
116 }
|
Chris@13
|
117
|
Chris@13
|
118 public function staticCalls()
|
Chris@13
|
119 {
|
Chris@13
|
120 return [
|
Chris@13
|
121 ['A::b()', "\Psy\Sudo::callStatic('A', 'b');"],
|
Chris@13
|
122 ['A::$b()', "\Psy\Sudo::callStatic('A', \$b);"],
|
Chris@13
|
123 ["A::b(\$c, 'd')", "\Psy\Sudo::callStatic('A', 'b', \$c, 'd');"],
|
Chris@13
|
124 ["A::\$b(\$c, 'd')", "\Psy\Sudo::callStatic('A', \$b, \$c, 'd');"],
|
Chris@13
|
125 ];
|
Chris@13
|
126 }
|
Chris@13
|
127
|
Chris@13
|
128 /**
|
Chris@13
|
129 * @dataProvider classConstFetches
|
Chris@13
|
130 */
|
Chris@13
|
131 public function testClassConstFetch($from, $to)
|
Chris@13
|
132 {
|
Chris@13
|
133 $this->assertProcessesAs($from, $to);
|
Chris@13
|
134 }
|
Chris@13
|
135
|
Chris@13
|
136 public function classConstFetches()
|
Chris@13
|
137 {
|
Chris@13
|
138 return [
|
Chris@13
|
139 ['A::B', "\Psy\Sudo::fetchClassConst('A', 'B');"],
|
Chris@13
|
140 ];
|
Chris@13
|
141 }
|
Chris@13
|
142 }
|