CodeTestAbstract.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php declare(strict_types=1);
  2. namespace PhpParser;
  3. abstract class CodeTestAbstract extends \PHPUnit\Framework\TestCase {
  4. protected static function getTests($directory, $fileExtension, $chunksPerTest = 2) {
  5. $parser = new CodeTestParser();
  6. $allTests = [];
  7. foreach (filesInDir($directory, $fileExtension) as $fileName => $fileContents) {
  8. list($name, $tests) = $parser->parseTest($fileContents, $chunksPerTest);
  9. // first part is the name
  10. $name .= ' (' . $fileName . ')';
  11. $shortName = ltrim(str_replace($directory, '', $fileName), '/\\');
  12. // multiple sections possible with always two forming a pair
  13. foreach ($tests as $i => list($mode, $parts)) {
  14. $dataSetName = $shortName . (count($parts) > 1 ? '#' . $i : '');
  15. $allTests[$dataSetName] = array_merge([$name], $parts, [$mode]);
  16. }
  17. }
  18. return $allTests;
  19. }
  20. public function parseModeLine(?string $modeLine): array {
  21. if ($modeLine === null) {
  22. return [];
  23. }
  24. $modes = [];
  25. foreach (explode(',', $modeLine) as $mode) {
  26. $kv = explode('=', $mode, 2);
  27. if (isset($kv[1])) {
  28. $modes[$kv[0]] = $kv[1];
  29. } else {
  30. $modes[$kv[0]] = true;
  31. }
  32. }
  33. return $modes;
  34. }
  35. }