4d5ac3420d69aa90d5cf4c100383ec1a145eb03c
[yaffs-website] / vendor / psy / psysh / test / CodeCleaner / UseStatementPassTest.php
1 <?php
2
3 /*
4  * This file is part of Psy Shell.
5  *
6  * (c) 2012-2018 Justin Hileman
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Psy\Test\CodeCleaner;
13
14 use Psy\CodeCleaner\UseStatementPass;
15
16 class UseStatementPassTest extends CodeCleanerTestCase
17 {
18     public function setUp()
19     {
20         $this->setPass(new UseStatementPass());
21     }
22
23     /**
24      * @dataProvider useStatements
25      */
26     public function testProcess($from, $to)
27     {
28         $this->assertProcessesAs($from, $to);
29     }
30
31     public function useStatements()
32     {
33         return [
34             [
35                 "use StdClass as NotSoStd;\n\$std = new NotSoStd();",
36                 '$std = new \\StdClass();',
37             ],
38             [
39                 "namespace Foo;\n\nuse StdClass as S;\n\$std = new S();",
40                 "namespace Foo;\n\n\$std = new \\StdClass();",
41             ],
42             [
43                 "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();",
44                 "namespace Foo;\n\n\$std = new \\StdClass();",
45             ],
46             [
47                 "use Foo\\Bar as fb;\n\$baz = new fb\\Baz();",
48                 '$baz = new \\Foo\\Bar\\Baz();',
49             ],
50             [
51                 "use Foo\\Bar;\n\$baz = new Bar\\Baz();",
52                 '$baz = new \\Foo\\Bar\\Baz();',
53             ],
54             [
55                 "namespace Foo;\nuse Bar;\n\$baz = new Bar\\Baz();",
56                 "namespace Foo;\n\n\$baz = new \\Bar\\Baz();",
57             ],
58             [
59                 "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();\nnamespace Foo;\n\n\$std = new S();",
60                 "namespace Foo;\n\n\$std = new \\StdClass();\nnamespace Foo;\n\n\$std = new \\StdClass();",
61             ],
62             [
63                 "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();\nnamespace Bar;\n\n\$std = new S();",
64                 "namespace Foo;\n\n\$std = new \\StdClass();\nnamespace Bar;\n\n\$std = new S();",
65             ],
66             [
67                 "use Foo\\Bar as fb, Qux as Q;\n\$baz = new fb\\Baz();\n\$qux = new Q();",
68                 "\$baz = new \\Foo\\Bar\\Baz();\n\$qux = new \\Qux();",
69             ],
70         ];
71     }
72
73     /**
74      * @dataProvider groupUseStatements
75      */
76     public function testGroupUseProcess($from, $to)
77     {
78         $this->assertProcessesAs($from, $to);
79     }
80
81     public function groupUseStatements()
82     {
83         if (\version_compare(PHP_VERSION, '7.0', '<')) {
84             $this->markTestSkipped();
85         }
86
87         return [
88             [
89                 "use Foo\\{Bar, Baz, Qux as Q};\n\$bar = new Bar();\n\$baz = new Baz();\n\$qux = new Q();",
90                 "\$bar = new \\Foo\\Bar();\n\$baz = new \\Foo\\Baz();\n\$qux = new \\Foo\\Qux();",
91             ],
92             [
93                 "use X\\{Foo, Bar as B};\n\$foo = new Foo();\n\$baz = new B\\Baz();",
94                 "\$foo = new \\X\\Foo();\n\$baz = new \\X\\Bar\\Baz();",
95             ],
96             [
97                 "use X\\{Foo, Bar as B};\n\$foo = new Foo();\n\$bar = new Bar();\n\$baz = new B\\Baz();",
98                 "\$foo = new \\X\\Foo();\n\$bar = new Bar();\n\$baz = new \\X\\Bar\\Baz();",
99             ],
100         ];
101     }
102 }