summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/HTML5/Parser/DOMTreeBuilder.php10
-rw-r--r--test/HTML5/Parser/DOMTreeBuilderTest.php19
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);