Browse Source

100% coverage

master
Dustin Wilson 2 years ago
parent
commit
474ea22e13
  1. 2
      lib/Inner/Document.php
  2. 128
      tests/cases/TestSerializer.php
  3. 42
      tests/cases/TestText.php
  4. 32
      tests/cases/TestXMLDocument.php
  5. 2
      tests/phpunit.dist.xml

2
lib/Inner/Document.php

@ -85,7 +85,7 @@ class Document extends \DOMDocument {
$className = 'DocumentType';
} elseif ($node instanceof \DOMElement) {
$namespace = $node->namespaceURI;
if ($namespace === null) {
if ($namespace === null && !$this->wrapperNode instanceof WrapperXMLDocument) {
# The element interface for an element with name name in the HTML namespace is
# determined as follows:

128
tests/cases/TestSerializer.php

@ -18,6 +18,46 @@ use MensBeam\HTML\DOM\{
/** @covers \MensBeam\HTML\DOM\Serializer */
class TestSerializer extends \PHPUnit\Framework\TestCase {
/**
* @covers \MensBeam\HTML\DOM\Serializer::isPreformattedContent
*
* @covers \MensBeam\HTML\DOM\Document::__construct
* @covers \MensBeam\HTML\DOM\Document::createDocumentFragment
* @covers \MensBeam\HTML\DOM\Document::createElement
* @covers \MensBeam\HTML\DOM\Document::createTextNode
* @covers \MensBeam\HTML\DOM\Document::load
* @covers \MensBeam\HTML\DOM\Document::serialize
* @covers \MensBeam\HTML\DOM\DocumentFragment::__construct
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
* @covers \MensBeam\HTML\DOM\Element::__construct
* @covers \MensBeam\HTML\DOM\HTMLTemplateElement::__construct
* @covers \MensBeam\HTML\DOM\HTMLTemplateElement::__get_content
* @covers \MensBeam\HTML\DOM\Node::__construct
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
* @covers \MensBeam\HTML\DOM\Node::appendChild
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
* @covers \MensBeam\HTML\DOM\Node::getInnerNode
* @covers \MensBeam\HTML\DOM\Node::getRootNode
* @covers \MensBeam\HTML\DOM\Node::hasChildNodes
* @covers \MensBeam\HTML\DOM\Node::postInsertionBugFixes
* @covers \MensBeam\HTML\DOM\Node::postParsingTemplatesFix
* @covers \MensBeam\HTML\DOM\Node::preInsertionBugFixes
* @covers \MensBeam\HTML\DOM\Node::preInsertionValidity
* @covers \MensBeam\HTML\DOM\Serializer::getTemplateContent
* @covers \MensBeam\HTML\DOM\Text::__construct
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_xpath
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
* @covers \MensBeam\HTML\DOM\Inner\Reflection::setProtectedProperties
*/
public function testMethod_isPreformattedContent(): void {
$d = new Document('<pre><code></code></pre>');
$this->assertSame(<<<HTML
@ -45,6 +85,45 @@ class TestSerializer extends \PHPUnit\Framework\TestCase {
}
/**
* @covers \MensBeam\HTML\DOM\Serializer::treatAsBlockWithTemplates
*
* @covers \MensBeam\HTML\DOM\Document::__construct
* @covers \MensBeam\HTML\DOM\Document::__get_body
* @covers \MensBeam\HTML\DOM\Document::createDocumentFragment
* @covers \MensBeam\HTML\DOM\Document::load
* @covers \MensBeam\HTML\DOM\Document::serialize
* @covers \MensBeam\HTML\DOM\DocumentFragment::__construct
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
* @covers \MensBeam\HTML\DOM\Element::__construct
* @covers \MensBeam\HTML\DOM\HTMLTemplateElement::__construct
* @covers \MensBeam\HTML\DOM\HTMLTemplateElement::__get_content
* @covers \MensBeam\HTML\DOM\Node::__construct
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
* @covers \MensBeam\HTML\DOM\Node::appendChildInner
* @covers \MensBeam\HTML\DOM\Node::cloneInnerNode
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
* @covers \MensBeam\HTML\DOM\Node::getInnerNode
* @covers \MensBeam\HTML\DOM\Node::getRootNode
* @covers \MensBeam\HTML\DOM\Node::hasChildNodes
* @covers \MensBeam\HTML\DOM\Node::postInsertionBugFixes
* @covers \MensBeam\HTML\DOM\Node::postParsingTemplatesFix
* @covers \MensBeam\HTML\DOM\Node::preInsertionBugFixes
* @covers \MensBeam\HTML\DOM\Serializer::fragmentHasHost
* @covers \MensBeam\HTML\DOM\Serializer::getTemplateContent
* @covers \MensBeam\HTML\DOM\Serializer::isPreformattedContent
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_xpath
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
* @covers \MensBeam\HTML\DOM\Inner\Reflection::setProtectedProperties
*/
public function testMethod_treatAsBlockWithTemplates(): void {
$d = new Document('<span>ook</span><template><div>ook</div></template>');
@ -130,7 +209,54 @@ class TestSerializer extends \PHPUnit\Framework\TestCase {
];
}
/** @dataProvider provideMethod_treatForeignRootAsBlock */
/**
* @dataProvider provideMethod_treatForeignRootAsBlock
* @covers \MensBeam\HTML\DOM\Serializer::treatForeignRootAsBlock
*
* @covers \MensBeam\HTML\DOM\Collection::__construct
* @covers \MensBeam\HTML\DOM\Collection::item
* @covers \MensBeam\HTML\DOM\Document::__construct
* @covers \MensBeam\HTML\DOM\Document::__get_body
* @covers \MensBeam\HTML\DOM\Document::createDocumentFragment
* @covers \MensBeam\HTML\DOM\Document::load
* @covers \MensBeam\HTML\DOM\Document::serialize
* @covers \MensBeam\HTML\DOM\DocumentFragment::__construct
* @covers \MensBeam\HTML\DOM\DocumentOrElement::getElementsByTagName
* @covers \MensBeam\HTML\DOM\DocumentOrElement::getElementsByTagNameNS
* @covers \MensBeam\HTML\DOM\DOMImplementation::__construct
* @covers \MensBeam\HTML\DOM\Element::__construct
* @covers \MensBeam\HTML\DOM\HTMLCollection::item
* @covers \MensBeam\HTML\DOM\HTMLCollection::offsetGet
* @covers \MensBeam\HTML\DOM\HTMLTemplateElement::__construct
* @covers \MensBeam\HTML\DOM\HTMLTemplateElement::__get_content
* @covers \MensBeam\HTML\DOM\Node::__construct
* @covers \MensBeam\HTML\DOM\Node::__get_firstChild
* @covers \MensBeam\HTML\DOM\Node::__get_ownerDocument
* @covers \MensBeam\HTML\DOM\Node::appendChildInner
* @covers \MensBeam\HTML\DOM\Node::cloneInnerNode
* @covers \MensBeam\HTML\DOM\Node::getInnerDocument
* @covers \MensBeam\HTML\DOM\Node::getInnerNode
* @covers \MensBeam\HTML\DOM\Node::getRootNode
* @covers \MensBeam\HTML\DOM\Node::hasChildNodes
* @covers \MensBeam\HTML\DOM\Node::postInsertionBugFixes
* @covers \MensBeam\HTML\DOM\Node::postParsingTemplatesFix
* @covers \MensBeam\HTML\DOM\Node::preInsertionBugFixes
* @covers \MensBeam\HTML\DOM\Serializer::fragmentHasHost
* @covers \MensBeam\HTML\DOM\Serializer::isPreformattedContent
* @covers \MensBeam\HTML\DOM\Serializer::treatAsBlockWithTemplates
* @covers \MensBeam\HTML\DOM\Inner\Document::__construct
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_wrapperNode
* @covers \MensBeam\HTML\DOM\Inner\Document::__get_xpath
* @covers \MensBeam\HTML\DOM\Inner\Document::getWrapperNode
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::get
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::has
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::key
* @covers \MensBeam\HTML\DOM\Inner\NodeCache::set
* @covers \MensBeam\HTML\DOM\Inner\Reflection::createFromProtectedConstructor
* @covers \MensBeam\HTML\DOM\Inner\Reflection::getProtectedProperty
* @covers \MensBeam\HTML\DOM\Inner\Reflection::setProtectedProperties
*/
public function testMethod_treatForeignRootAsBlock(\Closure $closure, string $expected): void {
$this->assertSame($expected, $closure());
}

42
tests/cases/TestText.php

@ -0,0 +1,42 @@
<?php
/**
* @license MIT
* Copyright 2017 Dustin Wilson, J. King, et al.
* See LICENSE and AUTHORS files for details
*/
declare(strict_types=1);
namespace MensBeam\HTML\DOM\TestCase;
use MensBeam\HTML\DOM\{
Document,
DOMException
};
/** @covers \MensBeam\HTML\DOM\Text */
class TestText extends \PHPUnit\Framework\TestCase {
public function testMethod_splitText(): void {
$d = new Document('<!DOCTYPE html><html><body>poop💩 ook eek</html>', 'UTF-8');
$body = $d->body;
$body->firstChild->splitText(5);
$this->assertSame('poop💩', $body->firstChild->data);
}
public function testMethod_splitText__errors(): void {
$this->expectException(DOMException::class);
$this->expectExceptionCode(DOMException::INDEX_SIZE_ERROR);
$d = new Document('<!DOCTYPE html><html><body>poop💩 ook eek</html>', 'UTF-8');
$body = $d->body;
$body->firstChild->splitText(2112);
}
public function testProperty_wholeText(): void {
$d = new Document('<!DOCTYPE html><html><body>ook <strong>ack</strong> eek</body></html>');
$body = $d->body;
$body->removeChild($body->getElementsByTagName('strong')[0]);
$this->assertSame('ook eek', $body->firstChild->wholeText);
}
}

32
tests/cases/TestXMLDocument.php

@ -0,0 +1,32 @@
<?php
/**
* @license MIT
* Copyright 2017 Dustin Wilson, J. King, et al.
* See LICENSE and AUTHORS files for details
*/
declare(strict_types=1);
namespace MensBeam\HTML\DOM\TestCase;
use MensBeam\HTML\DOM\{
DOMException,
Element,
XMLDocument
};
/** @covers \MensBeam\HTML\DOM\XMLDocument */
class TestXMLDocument extends \PHPUnit\Framework\TestCase {
public function testMethod_load(): void {
$d = new XMLDocument('<ook><eek>Ook</eek></ook>');
$this->assertSame(Element::class, $d->firstChild::class);
}
public function testMethod_load__errors(): void {
$this->expectException(DOMException::class);
$this->expectExceptionCode(DOMException::NO_MODIFICATION_ALLOWED);
$d = new XMLDocument('<ook><eek>Ook</eek></ook>');
$d->load('fail');
}
}

2
tests/phpunit.dist.xml

@ -32,6 +32,8 @@
<file>cases/TestNonDocumentTypeChildNode.php</file>
<file>cases/TestParentNode.php</file>
<file>cases/TestProcessingInstruction.php</file>
<file>cases/TestText.php</file>
<file>cases/TestXMLDocument.php</file>
</testsuite>
<testsuite name="Serializer">
<file>cases/TestSerializer.php</file>

Loading…
Cancel
Save