Chris@13: setPass(new RequirePass()); Chris@13: } Chris@13: Chris@13: /** Chris@13: * @dataProvider exitStatements Chris@13: */ Chris@13: public function testExitStatement($from, $to) Chris@13: { Chris@13: $this->assertProcessesAs($from, $to); Chris@13: } Chris@13: Chris@13: public function exitStatements() Chris@13: { Chris@13: $resolve = '\\Psy\\CodeCleaner\\RequirePass::resolve'; Chris@13: Chris@13: return [ Chris@13: // The basics Chris@13: ['require "a"', "require $resolve(\"a\", 1);"], Chris@13: ['require "b.php"', "require $resolve(\"b.php\", 1);"], Chris@13: ['require_once "c"', "require_once $resolve(\"c\", 1);"], Chris@13: ['require_once "d.php"', "require_once $resolve(\"d.php\", 1);"], Chris@13: Chris@13: // Ensure that line numbers work correctly Chris@13: ["null;\nrequire \"e.php\"", "null;\nrequire $resolve(\"e.php\", 2);"], Chris@13: ["null;\nrequire_once \"f.php\"", "null;\nrequire_once $resolve(\"f.php\", 2);"], Chris@13: Chris@13: // Things with expressions Chris@13: ['require $foo', "require $resolve(\$foo, 1);"], Chris@13: ['require_once $foo', "require_once $resolve(\$foo, 1);"], Chris@13: ['require ($bar = "g.php")', "require $resolve(\$bar = \"g.php\", 1);"], Chris@13: ['require_once ($bar = "h.php")', "require_once $resolve(\$bar = \"h.php\", 1);"], Chris@13: ['$bar = require ($baz = "i.php")', "\$bar = (require $resolve(\$baz = \"i.php\", 1));"], Chris@13: ['$bar = require_once ($baz = "j.php")', "\$bar = (require_once $resolve(\$baz = \"j.php\", 1));"], Chris@13: ]; Chris@13: } Chris@13: Chris@13: /** Chris@13: * @expectedException \Psy\Exception\FatalErrorException Chris@13: * @expectedExceptionMessage Failed opening required 'not a file name' in eval()'d code on line 2 Chris@13: */ Chris@13: public function testResolve() Chris@13: { Chris@13: RequirePass::resolve('not a file name', 2); Chris@13: } Chris@13: Chris@13: /** Chris@13: * @dataProvider emptyWarnings Chris@13: * Chris@13: * @expectedException \Psy\Exception\ErrorException Chris@13: * @expectedExceptionMessage Filename cannot be empty on line 1 Chris@13: */ Chris@13: public function testResolveEmptyWarnings($file) Chris@13: { Chris@17: if (!E_WARNING & \error_reporting()) { Chris@13: $this->markTestSkipped(); Chris@13: } Chris@13: Chris@13: RequirePass::resolve($file, 1); Chris@13: } Chris@13: Chris@13: public function emptyWarnings() Chris@13: { Chris@13: return [ Chris@13: [null], Chris@13: [false], Chris@13: [''], Chris@13: ]; Chris@13: } Chris@16: Chris@16: public function testResolveWorks() Chris@16: { Chris@16: $this->assertEquals(__FILE__, RequirePass::resolve(__FILE__, 3)); Chris@16: } Chris@13: }