Mercurial > hg > isophonics-drupal-site
comparison vendor/nikic/php-parser/test/PhpParser/CodeTestParser.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 |
comparison
equal
deleted
inserted
replaced
12:7a779792577d | 13:5fb285c0d0e3 |
---|---|
1 <?php declare(strict_types=1); | |
2 | |
3 namespace PhpParser; | |
4 | |
5 class CodeTestParser | |
6 { | |
7 public function parseTest($code, $chunksPerTest) { | |
8 $code = canonicalize($code); | |
9 | |
10 // evaluate @@{expr}@@ expressions | |
11 $code = preg_replace_callback( | |
12 '/@@\{(.*?)\}@@/', | |
13 function($matches) { | |
14 return eval('return ' . $matches[1] . ';'); | |
15 }, | |
16 $code | |
17 ); | |
18 | |
19 // parse sections | |
20 $parts = preg_split("/\n-----(?:\n|$)/", $code); | |
21 | |
22 // first part is the name | |
23 $name = array_shift($parts); | |
24 | |
25 // multiple sections possible with always two forming a pair | |
26 $chunks = array_chunk($parts, $chunksPerTest); | |
27 $tests = []; | |
28 foreach ($chunks as $i => $chunk) { | |
29 $lastPart = array_pop($chunk); | |
30 list($lastPart, $mode) = $this->extractMode($lastPart); | |
31 $tests[] = [$mode, array_merge($chunk, [$lastPart])]; | |
32 } | |
33 | |
34 return [$name, $tests]; | |
35 } | |
36 | |
37 public function reconstructTest($name, array $tests) { | |
38 $result = $name; | |
39 foreach ($tests as list($mode, $parts)) { | |
40 $lastPart = array_pop($parts); | |
41 foreach ($parts as $part) { | |
42 $result .= "\n-----\n$part"; | |
43 } | |
44 | |
45 $result .= "\n-----\n"; | |
46 if (null !== $mode) { | |
47 $result .= "!!$mode\n"; | |
48 } | |
49 $result .= $lastPart; | |
50 } | |
51 return $result; | |
52 } | |
53 | |
54 private function extractMode($expected) { | |
55 $firstNewLine = strpos($expected, "\n"); | |
56 if (false === $firstNewLine) { | |
57 $firstNewLine = strlen($expected); | |
58 } | |
59 | |
60 $firstLine = substr($expected, 0, $firstNewLine); | |
61 if (0 !== strpos($firstLine, '!!')) { | |
62 return [$expected, null]; | |
63 } | |
64 | |
65 $expected = (string) substr($expected, $firstNewLine + 1); | |
66 return [$expected, substr($firstLine, 2)]; | |
67 } | |
68 } |