Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / nikic / php-parser / test / PhpParser / CodeTestAbstract.php
index 369ee41b8008cc6acc84170ac4212eac5084f623..5eaf9d1b26dc694e36ad1e76c54e8a2956855ed6 100644 (file)
@@ -1,61 +1,30 @@
-<?php
+<?php declare(strict_types=1);
 
 namespace PhpParser;
 
-abstract class CodeTestAbstract extends \PHPUnit_Framework_TestCase
-{
-    protected function getTests($directory, $fileExtension) {
-        $directory = realpath($directory);
-        $it = new \RecursiveDirectoryIterator($directory);
-        $it = new \RecursiveIteratorIterator($it, \RecursiveIteratorIterator::LEAVES_ONLY);
-        $it = new \RegexIterator($it, '(\.' . preg_quote($fileExtension) . '$)');
-
-        $tests = array();
-        foreach ($it as $file) {
-            $fileName = $file->getPathname();
-            $fileContents = file_get_contents($fileName);
-            $fileContents = canonicalize($fileContents);
+use PHPUnit\Framework\TestCase;
 
-            // evaluate @@{expr}@@ expressions
-            $fileContents = preg_replace_callback(
-                '/@@\{(.*?)\}@@/',
-                function($matches) {
-                    return eval('return ' . $matches[1] . ';');
-                },
-                $fileContents
-            );
+require_once __DIR__ . '/CodeTestParser.php';
 
-            // parse sections
-            $parts = preg_split("/\n-----(?:\n|$)/", $fileContents);
+abstract class CodeTestAbstract extends TestCase
+{
+    protected function getTests($directory, $fileExtension, $chunksPerTest = 2) {
+        $parser = new CodeTestParser;
+        $allTests = [];
+        foreach (filesInDir($directory, $fileExtension) as $fileName => $fileContents) {
+            list($name, $tests) = $parser->parseTest($fileContents, $chunksPerTest);
 
             // first part is the name
-            $name = array_shift($parts) . ' (' . $fileName . ')';
+            $name .= ' (' . $fileName . ')';
             $shortName = ltrim(str_replace($directory, '', $fileName), '/\\');
 
             // multiple sections possible with always two forming a pair
-            $chunks = array_chunk($parts, 2);
-            foreach ($chunks as $i => $chunk) {
-                $dataSetName = $shortName . (count($chunks) > 1 ? '#' . $i : '');
-                list($expected, $mode) = $this->extractMode($chunk[1]);
-                $tests[$dataSetName] = array($name, $chunk[0], $expected, $mode);
+            foreach ($tests as $i => list($mode, $parts)) {
+                $dataSetName = $shortName . (count($parts) > 1 ? '#' . $i : '');
+                $allTests[$dataSetName] = array_merge([$name], $parts, [$mode]);
             }
         }
 
-        return $tests;
-    }
-
-    private function extractMode($expected) {
-        $firstNewLine = strpos($expected, "\n");
-        if (false === $firstNewLine) {
-            $firstNewLine = strlen($expected);
-        }
-
-        $firstLine = substr($expected, 0, $firstNewLine);
-        if (0 !== strpos($firstLine, '!!')) {
-            return [$expected, null];
-        }
-
-        $expected = (string) substr($expected, $firstNewLine + 1);
-        return [$expected, substr($firstLine, 2)];
+        return $allTests;
     }
 }