summaryrefslogtreecommitdiff
path: root/test/HTML5/Serializer
diff options
context:
space:
mode:
Diffstat (limited to 'test/HTML5/Serializer')
-rw-r--r--test/HTML5/Serializer/OutputRulesTest.php103
-rw-r--r--test/HTML5/Serializer/SerializerTest.php11
-rw-r--r--test/HTML5/Serializer/TraverserTest.php60
3 files changed, 111 insertions, 63 deletions
diff --git a/test/HTML5/Serializer/OutputRulesTest.php b/test/HTML5/Serializer/OutputRulesTest.php
new file mode 100644
index 0000000..3322e5a
--- /dev/null
+++ b/test/HTML5/Serializer/OutputRulesTest.php
@@ -0,0 +1,103 @@
+<?php
+namespace HTML5\Tests;
+
+use \HTML5\Serializer\OutputRules;
+use \HTML5\Serializer\Traverser;
+use \HTML5\Parser;
+
+require_once __DIR__ . '/../TestCase.php';
+
+class OutputRulesTest extends \HTML5\Tests\TestCase {
+
+ protected $markup = '<!doctype html>
+ <html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Test</title>
+ </head>
+ <body>
+ <p>This is a test.</p>
+ </body>
+ </html>';
+
+ /**
+ * Using reflection we make a protected method accessible for testing.
+ *
+ * @param string $name
+ * The name of the method on the Traverser class to test.
+ *
+ * @return \ReflectionMethod
+ * \ReflectionMethod for the specified method
+ */
+ function getProtectedMethod($name) {
+ $class = new \ReflectionClass('\HTML5\Serializer\OutputRules');
+ $method = $class->getMethod($name);
+ $method->setAccessible(true);
+ return $method;
+ }
+
+ function getOutputRules($options = array()) {
+ $options = $options + \HTML5::options();
+ $stream = fopen('php://temp', 'w');
+ $dom = \HTML5::loadHTML($this->markup);
+ $t = new Traverser($dom, $stream, $options);
+
+ $o = new OutputRules($t, $stream, $options);
+
+ return array($o, $stream);
+ }
+
+ function testText() {
+ $dom = \HTML5::loadHTML('<!doctype html>
+ <html lang="en">
+ <head>
+ <script>baz();</script>
+ </head>
+ </html>');
+
+ $stream = fopen('php://temp', 'w');
+ $t = new Traverser($dom, $stream, \HTML5::options());
+ $o = new OutputRules($t, $stream, \HTML5::options());
+
+ $list = $dom->getElementsByTagName('script');
+ $o->text($list->item(0)->childNodes->item(0));
+ $this->assertEquals('baz();', stream_get_contents($stream, -1, 0));
+ }
+
+ function testNl() {
+ list($o, $s) = $this->getOutputRules();
+
+ $m = $this->getProtectedMethod('nl');
+ $m->invoke($o);
+ $this->assertEquals(PHP_EOL, stream_get_contents($s, -1, 0));
+ }
+
+ function testWr() {
+ list($o, $s) = $this->getOutputRules();
+
+ $m = $this->getProtectedMethod('wr');
+ $m->invoke($o, 'foo');
+ $this->assertEquals('foo', stream_get_contents($s, -1, 0));
+ }
+
+ function testEnc() {
+
+ // Test basic escaping of text.
+ $tests = array(
+ '&\'<>"' => '&amp;&#039;&lt;&gt;&quot;',
+ 'This + is. a < test' => 'This + is. a &lt; test',
+ );
+
+ list($o, $s) = $this->getOutputRules();
+ $m = $this->getProtectedMethod('enc');
+ foreach ($tests as $test => $expected) {
+ $this->assertEquals($expected, $m->invoke($o, $test));
+ }
+
+ list($o, $s) = $this->getOutputRules(array('encode' => TRUE));
+ $m = $this->getProtectedMethod('enc');
+
+ $this->assertEquals('&period;&plus;&num;', $m->invoke($o, '.+#'));
+ }
+
+} \ No newline at end of file
diff --git a/test/HTML5/Serializer/SerializerTest.php b/test/HTML5/Serializer/SerializerTest.php
index 977f7dd..4a28c54 100644
--- a/test/HTML5/Serializer/SerializerTest.php
+++ b/test/HTML5/Serializer/SerializerTest.php
@@ -20,7 +20,8 @@ class SerializerTest extends \HTML5\Tests\TestCase {
*/
protected function cycle($html) {
$dom = \HTML5::loadHTML($html);
- $ser = new Serializer($dom);
+ $options = \HTML5::options();
+ $ser = new Serializer($dom, $options);
$out = $ser->saveHTML();
return $out;
@@ -44,7 +45,7 @@ class SerializerTest extends \HTML5\Tests\TestCase {
$dom = \HTML5::loadHTML($html);
$this->assertTrue($dom instanceof \DOMDocument, "Canary");
- $ser = new Serializer($dom, FALSE);
+ $ser = new Serializer($dom, \HTML5::options());
$out = $ser->saveHTML();
$this->assertTrue(count($out) >= count($html), 'Byte counts');
@@ -59,7 +60,7 @@ class SerializerTest extends \HTML5\Tests\TestCase {
$dom = \HTML5::loadHTML($html);
$this->assertTrue($dom instanceof \DOMDocument, "Canary");
- $ser = new Serializer($dom, FALSE);
+ $ser = new Serializer($dom, \HTML5::options());
$out = fopen("php://temp", "w");
$ser->save($out);
@@ -99,10 +100,10 @@ class SerializerTest extends \HTML5\Tests\TestCase {
$res = $this->cycle($this->prepareHtml('<a>This is a test.</a>'));
$this->assertRegExp('|This is a test.|', $res);
- $res = $this->cycle('This
+ $res = $this->cycle($this->prepareHtml('This
is
a
- test.');
+ test.'));
// Check that newlines are there, but don't count spaces.
$this->assertRegExp('|This\n\s*is\n\s*a\n\s*test.|', $res);
diff --git a/test/HTML5/Serializer/TraverserTest.php b/test/HTML5/Serializer/TraverserTest.php
index fb8ed34..e160ce6 100644
--- a/test/HTML5/Serializer/TraverserTest.php
+++ b/test/HTML5/Serializer/TraverserTest.php
@@ -8,8 +8,6 @@ require_once __DIR__ . '/../TestCase.php';
class TraverserTest extends \HTML5\Tests\TestCase {
- // Dummy markup to parse then try to traverse. Note, not using any html5
- // so we can use the old parser until ours is complete.
protected $markup = '<!doctype html>
<html lang="en">
<head>
@@ -40,7 +38,7 @@ class TraverserTest extends \HTML5\Tests\TestCase {
function getTraverser() {
$stream = fopen('php://temp', 'w');
$dom = \HTML5::loadHTML($this->markup);
- $t = new Traverser($dom, $stream);
+ $t = new Traverser($dom, $stream, \HTML5::options());
// We return both the traverser and stream so we can pull from it.
return array($t, $stream);
@@ -54,62 +52,8 @@ class TraverserTest extends \HTML5\Tests\TestCase {
$dom = \HTML5::loadHTML($this->markup);
- $t = new Traverser($dom, $stream);
+ $t = new Traverser($dom, $stream, \HTML5::options());
$this->assertInstanceOf('\HTML5\Serializer\Traverser', $t);
}
-
- function testNl() {
- list($t, $s) = $this->getTraverser();
-
- $m = $this->getProtectedMethod('nl');
- $m->invoke($t);
- $this->assertEquals(PHP_EOL, stream_get_contents($s, -1, 0));
- }
-
- function testWr() {
- list($t, $s) = $this->getTraverser();
-
- $m = $this->getProtectedMethod('wr');
- $m->invoke($t, 'foo');
- $this->assertEquals('foo', stream_get_contents($s, -1, 0));
- }
-
- function testText() {
- $dom = \HTML5::loadHTML('<!doctype html>
- <html lang="en">
- <head>
- <script>baz();</script>
- </head>
- </html>');
-
- $stream = fopen('php://temp', 'w');
- $t = new Traverser($dom, $stream);
- $m = $this->getProtectedMethod('text');
-
- $list = $dom->getElementsByTagName('script');
- $m->invoke($t, $list->item(0)->childNodes->item(0));
- $this->assertEquals('baz();', stream_get_contents($stream, -1, 0));
- }
-
- function testEnc() {
-
- // Test basic escaping of text.
- $tests = array(
- '&\'<>"' => '&amp;&#039;&lt;&gt;&quot;',
- 'This + is. a < test' => 'This + is. a &lt; test',
- );
-
- list($t, $s) = $this->getTraverser();
- $m = $this->getProtectedMethod('enc');
- foreach ($tests as $test => $expected) {
- $this->assertEquals($expected, $m->invoke($t, $test));
- }
-
- list($t, $s) = $this->getTraverser();
- $t->encodeOutput(TRUE);
- $m = $this->getProtectedMethod('enc');
-
- $this->assertEquals('&period;&plus;&num;', $m->invoke($t, '.+#'));
- }
} \ No newline at end of file