annotate vendor/psy/psysh/test/CodeCleanerTest.php @ 13:5fb285c0d0e3

Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've been lucky to get away with this so far, as we don't support self-registration which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5 was vulnerable to.
author Chris Cannam
date Mon, 23 Apr 2018 09:33:26 +0100
parents
children c2387f117808
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@13 63 [['echo ""'], false],
Chris@13 64 [["echo ''"], false],
Chris@13 65 [['if (1) {}'], false],
Chris@13 66
Chris@13 67 [['// closed comment'], false],
Chris@13 68 [['function foo() { /**'], true],
Chris@13 69
Chris@13 70 [['var_dump(1, 2,'], true],
Chris@13 71 [['var_dump(1, 2,', '3)'], false],
Chris@13 72 ];
Chris@13 73 }
Chris@13 74
Chris@13 75 /**
Chris@13 76 * @dataProvider moreUnclosedStatementsProvider
Chris@13 77 */
Chris@13 78 public function testMoreUnclosedStatements(array $lines)
Chris@13 79 {
Chris@13 80 if (defined('HHVM_VERSION')) {
Chris@13 81 $this->markTestSkipped('HHVM not supported.');
Chris@13 82 }
Chris@13 83
Chris@13 84 $cc = new CodeCleaner();
Chris@13 85 $res = $cc->clean($lines);
Chris@13 86
Chris@13 87 $this->assertFalse($res);
Chris@13 88 }
Chris@13 89
Chris@13 90 public function moreUnclosedStatementsProvider()
Chris@13 91 {
Chris@13 92 return [
Chris@13 93 [["\$content = <<<EOS\n"]],
Chris@13 94 [["\$content = <<<'EOS'\n"]],
Chris@13 95
Chris@13 96 [['/* unclosed comment']],
Chris@13 97 [['/** unclosed comment']],
Chris@13 98 ];
Chris@13 99 }
Chris@13 100
Chris@13 101 /**
Chris@13 102 * @dataProvider invalidStatementsProvider
Chris@13 103 * @expectedException \Psy\Exception\ParseErrorException
Chris@13 104 */
Chris@13 105 public function testInvalidStatementsThrowParseErrors($code)
Chris@13 106 {
Chris@13 107 $cc = new CodeCleaner();
Chris@13 108 $cc->clean([$code]);
Chris@13 109 }
Chris@13 110
Chris@13 111 public function invalidStatementsProvider()
Chris@13 112 {
Chris@13 113 // n.b. We used to check that `var_dump(1,2,)` failed, but PHP Parser
Chris@13 114 // 4.x backported trailing comma function calls from PHP 7.3 for free!
Chris@13 115 // so we're not going to spend too much time worrying about it :)
Chris@13 116
Chris@13 117 return [
Chris@13 118 ['function "what'],
Chris@13 119 ["function 'what"],
Chris@13 120 ['echo }'],
Chris@13 121 ['echo {'],
Chris@13 122 ['if (1) }'],
Chris@13 123 ['echo """'],
Chris@13 124 ["echo '''"],
Chris@13 125 ['$foo "bar'],
Chris@13 126 ['$foo \'bar'],
Chris@13 127 ];
Chris@13 128 }
Chris@13 129 }