From 474ea22e13b18640bd5761a2e8d4f111569be400 Mon Sep 17 00:00:00 2001 From: Dustin Wilson Date: Thu, 16 Dec 2021 15:54:25 -0600 Subject: [PATCH] 100% coverage --- lib/Inner/Document.php | 2 +- tests/cases/TestSerializer.php | 128 +++++++++++++++++++++++++++++++- tests/cases/TestText.php | 42 +++++++++++ tests/cases/TestXMLDocument.php | 32 ++++++++ tests/phpunit.dist.xml | 2 + 5 files changed, 204 insertions(+), 2 deletions(-) create mode 100644 tests/cases/TestText.php create mode 100644 tests/cases/TestXMLDocument.php diff --git a/lib/Inner/Document.php b/lib/Inner/Document.php index 26e55eb..cbc9acd 100644 --- a/lib/Inner/Document.php +++ b/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: diff --git a/tests/cases/TestSerializer.php b/tests/cases/TestSerializer.php index 3ef5c85..dcbc2ff 100644 --- a/tests/cases/TestSerializer.php +++ b/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('
'); $this->assertSame(<<ook'); @@ -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()); } diff --git a/tests/cases/TestText.php b/tests/cases/TestText.php new file mode 100644 index 0000000..6e1fa7b --- /dev/null +++ b/tests/cases/TestText.php @@ -0,0 +1,42 @@ +poop💩 ook eek', '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('poop💩 ook eek', 'UTF-8'); + $body = $d->body; + $body->firstChild->splitText(2112); + } + + + public function testProperty_wholeText(): void { + $d = new Document('ook ack eek'); + $body = $d->body; + $body->removeChild($body->getElementsByTagName('strong')[0]); + $this->assertSame('ook eek', $body->firstChild->wholeText); + } +} \ No newline at end of file diff --git a/tests/cases/TestXMLDocument.php b/tests/cases/TestXMLDocument.php new file mode 100644 index 0000000..77e282a --- /dev/null +++ b/tests/cases/TestXMLDocument.php @@ -0,0 +1,32 @@ +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'); + $d->load('fail'); + } +} \ No newline at end of file diff --git a/tests/phpunit.dist.xml b/tests/phpunit.dist.xml index 1d5d214..3782920 100644 --- a/tests/phpunit.dist.xml +++ b/tests/phpunit.dist.xml @@ -32,6 +32,8 @@ cases/TestNonDocumentTypeChildNode.php cases/TestParentNode.php cases/TestProcessingInstruction.php + cases/TestText.php + cases/TestXMLDocument.php cases/TestSerializer.php