Yaffs site version 1.1
[yaffs-website] / vendor / psy / psysh / test / Psy / Test / CodeCleaner / RequirePassTest.php
1 <?php
2
3 /*
4  * This file is part of Psy Shell.
5  *
6  * (c) 2012-2017 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\RequirePass;
15
16 class RequirePassTest extends CodeCleanerTestCase
17 {
18     public function setUp()
19     {
20         $this->setPass(new RequirePass());
21     }
22
23     /**
24      * @dataProvider exitStatements
25      */
26     public function testExitStatement($from, $to)
27     {
28         $this->assertProcessesAs($from, $to);
29     }
30
31     public function exitStatements()
32     {
33         $resolve = '\\Psy\\CodeCleaner\\RequirePass::resolve';
34
35         if (version_compare(PHP_VERSION, '5.4', '<')) {
36             return array(
37                 array('require $foo', "$resolve(\$foo, 1);"),
38                 array('$bar = require $baz', "\$bar = $resolve(\$baz, 1);"),
39             );
40         }
41
42         return array(
43             // The basics
44             array('require "a"', "$resolve(\"a\", 1);"),
45             array('require "b.php"', "$resolve(\"b.php\", 1);"),
46             array('require_once "c"', "$resolve(\"c\", 1);"),
47             array('require_once "d.php"', "$resolve(\"d.php\", 1);"),
48
49             // Ensure that line numbers work correctly
50             array("null;\nrequire \"e.php\"", "null;\n$resolve(\"e.php\", 2);"),
51             array("null;\nrequire_once \"f.php\"", "null;\n$resolve(\"f.php\", 2);"),
52
53             // Things with expressions
54             array('require $foo', "$resolve(\$foo, 1);"),
55             array('require_once $foo', "$resolve(\$foo, 1);"),
56             array('require ($bar = "g.php")', "$resolve(\$bar = \"g.php\", 1);"),
57             array('require_once ($bar = "h.php")', "$resolve(\$bar = \"h.php\", 1);"),
58             array('$bar = require ($baz = "i.php")', "\$bar = $resolve(\$baz = \"i.php\", 1);"),
59             array('$bar = require_once ($baz = "j.php")', "\$bar = $resolve(\$baz = \"j.php\", 1);"),
60         );
61     }
62
63     /**
64      * @expectedException \Psy\Exception\FatalErrorException
65      * @expectedExceptionMessage Failed opening required 'not a file name' in eval()'d code on line 2
66      */
67     public function testResolve()
68     {
69         RequirePass::resolve('not a file name', 2);
70     }
71
72     /**
73      * @dataProvider emptyWarnings
74      *
75      * @expectedException \Psy\Exception\ErrorException
76      * @expectedExceptionMessage Filename cannot be empty on line 1
77      */
78     public function testResolveEmptyWarnings($file)
79     {
80         if (!E_WARNING & error_reporting()) {
81             $this->markTestSkipped();
82         }
83
84         RequirePass::resolve($file, 1);
85     }
86
87     public function emptyWarnings()
88     {
89         return array(
90             array(null),
91             array(false),
92             array(''),
93         );
94     }
95 }