nginxsonarrradarrplexorganizrdashboardbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbget
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							68 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							68 lines
						
					
					
						
							1.9 KiB
						
					
					
				
								<?php declare(strict_types=1);
							 | 
						|
								
							 | 
						|
								namespace PhpParser;
							 | 
						|
								
							 | 
						|
								class CodeTestParser
							 | 
						|
								{
							 | 
						|
								    public function parseTest($code, $chunksPerTest) {
							 | 
						|
								        $code = canonicalize($code);
							 | 
						|
								
							 | 
						|
								        // evaluate @@{expr}@@ expressions
							 | 
						|
								        $code = preg_replace_callback(
							 | 
						|
								            '/@@\{(.*?)\}@@/',
							 | 
						|
								            function($matches) {
							 | 
						|
								                return eval('return ' . $matches[1] . ';');
							 | 
						|
								            },
							 | 
						|
								            $code
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        // parse sections
							 | 
						|
								        $parts = preg_split("/\n-----(?:\n|$)/", $code);
							 | 
						|
								
							 | 
						|
								        // first part is the name
							 | 
						|
								        $name = array_shift($parts);
							 | 
						|
								
							 | 
						|
								        // multiple sections possible with always two forming a pair
							 | 
						|
								        $chunks = array_chunk($parts, $chunksPerTest);
							 | 
						|
								        $tests = [];
							 | 
						|
								        foreach ($chunks as $i => $chunk) {
							 | 
						|
								            $lastPart = array_pop($chunk);
							 | 
						|
								            list($lastPart, $mode) = $this->extractMode($lastPart);
							 | 
						|
								            $tests[] = [$mode, array_merge($chunk, [$lastPart])];
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        return [$name, $tests];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function reconstructTest($name, array $tests) {
							 | 
						|
								        $result = $name;
							 | 
						|
								        foreach ($tests as list($mode, $parts)) {
							 | 
						|
								            $lastPart = array_pop($parts);
							 | 
						|
								            foreach ($parts as $part) {
							 | 
						|
								                $result .= "\n-----\n$part";
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            $result .= "\n-----\n";
							 | 
						|
								            if (null !== $mode) {
							 | 
						|
								                $result .= "!!$mode\n";
							 | 
						|
								            }
							 | 
						|
								            $result .= $lastPart;
							 | 
						|
								        }
							 | 
						|
								        return $result;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    private function extractMode($expected) {
							 | 
						|
								        $firstNewLine = strpos($expected, "\n");
							 | 
						|
								        if (false === $firstNewLine) {
							 | 
						|
								            $firstNewLine = strlen($expected);
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $firstLine = substr($expected, 0, $firstNewLine);
							 | 
						|
								        if (0 !== strpos($firstLine, '!!')) {
							 | 
						|
								            return [$expected, null];
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $expected = (string) substr($expected, $firstNewLine + 1);
							 | 
						|
								        return [$expected, substr($firstLine, 2)];
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |