diff options
author | Matt Butcher <[email protected]> | 2013-05-01 14:55:36 -0500 |
---|---|---|
committer | Matt Butcher <[email protected]> | 2013-05-01 14:55:36 -0500 |
commit | c5099f50fd68f26741d061cff5a3ccd086e00cfe (patch) | |
tree | 54b5163ef9579f7eca00ea431a12d58d92c6f807 | |
parent | bae705bdea510398f654ffbfc25454b75c6e8a65 (diff) |
Fixes for PI tests.
-rw-r--r-- | src/HTML5/Parser/DOMTreeBuilder.php | 11 | ||||
-rw-r--r-- | test/HTML5/Parser/DOMTreeBuilderTest.php | 15 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/HTML5/Parser/DOMTreeBuilder.php b/src/HTML5/Parser/DOMTreeBuilder.php index 4e2669c..686effc 100644 --- a/src/HTML5/Parser/DOMTreeBuilder.php +++ b/src/HTML5/Parser/DOMTreeBuilder.php @@ -266,6 +266,11 @@ class DOMTreeBuilder implements EventHandler { } public function processingInstruction($name, $data = NULL) { + // XXX: Ignore initial XML declaration, per the spec. + if ($this->insertMode == self::IM_INITIAL && 'xml' == strtolower($name)) { + return; + } + // Important: The processor may modify the current DOM tree however // it sees fit. if (isset($this->processor)) { @@ -273,7 +278,13 @@ class DOMTreeBuilder implements EventHandler { if (!empty($res)) { $this->current = $res; } + return; } + + // Otherwise, this is just a dumb PI element. + $node = $this->doc->createProcessingInstruction($name, $data); + + $this->current->appendChild($node); } // ========================================================================== diff --git a/test/HTML5/Parser/DOMTreeBuilderTest.php b/test/HTML5/Parser/DOMTreeBuilderTest.php index 677bac6..53d1480 100644 --- a/test/HTML5/Parser/DOMTreeBuilderTest.php +++ b/test/HTML5/Parser/DOMTreeBuilderTest.php @@ -139,7 +139,20 @@ class DOMTreeBuilderTest extends \HTML5\Tests\TestCase { } public function testProcessingInstruction() { - $this->markTestIncomplete("Incomplete."); + // Test the simple case, which is where PIs are inserted into the DOM. + $doc = $this->parse('<!DOCTYPE html><html><?foo bar?>'); + $this->assertEquals(1, $doc->documentElement->childNodes->length); + $pi = $doc->documentElement->firstChild; + $this->assertInstanceOf('\DOMProcessingInstruction', $pi); + $this->assertEquals('foo', $pi->nodeName); + $this->assertEquals('bar', $pi->data); + + // Leading xml PIs should be ignored. + $doc = $this->parse('<?xml version="1.0"?><!DOCTYPE html><html><head></head></html>'); + + $this->assertEquals(2, $doc->childNodes->length); + $this->assertInstanceOf('\DOMDocumentType', $doc->childNodes->item(0)); + $this->assertInstanceOf('\DOMElement', $doc->childNodes->item(1)); } public function testAutocloseP() { |