/** * @param string $name * @param \SplFileInfo $file */ public function __construct($name = NULL, \SplFileInfo $file = NULL) { if ($this->rootName === NULL) { throw new UnitObjectException('No or invalid rootname set', UnitObjectException::InvalidRootname); } $this->dom = new fDOMDocument('1.0', 'UTF-8'); $this->dom->registerNamespace('phpdox', self::XMLNS); $this->rootNode = $this->dom->createElementNS(self::XMLNS, $this->rootName); $this->dom->appendChild($this->rootNode); if ($name !== NULL) { $this->setName($name, $this->rootNode); } if ($file !== NULL) { $this->setFileHeader($file); } $this->setAbstract(FALSE); $this->setFinal(FALSE); }
private function getGeneralBuildInfo() { if ($this->buildInfo != NULL) { return $this->buildInfo; } $dom = new fDOMDocument(); $this->buildInfo = $dom->createDocumentFragment(); $dateNode = $dom->createElementNS(self::XMLNS, 'date'); $this->buildInfo->appendChild($dateNode); $date = new \DateTime('now'); $dateNode->setAttribute('unix', $date->getTimestamp()); $dateNode->setAttribute('date', $date->format('d-m-Y')); $dateNode->setAttribute('time', $date->format('H:i:s')); $dateNode->setAttribute('iso', $date->format('c')); $dateNode->setAttribute('rfc', $date->format('r')); $phpdoxNode = $dom->createElementNS(self::XMLNS, 'phpdox'); $this->buildInfo->appendChild($phpdoxNode); $phpdoxNode->setAttribute('version', $this->version->getVersion()); $phpdoxNode->setAttribute('info', $this->version->getInfoString()); $phpdoxNode->setAttribute('generated', $this->version->getGeneratedByString()); $phpdoxNode->setAttribute('phar', defined('PHPDOX_PHAR') ? 'yes' : 'no'); foreach ($this->enrichers as $enricher) { $enricherNode = $phpdoxNode->appendElementNS(self::XMLNS, 'enricher'); $enricherNode->setAttribute('type', $enricher); } $phpNode = $dom->createElementNS(self::XMLNS, 'php'); $this->buildInfo->appendChild($phpNode); $phpNode->setAttribute('version', PHP_VERSION); $phpNode->setAttribute('os', PHP_OS); foreach (get_loaded_extensions(true) as $extension) { $extNode = $dom->createElementNS(self::XMLNS, 'zendextension'); $extNode->setAttribute('name', $extension); $phpNode->appendChild($extNode); } foreach (get_loaded_extensions(false) as $extension) { $extNode = $dom->createElementNS(self::XMLNS, 'extension'); $extNode->setAttribute('name', $extension); $phpNode->appendChild($extNode); } return $this->buildInfo; }
protected function processFinding(fDOMDocument $dom, $ref, \DOMElement $finding) { $enrichment = $this->getEnrichtmentContainer($ref, 'checkstyle'); $enrichFinding = $dom->createElementNS(self::XMLNS, $finding->getAttribute('severity', 'error')); $enrichment->appendChild($enrichFinding); foreach ($finding->attributes as $attr) { if ($attr->localName == 'severity') { continue; } $enrichFinding->setAttributeNode($dom->importNode($attr, true)); } }
public function asDom(\TheSeer\fDOM\fDOMDocument $ctx) { $node = $ctx->createElementNS('http://xml.phpdox.net/src#', strtolower($this->name)); foreach ($this->attributes as $attribute => $value) { $node->setAttribute($attribute, $value); } if ($this->body !== null && $this->body !== '') { $parser = $this->factory->getInstanceFor('InlineProcessor', $ctx); $node->appendChild($parser->transformToDom($this->body)); } return $node; }
public function asDom(\TheSeer\fDOM\fDOMDocument $ctx) { $node = $ctx->createElementNS('http://xml.phpdox.net/src', 'invalid'); $node->setAttribute('annotation', $this->name); foreach ($this->attributes as $attribute => $value) { $node->setAttribute($attribute, $value); } if ($this->body !== null && $this->body !== '') { $node->appendChild($ctx->createTextnode($this->body)); } return $node; }
/** * @param \TheSeer\fDOM\fDOMDocument $doc * @return \TheSeer\fDOM\fDOMElement */ public function asDom(\TheSeer\fDOM\fDOMDocument $doc) { $node = $doc->createElementNS('http://xml.phpdox.net/src#', 'docblock'); // add lines and such? foreach ($this->elements as $element) { if (is_array($element)) { foreach ($element as $el) { $node->appendChild($el->asDom($doc)); } continue; } $node->appendChild($element->asDom($doc)); } return $node; }
private function processViolations(fDOMDocument $dom, \DOMNodeList $violations) { foreach ($violations as $violation) { /** @var fDOMElement $violation */ $line = $violation->getAttribute('beginline'); $ref = $dom->queryOne(sprintf('//phpdox:*/*[@line = %d or (@start <= %d and @end >= %d)]', $line, $line, $line)); if (!$ref) { // One src file may contain multiple classes/traits/interfaces, so the // finding might not apply to the current object since violations are based on filenames // but we have individual objects - so we just ignore the finding for this context continue; } $enrichment = $this->getEnrichtmentContainer($ref, 'pmd'); $enrichViolation = $dom->createElementNS(self::XMLNS, 'violation'); $enrichment->appendChild($enrichViolation); $enrichViolation->setAttribute('message', trim($violation->nodeValue)); foreach ($violation->attributes as $attr) { $enrichViolation->setAttributeNode($dom->importNode($attr, true)); } } }
private function processFindings(fDOMDocument $dom, \DOMNodeList $findings) { foreach ($findings as $finding) { /** @var fDOMElement $finding */ $line = $finding->getAttribute('line'); $ref = $dom->queryOne(sprintf('//phpdox:*/*[@line = %d or (@start <= %d and @end >= %d)]', $line, $line, $line)); if (!$ref) { // One src file may contain multiple classes/traits/interfaces, so the // finding might not apply to the current object since findings are based on filenames // but we have individual objects - so we just ignore the finding for this context continue; } $enrichment = $this->getEnrichtmentContainer($ref, 'checkstyle'); $enrichFinding = $dom->createElementNS(self::XMLNS, $finding->getAttribute('severity', 'error')); $enrichment->appendChild($enrichFinding); foreach ($finding->attributes as $attr) { if ($attr->localName == 'severity') { continue; } $enrichFinding->setAttributeNode($dom->importNode($attr, true)); } } }
public function testDocBlockWithMultipleOccurencesOfAnnotationCanBeSerializedToDom() { $dom = new fDOMDocument(); $dom->registerNamespace('test', 'http://xml.phpdox.net/src'); $element2 = clone $this->element; $this->element->expects($this->once())->method('asDom')->will($this->returnValue($dom->createElementNS('http://xml.phpdox.net/src', 'stub'))); $element2->expects($this->once())->method('asDom')->will($this->returnValue($dom->createElementNS('http://xml.phpdox.net/src', 'stub'))); $this->docBlock->appendElement($this->element); $this->docBlock->appendElement($element2); $node = $this->docBlock->asDom($dom); $this->assertEquals('<docblock xmlns="http://xml.phpdox.net/src"><stub/><stub/></docblock>', $dom->saveXML($node)); }
public function testSettingContentAsTextNodeForNewElementWithNamespaceEncodesEntities() { $node = $this->dom->createElementNS('test:uri', 'test', "test & demo", TRUE); $this->assertInstanceOf('TheSeer\\fDOM\\fDOMElement', $node); $this->assertEquals('test & demo', $node->nodeValue); }