diff options
-rw-r--r-- | src/HTML5/Parser/DOMTreeBuilder.php | 10 | ||||
-rw-r--r-- | test/HTML5/Parser/DOMTreeBuilderTest.php | 19 |
2 files changed, 28 insertions, 1 deletions
diff --git a/src/HTML5/Parser/DOMTreeBuilder.php b/src/HTML5/Parser/DOMTreeBuilder.php index a5a20ba..5a16f90 100644 --- a/src/HTML5/Parser/DOMTreeBuilder.php +++ b/src/HTML5/Parser/DOMTreeBuilder.php @@ -85,9 +85,17 @@ class DOMTreeBuilder implements EventHandler { * * This returns a DOMNodeList because a fragment may have zero or more * DOMNodes at its root. + * + * @return \DOMNodeList */ public function fragment() { - return $this->doc->documentElement->childNodes; + $append = $this->doc->documentElement->childNodes; + $frag = $this->doc->createDocumentFragment(); + + foreach ($append as $node) { + $frag->appendChild($node); + } + return $frag; } /** diff --git a/test/HTML5/Parser/DOMTreeBuilderTest.php b/test/HTML5/Parser/DOMTreeBuilderTest.php index ed8e70e..6947f8d 100644 --- a/test/HTML5/Parser/DOMTreeBuilderTest.php +++ b/test/HTML5/Parser/DOMTreeBuilderTest.php @@ -27,6 +27,16 @@ class DOMTreeBuilderTest extends \HTML5\Tests\TestCase { return $treeBuilder->document(); } + protected function parseFragment($string) { + $treeBuilder = new DOMTreeBuilder(); + $input = new StringInputStream($string); + $scanner = new Scanner($input); + $parser = new Tokenizer($scanner, $treeBuilder); + + $parser->parse(); + + return $treeBuilder->fragment(); + } public function testDocument() { $html = "<!DOCTYPE html><html></html>"; @@ -36,6 +46,15 @@ class DOMTreeBuilderTest extends \HTML5\Tests\TestCase { $this->assertEquals('html', $doc->documentElement->tagName); } + public function testFragment() { + $html = "<div>test</div>"; + $doc = $this->parseFragment($html); + + $this->assertInstanceOf('\DOMDocumentFragment', $doc); + $this->assertTrue($doc->hasChildNodes()); + $this->assertEquals('div', $doc->childNodes->item(0)->tagName); + } + public function testElements() { $html = "<!DOCTYPE html><html><head><title></title></head><body></body></html>"; $doc = $this->parse($html); |