Chris@14: Chris@14: * Chris@14: * For the full copyright and license information, please view the LICENSE Chris@14: * file that was distributed with this source code. Chris@14: */ Chris@14: Chris@14: namespace SebastianBergmann\CodeCoverage\Report\Xml; Chris@14: Chris@14: use SebastianBergmann\CodeCoverage\RuntimeException; Chris@14: Chris@14: class Coverage Chris@14: { Chris@14: /** Chris@14: * @var \XMLWriter Chris@14: */ Chris@14: private $writer; Chris@14: Chris@14: /** Chris@14: * @var \DOMElement Chris@14: */ Chris@14: private $contextNode; Chris@14: Chris@14: /** Chris@14: * @var bool Chris@14: */ Chris@14: private $finalized = false; Chris@14: Chris@14: public function __construct(\DOMElement $context, $line) Chris@14: { Chris@14: $this->contextNode = $context; Chris@14: Chris@14: $this->writer = new \XMLWriter(); Chris@14: $this->writer->openMemory(); Chris@14: $this->writer->startElementNs(null, $context->nodeName, 'http://schema.phpunit.de/coverage/1.0'); Chris@14: $this->writer->writeAttribute('nr', $line); Chris@14: } Chris@14: Chris@14: public function addTest($test) Chris@14: { Chris@14: if ($this->finalized) { Chris@14: throw new RuntimeException('Coverage Report already finalized'); Chris@14: } Chris@14: Chris@14: $this->writer->startElement('covered'); Chris@14: $this->writer->writeAttribute('by', $test); Chris@14: $this->writer->endElement(); Chris@14: } Chris@14: Chris@14: public function finalize() Chris@14: { Chris@14: $this->writer->endElement(); Chris@14: Chris@14: $fragment = $this->contextNode->ownerDocument->createDocumentFragment(); Chris@14: $fragment->appendXML($this->writer->outputMemory()); Chris@14: Chris@14: $this->contextNode->parentNode->replaceChild( Chris@14: $fragment, Chris@14: $this->contextNode Chris@14: ); Chris@14: Chris@14: $this->finalized = true; Chris@14: } Chris@14: }