Mercurial > hg > isophonics-drupal-site
comparison vendor/nikic/php-parser/test/PhpParser/CodeTestAbstract.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 5fb285c0d0e3 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace PhpParser; | |
4 | |
5 abstract class CodeTestAbstract extends \PHPUnit_Framework_TestCase | |
6 { | |
7 protected function getTests($directory, $fileExtension) { | |
8 $directory = realpath($directory); | |
9 $it = new \RecursiveDirectoryIterator($directory); | |
10 $it = new \RecursiveIteratorIterator($it, \RecursiveIteratorIterator::LEAVES_ONLY); | |
11 $it = new \RegexIterator($it, '(\.' . preg_quote($fileExtension) . '$)'); | |
12 | |
13 $tests = array(); | |
14 foreach ($it as $file) { | |
15 $fileName = $file->getPathname(); | |
16 $fileContents = file_get_contents($fileName); | |
17 $fileContents = canonicalize($fileContents); | |
18 | |
19 // evaluate @@{expr}@@ expressions | |
20 $fileContents = preg_replace_callback( | |
21 '/@@\{(.*?)\}@@/', | |
22 function($matches) { | |
23 return eval('return ' . $matches[1] . ';'); | |
24 }, | |
25 $fileContents | |
26 ); | |
27 | |
28 // parse sections | |
29 $parts = preg_split("/\n-----(?:\n|$)/", $fileContents); | |
30 | |
31 // first part is the name | |
32 $name = array_shift($parts) . ' (' . $fileName . ')'; | |
33 $shortName = ltrim(str_replace($directory, '', $fileName), '/\\'); | |
34 | |
35 // multiple sections possible with always two forming a pair | |
36 $chunks = array_chunk($parts, 2); | |
37 foreach ($chunks as $i => $chunk) { | |
38 $dataSetName = $shortName . (count($chunks) > 1 ? '#' . $i : ''); | |
39 list($expected, $mode) = $this->extractMode($chunk[1]); | |
40 $tests[$dataSetName] = array($name, $chunk[0], $expected, $mode); | |
41 } | |
42 } | |
43 | |
44 return $tests; | |
45 } | |
46 | |
47 private function extractMode($expected) { | |
48 $firstNewLine = strpos($expected, "\n"); | |
49 if (false === $firstNewLine) { | |
50 $firstNewLine = strlen($expected); | |
51 } | |
52 | |
53 $firstLine = substr($expected, 0, $firstNewLine); | |
54 if (0 !== strpos($firstLine, '!!')) { | |
55 return [$expected, null]; | |
56 } | |
57 | |
58 $expected = (string) substr($expected, $firstNewLine + 1); | |
59 return [$expected, substr($firstLine, 2)]; | |
60 } | |
61 } |