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'],
+        ];
+    }
+}