/** * @param CodeCoverage $coverage * * @return Directory */ public function build(CodeCoverage $coverage) { $files = $coverage->getData(); $commonPath = $this->reducePaths($files); $root = new Directory($commonPath, null); $this->addItems($root, $this->buildDirectoryStructure($files), $coverage->getTests(), $coverage->getCacheTokens()); return $root; }
/** * @param CodeCoverage $coverage * @param string $target * * @throws RuntimeException */ public function process(CodeCoverage $coverage, $target) { if (substr($target, -1, 1) != DIRECTORY_SEPARATOR) { $target .= DIRECTORY_SEPARATOR; } $this->target = $target; $this->initTargetDirectory($target); $report = $coverage->getReport(); $this->project = new Project($coverage->getReport()->getName()); $this->processTests($coverage->getTests()); $this->processDirectory($report, $this->project); $index = $this->project->asDom(); $index->formatOutput = true; $index->preserveWhiteSpace = false; $index->save($target . '/index.xml'); }
/** * @param CodeCoverage $coverage * @param string $target * * @return string */ public function process(CodeCoverage $coverage, $target = null) { $filter = $coverage->filter(); $output = sprintf('<?php $coverage = new SebastianBergmann\\CodeCoverage\\CodeCoverage; $coverage->setData(%s); $coverage->setTests(%s); $filter = $coverage->filter(); $filter->setWhitelistedFiles(%s); return $coverage;', var_export($coverage->getData(true), 1), var_export($coverage->getTests(), 1), var_export($filter->getWhitelistedFiles(), 1)); if ($target !== null) { return file_put_contents($target, $output); } else { return $output; } }
/** * @param CodeCoverage $coverage * @param CodeCoverage $that */ private function mergeCoverage(CodeCoverage $coverage, CodeCoverage $that) { $filter = $coverage->filter(); $filter->setWhitelistedFiles(array_merge($filter->getWhitelistedFiles(), $that->filter()->getWhitelistedFiles())); $thisData = $coverage->getData(true); $thatData = $that->getData(true); foreach ($thatData as $file => $lines) { if (!$this->hasCoverage($thatData, $file)) { continue; } if (!$this->hasCoverage($thisData, $file)) { if (!$filter->isFiltered($file)) { $thisData[$file] = $lines; } continue; } foreach ($lines as $line => $data) { if ($data !== null) { if (!isset($thisData[$file][$line])) { $thisData[$file][$line] = $data; } else { $thisData[$file][$line] = array_unique(array_merge($thisData[$file][$line], $data)); } } } } $coverage->setData($thisData); $coverage->setTests(array_merge($coverage->getTests(), $that->getTests())); }
/** * Merges the data from another instance. * * @param CodeCoverage $that */ public function merge(CodeCoverage $that) { $this->filter->setWhitelistedFiles(array_merge($this->filter->getWhitelistedFiles(), $that->filter()->getWhitelistedFiles())); foreach ($that->data as $file => $lines) { if (!isset($this->data[$file])) { if (!$this->filter->isFiltered($file)) { $this->data[$file] = $lines; } continue; } foreach ($lines as $line => $data) { if ($data !== null) { if (!isset($this->data[$file][$line])) { $this->data[$file][$line] = $data; } else { $this->data[$file][$line] = array_unique(array_merge($this->data[$file][$line], $data)); } } } } $this->tests = array_merge($this->tests, $that->getTests()); }