public parseTestedFiles ( Hal\MutaTesting\Test\UnitInterface &$unit ) : Hal\MutaTesting\Test\UnitInterface | ||
$unit | Hal\MutaTesting\Test\UnitInterface | |
return | Hal\MutaTesting\Test\UnitInterface |
public function parseTestedFiles(UnitInterface &$unit)
{
$factory = new MutationFactory();
$mutation = $factory->factoryFromUnit($unit);
$prependFile = $this->createFileSystemMock($mutation);
// add logger
$filename = tempnam(sys_get_temp_dir(), 'tested-files');
$content = '<?php
register_shutdown_function(function() {
file_put_contents(\'' . $filename . '\', serialize( get_included_files() ));
});?>';
file_put_contents($prependFile, $content);
// run mutation
$this->runMutation($mutation, array(), null, $prependFile);
// get files
$includedExport = unserialize(file_get_contents($filename));
$includedFiles = array_filter($includedExport, function ($file) use($prependFile, $filename) {
return !preg_match('!(PHPUnit\\\\)|(Test.php)|(phpunit.phar)|(vendor)|(Interface.php)!', $file) && !in_array($file, array($prependFile, $filename));
});
$unit->setTestedFiles(array_values($includedFiles));
return $unit;
}
public function testICanGetTestedFilesFromUnitTest() { $filename = $this->directory . 'ExampleTest.php'; $testContent = '<?php require_once "src.php"; class ExampleTest extends PHPUnit_Framework_TestCase { public function testEx1() { $a = new A; $this->assertEquals(true, $a->foo() ); } } '; $srcContent = '<?php class A { public function foo() { return true; } } '; file_put_contents($filename, $testContent); file_put_contents($this->directory . 'src.php', $srcContent); $runner = new PHPUnitAdapter($this->binary, $this->directory); // @todo mock $unit = new \Hal\MutaTesting\Test\Unit(); $unit->setFile($filename); $runner->parseTestedFiles($unit); $testedFiles = $unit->getTestedFiles(); $expected = array($this->directory . 'src.php'); $this->assertEquals($expected, $testedFiles); }