Chris@0: [ Chris@13: 'comments', 'startLine', 'endLine', 'startTokenPos', 'endTokenPos', Chris@13: ]]); Chris@13: $parserName = 'PhpParser\Parser\\' . $version; Chris@13: /** @var PhpParser\Parser $parser */ Chris@13: $parser = new $parserName($lexer); Chris@0: $prettyPrinter = new PhpParser\PrettyPrinter\Standard; Chris@13: $nodeDumper = new PhpParser\NodeDumper; Chris@0: Chris@13: $cloningTraverser = new PhpParser\NodeTraverser; Chris@13: $cloningTraverser->addVisitor(new PhpParser\NodeVisitor\CloningVisitor); Chris@0: Chris@13: $parseFail = $fpppFail = $ppFail = $compareFail = $count = 0; Chris@13: Chris@13: $readTime = $parseTime = $cloneTime = 0; Chris@13: $fpppTime = $ppTime = $reparseTime = $compareTime = 0; Chris@0: $totalStartTime = microtime(true); Chris@0: Chris@0: foreach (new RecursiveIteratorIterator( Chris@0: new RecursiveDirectoryIterator($dir), Chris@0: RecursiveIteratorIterator::LEAVES_ONLY) Chris@0: as $file) { Chris@0: if (!$fileFilter($file)) { Chris@0: continue; Chris@0: } Chris@0: Chris@0: $startTime = microtime(true); Chris@13: $origCode = file_get_contents($file); Chris@0: $readTime += microtime(true) - $startTime; Chris@0: Chris@13: if (null === $origCode = $codeExtractor($file, $origCode)) { Chris@0: continue; Chris@0: } Chris@0: Chris@0: set_time_limit(10); Chris@0: Chris@0: ++$count; Chris@0: Chris@0: if ($showProgress) { Chris@0: echo substr(str_pad('Testing file ' . $count . ': ' . substr($file, strlen($dir)), 79), 0, 79), "\r"; Chris@0: } Chris@0: Chris@0: try { Chris@0: $startTime = microtime(true); Chris@13: $origStmts = $parser->parse($origCode); Chris@0: $parseTime += microtime(true) - $startTime; Chris@0: Chris@13: $origTokens = $lexer->getTokens(); Chris@13: Chris@0: $startTime = microtime(true); Chris@13: $stmts = $cloningTraverser->traverse($origStmts); Chris@13: $cloneTime += microtime(true) - $startTime; Chris@13: Chris@13: $startTime = microtime(true); Chris@13: $code = $prettyPrinter->printFormatPreserving($stmts, $origStmts, $origTokens); Chris@13: $fpppTime += microtime(true) - $startTime; Chris@13: Chris@13: if ($code !== $origCode) { Chris@13: echo $file, ":\n Result of format-preserving pretty-print differs\n"; Chris@13: if ($verbose) { Chris@13: echo "FPPP output:\n=====\n$code\n=====\n\n"; Chris@13: } Chris@13: Chris@13: ++$fpppFail; Chris@13: } Chris@13: Chris@13: $startTime = microtime(true); Chris@13: $code = "prettyPrint($stmts); Chris@0: $ppTime += microtime(true) - $startTime; Chris@0: Chris@0: try { Chris@0: $startTime = microtime(true); Chris@0: $ppStmts = $parser->parse($code); Chris@0: $reparseTime += microtime(true) - $startTime; Chris@0: Chris@0: $startTime = microtime(true); Chris@0: $same = $nodeDumper->dump($stmts) == $nodeDumper->dump($ppStmts); Chris@0: $compareTime += microtime(true) - $startTime; Chris@0: Chris@0: if (!$same) { Chris@0: echo $file, ":\n Result of initial parse and parse after pretty print differ\n"; Chris@0: if ($verbose) { Chris@0: echo "Pretty printer output:\n=====\n$code\n=====\n\n"; Chris@0: } Chris@0: Chris@0: ++$compareFail; Chris@0: } Chris@0: } catch (PhpParser\Error $e) { Chris@0: echo $file, ":\n Parse of pretty print failed with message: {$e->getMessage()}\n"; Chris@0: if ($verbose) { Chris@0: echo "Pretty printer output:\n=====\n$code\n=====\n\n"; Chris@0: } Chris@0: Chris@0: ++$ppFail; Chris@0: } Chris@0: } catch (PhpParser\Error $e) { Chris@0: echo $file, ":\n Parse failed with message: {$e->getMessage()}\n"; Chris@0: Chris@0: ++$parseFail; Chris@0: } Chris@0: } Chris@0: Chris@0: if (0 === $parseFail && 0 === $ppFail && 0 === $compareFail) { Chris@0: $exit = 0; Chris@0: echo "\n\n", 'All tests passed.', "\n"; Chris@0: } else { Chris@0: $exit = 1; Chris@0: echo "\n\n", '==========', "\n\n", 'There were: ', "\n"; Chris@0: if (0 !== $parseFail) { Chris@0: echo ' ', $parseFail, ' parse failures.', "\n"; Chris@0: } Chris@0: if (0 !== $ppFail) { Chris@0: echo ' ', $ppFail, ' pretty print failures.', "\n"; Chris@0: } Chris@13: if (0 !== $fpppFail) { Chris@13: echo ' ', $fpppFail, ' FPPP failures.', "\n"; Chris@13: } Chris@0: if (0 !== $compareFail) { Chris@0: echo ' ', $compareFail, ' compare failures.', "\n"; Chris@0: } Chris@0: } Chris@0: Chris@0: echo "\n", Chris@0: 'Tested files: ', $count, "\n", Chris@0: "\n", Chris@0: 'Reading files took: ', $readTime, "\n", Chris@0: 'Parsing took: ', $parseTime, "\n", Chris@13: 'Cloning took: ', $cloneTime, "\n", Chris@13: 'FPPP took: ', $fpppTime, "\n", Chris@0: 'Pretty printing took: ', $ppTime, "\n", Chris@0: 'Reparsing took: ', $reparseTime, "\n", Chris@0: 'Comparing took: ', $compareTime, "\n", Chris@0: "\n", Chris@0: 'Total time: ', microtime(true) - $totalStartTime, "\n", Chris@0: 'Maximum memory usage: ', memory_get_peak_usage(true), "\n"; Chris@0: Chris@0: exit($exit);