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