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