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