mirror of
https://github.com/danog/PHP-Parser.git
synced 2024-11-27 04:14:44 +01:00
dce19b074b
Were this library to be fully annotated with scalar types and return types where possible and were strict types to be enabled for all files, the test suite would now pass.
54 lines
1.6 KiB
PHP
54 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace PhpParser;
|
|
|
|
abstract class CodeTestAbstract extends \PHPUnit_Framework_TestCase
|
|
{
|
|
protected function getTests($directory, $fileExtension) {
|
|
$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 = realpath($file->getPathname());
|
|
$fileContents = file_get_contents($fileName);
|
|
|
|
// evaluate @@{expr}@@ expressions
|
|
$fileContents = preg_replace_callback(
|
|
'/@@\{(.*?)\}@@/',
|
|
array($this, 'evalCallback'),
|
|
$fileContents
|
|
);
|
|
|
|
// parse sections
|
|
$parts = array_map('trim', explode('-----', $fileContents));
|
|
|
|
// first part is the name
|
|
$name = array_shift($parts) . ' (' . $fileName . ')';
|
|
|
|
// multiple sections possible with always two forming a pair
|
|
foreach (array_chunk($parts, 2) as $chunk) {
|
|
$tests[] = array($name, $chunk[0], $chunk[1]);
|
|
}
|
|
}
|
|
|
|
return $tests;
|
|
}
|
|
|
|
protected function evalCallback($matches) {
|
|
return eval('return ' . $matches[1] . ';');
|
|
}
|
|
|
|
protected function canonicalize($str) {
|
|
// trim from both sides
|
|
$str = trim($str);
|
|
|
|
// normalize EOL to \n
|
|
$str = str_replace(array("\r\n", "\r"), "\n", $str);
|
|
|
|
// trim right side of all lines
|
|
return implode("\n", array_map('rtrim', explode("\n", $str)));
|
|
}
|
|
}
|