Mercurial > hg > isophonics-drupal-site
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/psy/psysh/test/CodeCleanerTest.php Mon Apr 23 09:33:26 2018 +0100 @@ -0,0 +1,129 @@ +<?php + +/* + * This file is part of Psy Shell. + * + * (c) 2012-2018 Justin Hileman + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Psy\Test; + +use Psy\CodeCleaner; + +class CodeCleanerTest extends \PHPUnit\Framework\TestCase +{ + /** + * @dataProvider semicolonCodeProvider + */ + public function testAutomaticSemicolons(array $lines, $requireSemicolons, $expected) + { + $cc = new CodeCleaner(); + $this->assertSame($expected, $cc->clean($lines, $requireSemicolons)); + } + + public function semicolonCodeProvider() + { + return [ + [['true'], false, 'return true;'], + [['true;'], false, 'return true;'], + [['true;'], true, 'return true;'], + [['true'], true, false], + + [['echo "foo";', 'true'], true, false], + + [['echo "foo";', 'true'], false, "echo \"foo\";\nreturn true;"], + ]; + } + + /** + * @dataProvider unclosedStatementsProvider + */ + public function testUnclosedStatements(array $lines, $isUnclosed) + { + $cc = new CodeCleaner(); + $res = $cc->clean($lines); + + if ($isUnclosed) { + $this->assertFalse($res); + } else { + $this->assertNotFalse($res); + } + } + + public function unclosedStatementsProvider() + { + return [ + [['echo "'], true], + [['echo \''], true], + [['if (1) {'], true], + + [['echo ""'], false], + [["echo ''"], false], + [['if (1) {}'], false], + + [['// closed comment'], false], + [['function foo() { /**'], true], + + [['var_dump(1, 2,'], true], + [['var_dump(1, 2,', '3)'], false], + ]; + } + + /** + * @dataProvider moreUnclosedStatementsProvider + */ + public function testMoreUnclosedStatements(array $lines) + { + if (defined('HHVM_VERSION')) { + $this->markTestSkipped('HHVM not supported.'); + } + + $cc = new CodeCleaner(); + $res = $cc->clean($lines); + + $this->assertFalse($res); + } + + public function moreUnclosedStatementsProvider() + { + return [ + [["\$content = <<<EOS\n"]], + [["\$content = <<<'EOS'\n"]], + + [['/* unclosed comment']], + [['/** unclosed comment']], + ]; + } + + /** + * @dataProvider invalidStatementsProvider + * @expectedException \Psy\Exception\ParseErrorException + */ + public function testInvalidStatementsThrowParseErrors($code) + { + $cc = new CodeCleaner(); + $cc->clean([$code]); + } + + public function invalidStatementsProvider() + { + // n.b. We used to check that `var_dump(1,2,)` failed, but PHP Parser + // 4.x backported trailing comma function calls from PHP 7.3 for free! + // so we're not going to spend too much time worrying about it :) + + return [ + ['function "what'], + ["function 'what"], + ['echo }'], + ['echo {'], + ['if (1) }'], + ['echo """'], + ["echo '''"], + ['$foo "bar'], + ['$foo \'bar'], + ]; + } +}