Hal\MutaTesting\Runner\Adapter\PHPUnitAdapter::parseTestedFiles PHP Method

parseTestedFiles() public method

Parse tested files of the unit test and injects them in Unit::setTestedFiles()
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;
    }

Usage Example

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