summaryrefslogtreecommitdiff
path: root/test/HTML5/Serializer
diff options
context:
space:
mode:
authorMatt Farina <[email protected]>2013-04-16 21:40:35 -0400
committerMatt Farina <[email protected]>2013-04-16 21:40:35 -0400
commitd1ea5d11c015bbad698af0dd300eb658fa532c5e (patch)
tree8b396d3daafbf052bde8277539982e33c8c93933 /test/HTML5/Serializer
parentcae0a06475803bb682b0edfba4d45d3d104ac3e7 (diff)
Stubbed out the TraverserTest and moved the SerielizerTest to the Serielizer subdirectory.
Diffstat (limited to 'test/HTML5/Serializer')
-rw-r--r--test/HTML5/Serializer/SerializerTest.php125
-rw-r--r--test/HTML5/Serializer/TraverserTest.php10
2 files changed, 135 insertions, 0 deletions
diff --git a/test/HTML5/Serializer/SerializerTest.php b/test/HTML5/Serializer/SerializerTest.php
new file mode 100644
index 0000000..a06fd50
--- /dev/null
+++ b/test/HTML5/Serializer/SerializerTest.php
@@ -0,0 +1,125 @@
+<?php
+// TODO: Add XML namespace examples.
+
+namespace HTML5\Tests;
+
+use \HTML5\Serializer\Serializer;
+
+require_once __DIR__ . '/../TestCase.php';
+
+/**
+ * Test the Serializer.
+ *
+ * These tests are all dependent upon the parser. So if the parser
+ * fails, the results of the serializer tests may not be conclusive.
+ */
+class SerializerTest extends \HTML5\Tests\TestCase {
+
+ /**
+ * Parse and serialize a string.
+ */
+ protected function cycle($html) {
+ $dom = \HTML5::parse($html);
+ $ser = new Serializer($dom, FALSE);
+ $out = $ser->saveHTML();
+
+ return $out;
+ }
+
+ public function testSaveHTML() {
+ $html = '<!DOCTYPE html><html><body>test</body></html>';
+
+ $dom = \HTML5::parse($html);
+ $this->assertTrue($dom instanceof \DOMDocument, "Canary");
+
+ $ser = new Serializer($dom, FALSE);
+ $out = $ser->saveHTML();
+
+ $this->assertTrue(count($out) >= count($html), 'Byte counts');
+ $this->assertRegExp('/<!DOCTYPE html>/', $out, 'Has DOCTYPE.');
+ $this->assertRegExp('/<body>test<\/body>/', $out, 'Has body text.');
+
+ }
+
+ public function testSave() {
+ $html = '<!DOCTYPE html><html><body>test</body></html>';
+
+ $dom = \HTML5::parse($html);
+ $this->assertTrue($dom instanceof \DOMDocument, "Canary");
+
+ $ser = new Serializer($dom, FALSE);
+ $out = fopen("php://temp", "w");
+ $ser->save($out);
+
+ rewind($out);
+ $res = stream_get_contents($out);
+ $this->assertTrue(count($res) >= count($html));
+ }
+
+ public function testElements() {
+ // Should have content.
+ $res = $this->cycle('<div>FOO</div>');
+ $this->assertRegExp('|<div>FOO</div>|', $res);
+
+ // Should be empty
+ $res = $this->cycle('<span></span>');
+ $this->assertRegExp('|<span></span>|', $res);
+
+ // Should have no closing tag.
+ $res = $this->cycle('<hr>');
+ $this->assertRegExp('|<hr></body>|', $res);
+
+ }
+
+ public function testAttributes() {
+ $res = $this->cycle('<div attr="val">FOO</div>');
+ $this->assertRegExp('|<div attr="val">FOO</div>|', $res);
+
+ // XXX: Note that spec does NOT require attrs in the same order.
+ $res = $this->cycle('<div attr="val" class="even">FOO</div>');
+ $this->assertRegExp('|<div attr="val" class="even">FOO</div>|', $res);
+
+ $res = $this->cycle('<div xmlns:foo="http://example.com">FOO</div>');
+ $this->assertRegExp('|<div xmlns:foo="http://example.com">FOO</div>|', $res);
+ }
+
+ public function testPCData() {
+ $res = $this->cycle('<a>This is a test.</a>');
+ $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->cycle('<a>This <em>is</em> a test.</a>');
+ $this->assertRegExp('|This <em>is</em> a test.|', $res);
+ }
+
+ public function testUnescaped() {
+ $res = $this->cycle('<script>2 < 1</script>');
+ $this->assertRegExp('|2 < 1|', $res);
+
+ $res = $this->cycle('<style>div>div>div</style>');
+ $this->assertRegExp('|div>div>div|', $res);
+ }
+
+ public function testEntities() {
+ $res = $this->cycle('<a>Apples &amp; bananas.</a>');
+ $this->assertRegExp('|Apples &amp; bananas.|', $res);
+ }
+
+ public function testComment() {
+ $res = $this->cycle('a<!-- This is a test. -->b');
+ $this->assertRegExp('|<!-- This is a test. -->|', $res);
+ }
+
+ // FAILS because the parser converts CDATA to a comment. Issue #2.
+ public function testCDATA() {
+ $res = $this->cycle('a<![CDATA[ This <is> a test. ]]>b');
+ $this->assertRegExp('|<![CDATA[ This <is> a test. ]]>|', $res);
+ }
+}
diff --git a/test/HTML5/Serializer/TraverserTest.php b/test/HTML5/Serializer/TraverserTest.php
new file mode 100644
index 0000000..c7e43d8
--- /dev/null
+++ b/test/HTML5/Serializer/TraverserTest.php
@@ -0,0 +1,10 @@
+<?php
+namespace HTML5\Tests;
+
+use \HTML5\Serializer\Traverser;
+
+require_once __DIR__ . '/../TestCase.php';
+
+class TraverserTest extends \HTML5\Tests\TestCase {
+
+} \ No newline at end of file