/**
  * @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);
 }
Exemple #2
0
 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;
 }
Exemple #3
0
 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));
     }
 }
Exemple #4
0
 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;
 }
Exemple #5
0
 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;
 }
Exemple #6
0
 /**
  * @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));
         }
     }
 }
Exemple #8
0
 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));
         }
     }
 }
Exemple #9
0
 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 &amp; demo", TRUE);
     $this->assertInstanceOf('TheSeer\\fDOM\\fDOMElement', $node);
     $this->assertEquals('test &amp; demo', $node->nodeValue);
 }