annotate vendor/psy/psysh/test/CodeCleanerTest.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;
Chris@13 13
Chris@13 14 use Psy\CodeCleaner;
Chris@13 15
Chris@13 16 class CodeCleanerTest extends \PHPUnit\Framework\TestCase
Chris@13 17 {
Chris@13 18 /**
Chris@13 19 * @dataProvider semicolonCodeProvider
Chris@13 20 */
Chris@13 21 public function testAutomaticSemicolons(array $lines, $requireSemicolons, $expected)
Chris@13 22 {
Chris@13 23 $cc = new CodeCleaner();
Chris@13 24 $this->assertSame($expected, $cc->clean($lines, $requireSemicolons));
Chris@13 25 }
Chris@13 26
Chris@13 27 public function semicolonCodeProvider()
Chris@13 28 {
Chris@13 29 return [
Chris@13 30 [['true'], false, 'return true;'],
Chris@13 31 [['true;'], false, 'return true;'],
Chris@13 32 [['true;'], true, 'return true;'],
Chris@13 33 [['true'], true, false],
Chris@13 34
Chris@13 35 [['echo "foo";', 'true'], true, false],
Chris@13 36
Chris@13 37 [['echo "foo";', 'true'], false, "echo \"foo\";\nreturn true;"],
Chris@13 38 ];
Chris@13 39 }
Chris@13 40
Chris@13 41 /**
Chris@13 42 * @dataProvider unclosedStatementsProvider
Chris@13 43 */
Chris@13 44 public function testUnclosedStatements(array $lines, $isUnclosed)
Chris@13 45 {
Chris@13 46 $cc = new CodeCleaner();
Chris@13 47 $res = $cc->clean($lines);
Chris@13 48
Chris@13 49 if ($isUnclosed) {
Chris@13 50 $this->assertFalse($res);
Chris@13 51 } else {
Chris@13 52 $this->assertNotFalse($res);
Chris@13 53 }
Chris@13 54 }
Chris@13 55
Chris@13 56 public function unclosedStatementsProvider()
Chris@13 57 {
Chris@13 58 return [
Chris@13 59 [['echo "'], true],
Chris@13 60 [['echo \''], true],
Chris@13 61 [['if (1) {'], true],
Chris@13 62
Chris@16 63 [['echo "foo",'], true],
Chris@16 64
Chris@13 65 [['echo ""'], false],
Chris@13 66 [["echo ''"], false],
Chris@13 67 [['if (1) {}'], false],
Chris@13 68
Chris@13 69 [['// closed comment'], false],
Chris@13 70 [['function foo() { /**'], true],
Chris@13 71
Chris@13 72 [['var_dump(1, 2,'], true],
Chris@13 73 [['var_dump(1, 2,', '3)'], false],
Chris@13 74 ];
Chris@13 75 }
Chris@13 76
Chris@13 77 /**
Chris@13 78 * @dataProvider moreUnclosedStatementsProvider
Chris@13 79 */
Chris@13 80 public function testMoreUnclosedStatements(array $lines)
Chris@13 81 {
Chris@17 82 if (\defined('HHVM_VERSION')) {
Chris@13 83 $this->markTestSkipped('HHVM not supported.');
Chris@13 84 }
Chris@13 85
Chris@13 86 $cc = new CodeCleaner();
Chris@13 87 $res = $cc->clean($lines);
Chris@13 88
Chris@13 89 $this->assertFalse($res);
Chris@13 90 }
Chris@13 91
Chris@13 92 public function moreUnclosedStatementsProvider()
Chris@13 93 {
Chris@13 94 return [
Chris@13 95 [["\$content = <<<EOS\n"]],
Chris@13 96 [["\$content = <<<'EOS'\n"]],
Chris@13 97
Chris@13 98 [['/* unclosed comment']],
Chris@13 99 [['/** unclosed comment']],
Chris@13 100 ];
Chris@13 101 }
Chris@13 102
Chris@13 103 /**
Chris@13 104 * @dataProvider invalidStatementsProvider
Chris@13 105 * @expectedException \Psy\Exception\ParseErrorException
Chris@13 106 */
Chris@13 107 public function testInvalidStatementsThrowParseErrors($code)
Chris@13 108 {
Chris@13 109 $cc = new CodeCleaner();
Chris@13 110 $cc->clean([$code]);
Chris@13 111 }
Chris@13 112
Chris@13 113 public function invalidStatementsProvider()
Chris@13 114 {
Chris@13 115 // n.b. We used to check that `var_dump(1,2,)` failed, but PHP Parser
Chris@13 116 // 4.x backported trailing comma function calls from PHP 7.3 for free!
Chris@13 117 // so we're not going to spend too much time worrying about it :)
Chris@13 118
Chris@13 119 return [
Chris@13 120 ['function "what'],
Chris@13 121 ["function 'what"],
Chris@13 122 ['echo }'],
Chris@13 123 ['echo {'],
Chris@13 124 ['if (1) }'],
Chris@13 125 ['echo """'],
Chris@13 126 ["echo '''"],
Chris@13 127 ['$foo "bar'],
Chris@13 128 ['$foo \'bar'],
Chris@13 129 ];
Chris@13 130 }
Chris@13 131 }