123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- <?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)));
- }
- }
|