annotate vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
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\CodeCleaner;
Chris@13 13
Chris@13 14 use Psy\CodeCleaner\RequirePass;
Chris@13 15
Chris@13 16 class RequirePassTest extends CodeCleanerTestCase
Chris@13 17 {
Chris@13 18 public function setUp()
Chris@13 19 {
Chris@13 20 $this->setPass(new RequirePass());
Chris@13 21 }
Chris@13 22
Chris@13 23 /**
Chris@13 24 * @dataProvider exitStatements
Chris@13 25 */
Chris@13 26 public function testExitStatement($from, $to)
Chris@13 27 {
Chris@13 28 $this->assertProcessesAs($from, $to);
Chris@13 29 }
Chris@13 30
Chris@13 31 public function exitStatements()
Chris@13 32 {
Chris@13 33 $resolve = '\\Psy\\CodeCleaner\\RequirePass::resolve';
Chris@13 34
Chris@13 35 return [
Chris@13 36 // The basics
Chris@13 37 ['require "a"', "require $resolve(\"a\", 1);"],
Chris@13 38 ['require "b.php"', "require $resolve(\"b.php\", 1);"],
Chris@13 39 ['require_once "c"', "require_once $resolve(\"c\", 1);"],
Chris@13 40 ['require_once "d.php"', "require_once $resolve(\"d.php\", 1);"],
Chris@13 41
Chris@13 42 // Ensure that line numbers work correctly
Chris@13 43 ["null;\nrequire \"e.php\"", "null;\nrequire $resolve(\"e.php\", 2);"],
Chris@13 44 ["null;\nrequire_once \"f.php\"", "null;\nrequire_once $resolve(\"f.php\", 2);"],
Chris@13 45
Chris@13 46 // Things with expressions
Chris@13 47 ['require $foo', "require $resolve(\$foo, 1);"],
Chris@13 48 ['require_once $foo', "require_once $resolve(\$foo, 1);"],
Chris@13 49 ['require ($bar = "g.php")', "require $resolve(\$bar = \"g.php\", 1);"],
Chris@13 50 ['require_once ($bar = "h.php")', "require_once $resolve(\$bar = \"h.php\", 1);"],
Chris@13 51 ['$bar = require ($baz = "i.php")', "\$bar = (require $resolve(\$baz = \"i.php\", 1));"],
Chris@13 52 ['$bar = require_once ($baz = "j.php")', "\$bar = (require_once $resolve(\$baz = \"j.php\", 1));"],
Chris@13 53 ];
Chris@13 54 }
Chris@13 55
Chris@13 56 /**
Chris@13 57 * @expectedException \Psy\Exception\FatalErrorException
Chris@13 58 * @expectedExceptionMessage Failed opening required 'not a file name' in eval()'d code on line 2
Chris@13 59 */
Chris@13 60 public function testResolve()
Chris@13 61 {
Chris@13 62 RequirePass::resolve('not a file name', 2);
Chris@13 63 }
Chris@13 64
Chris@13 65 /**
Chris@13 66 * @dataProvider emptyWarnings
Chris@13 67 *
Chris@13 68 * @expectedException \Psy\Exception\ErrorException
Chris@13 69 * @expectedExceptionMessage Filename cannot be empty on line 1
Chris@13 70 */
Chris@13 71 public function testResolveEmptyWarnings($file)
Chris@13 72 {
Chris@17 73 if (!E_WARNING & \error_reporting()) {
Chris@13 74 $this->markTestSkipped();
Chris@13 75 }
Chris@13 76
Chris@13 77 RequirePass::resolve($file, 1);
Chris@13 78 }
Chris@13 79
Chris@13 80 public function emptyWarnings()
Chris@13 81 {
Chris@13 82 return [
Chris@13 83 [null],
Chris@13 84 [false],
Chris@13 85 [''],
Chris@13 86 ];
Chris@13 87 }
Chris@16 88
Chris@16 89 public function testResolveWorks()
Chris@16 90 {
Chris@16 91 $this->assertEquals(__FILE__, RequirePass::resolve(__FILE__, 3));
Chris@16 92 }
Chris@13 93 }