' . $html . ''); $options = \HTML5::options(); $ser = new Serializer($dom, $options); $out = $ser->saveHTML(); return $out; } protected function cycleFragment($fragment) { $dom = \HTML5::loadHTMLFragment($fragment); $options = \HTML5::options(); $ser = new Serializer($dom, $options); $out = $ser->saveHTML(); return $out; } public function testSaveHTML() { $html = 'test'; $dom = \HTML5::loadHTML($html); $this->assertTrue($dom instanceof \DOMDocument, "Canary"); $ser = new Serializer($dom, \HTML5::options()); $out = $ser->saveHTML(); $this->assertTrue(count($out) >= count($html), 'Byte counts'); $this->assertRegExp('//', $out, 'Has DOCTYPE.'); $this->assertRegExp('/test<\/body>/', $out, 'Has body text.'); } public function testSave() { $html = 'test'; $dom = \HTML5::loadHTML($html); $this->assertTrue($dom instanceof \DOMDocument, "Canary"); // Test saving to a stream. $ser = new Serializer($dom, \HTML5::options()); $out = fopen("php://temp", "w"); $ser->save($out); rewind($out); $res = stream_get_contents($out); $this->assertTrue(count($res) >= count($html)); // Test saving to a file on the file system. $tmpfname = tempnam(sys_get_temp_dir(), "html5-php"); $ser = new Serializer($dom, \HTML5::options()); $ser->save($tmpfname); $content = file_get_contents($tmpfname); $this->assertRegExp('|test|', $content); unlink($tmpfname); } public function testElements() { // Should have content. $res = $this->cycle('
FOO
'); $this->assertRegExp('|
FOO
|', $res); // Should be empty $res = $this->cycle(''); $this->assertRegExp('||', $res); // Should have content. $res = $this->cycleFragment('
FOO
'); $this->assertRegExp('|
FOO
|', $res); // Should be empty $res = $this->cycleFragment(''); $this->assertRegExp('||', $res); // Should have no closing tag. $res = $this->cycle('
'); $this->assertRegExp('|
|', $res); } public function testAttributes() { $res = $this->cycle('
FOO
'); $this->assertRegExp('|
FOO
|', $res); // XXX: Note that spec does NOT require attrs in the same order. $res = $this->cycle('
FOO
'); $this->assertRegExp('|
FOO
|', $res); $res = $this->cycle('
FOO
'); $this->assertRegExp('|
FOO
|', $res); $res = $this->cycleFragment('
FOO
'); $this->assertRegExp('|
FOO
|', $res); // XXX: Note that spec does NOT require attrs in the same order. $res = $this->cycleFragment('
FOO
'); $this->assertRegExp('|
FOO
|', $res); $res = $this->cycleFragment('
FOO
'); $this->assertRegExp('|
FOO
|', $res); } public function testPCData() { $res = $this->cycle('This is a test.'); $this->assertRegExp('|This is a test.|', $res); $res = $this->cycleFragment('This is a test.'); $this->assertRegExp('|This is a test.|', $res); $res = $this->cycle('This is a test.'); // Check that newlines are there, but don't count spaces. $this->assertRegExp('|This\n\s*is\n\s*a\n\s*test.|', $res); $res = $this->cycleFragment('This is a test.'); // Check that newlines are there, but don't count spaces. $this->assertRegExp('|This\n\s*is\n\s*a\n\s*test.|', $res); $res = $this->cycle('This is a test.'); $this->assertRegExp('|This is a test.|', $res); $res = $this->cycleFragment('This is a test.'); $this->assertRegExp('|This is a test.|', $res); } public function testUnescaped() { $res = $this->cycle(''); $this->assertRegExp('|2 < 1|', $res); $res = $this->cycle(''); $this->assertRegExp('|div>div>div|', $res); $res = $this->cycleFragment(''); $this->assertRegExp('|2 < 1|', $res); $res = $this->cycleFragment(''); $this->assertRegExp('|div>div>div|', $res); } public function testEntities() { $res = $this->cycle('Apples & bananas.'); $this->assertRegExp('|Apples & bananas.|', $res); $res = $this->cycleFragment('Apples & bananas.'); $this->assertRegExp('|Apples & bananas.|', $res); } public function testComment() { $res = $this->cycle('ab'); $this->assertRegExp('||', $res); $res = $this->cycleFragment('ab'); $this->assertRegExp('||', $res); } public function testCDATA() { $res = $this->cycle('a a test. ]]>b'); $this->assertRegExp('| a test\. \]\]>|', $res); $res = $this->cycleFragment('a a test. ]]>b'); $this->assertRegExp('| a test\. \]\]>|', $res); } }