protected function getGraphsFromFiles(array $files, array $exclude, CFGParser $parser) { $excludeParts = []; foreach ($exclude as $part) { $excludeParts[] = preg_quote($part); } $part = implode('|', $excludeParts); $excludeRegex = "(((\\.({$part})(\$|/))|((^|/)({$part})(\$|/))))"; $graphs = []; foreach ($files as $file) { if (is_file($file)) { $local = [$file]; } elseif (is_dir($file)) { $it = new \CallbackFilterIterator(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($file)), function (\SplFileInfo $file) use($excludeRegex) { if (preg_match($excludeRegex, $file->getPathName())) { return false; } return $file->isFile(); }); $local = []; foreach ($it as $file) { $local[] = $file->getPathName(); // since __toString would be too difficult... } } else { throw new \RuntimeException("Error: {$file} is not a file or directory"); } foreach ($local as $file) { echo "Analyzing {$file}\n"; $graphs[$file] = $parser->parse(file_get_contents($file), $file); } } return $graphs; }
/** @dataProvider provideTestParseAndDump */ public function testParseAndDump($code, $expectedDump) { $astTraverser = new PhpParser\NodeTraverser(); $astTraverser->addVisitor(new PhpParser\NodeVisitor\NameResolver()); $parser = new Parser(new PhpParser\Parser(new PhpParser\Lexer()), $astTraverser); $dumper = new Dumper(); $block = $parser->parse($code, 'foo.php'); $this->assertEquals($this->canonicalize($expectedDump), $this->canonicalize($dumper->dump($block))); }
/** @dataProvider provideTestParseAndDump */ public function testParseAndDump($name, $code, $expectedDump) { $astTraverser = new PhpParser\NodeTraverser(); $astTraverser->addVisitor(new PhpParser\NodeVisitor\NameResolver()); $parser = new Parser((new ParserFactory())->create(ParserFactory::PREFER_PHP7), $astTraverser); $block = $parser->parse($code, 'foo.php'); $traverser = new Traverser(); $traverser->addVisitor(new Visitor\Simplifier()); $traverser->traverse($block); $printer = new Printer\Text(); $this->assertEquals($this->canonicalize($expectedDump), $this->canonicalize($printer->printCfg([$block]))); }
/** @dataProvider provideTestParseAndDump */ public function testParseAndDump($code, $expectedDump) { $astTraverser = new PhpParser\NodeTraverser(); $astTraverser->addVisitor(new PhpParser\NodeVisitor\NameResolver()); $parser = new Parser((new ParserFactory())->create(ParserFactory::PREFER_PHP7), $astTraverser); $traverser = new Traverser(); $traverser->addVisitor(new Visitor\Simplifier()); $printer = new Printer\Text(); try { $script = $parser->parse($code, 'foo.php'); $traverser->traverse($script); $result = $printer->printScript($script); } catch (\RuntimeException $e) { $result = $e->getMessage(); } $this->assertEquals($this->canonicalize($expectedDump), $this->canonicalize($result)); }