From 0226e0ca0dc70f9a0310b3eef045ee1c1e0ca3ac Mon Sep 17 00:00:00 2001
From: Andrew Dolgov
Date: Tue, 13 Dec 2022 20:00:46 +0300
Subject: split into a separate repo
---
.../masterminds/html5/test/HTML5/ElementsTest.php | 485 ++
.../html5/test/HTML5/Fixtures/encoding/utf-8.html | 9 +
.../test/HTML5/Fixtures/encoding/windows-1252.html | 9 +
vendor/masterminds/html5/test/HTML5/Html5Test.html | 10 +
vendor/masterminds/html5/test/HTML5/Html5Test.php | 492 ++
.../test/HTML5/Parser/CharacterReferenceTest.php | 44 +
.../html5/test/HTML5/Parser/DOMTreeBuilderTest.php | 743 +++
.../html5/test/HTML5/Parser/EventStack.php | 116 +
.../html5/test/HTML5/Parser/EventStackError.php | 7 +
.../test/HTML5/Parser/InstructionProcessorMock.php | 26 +
.../html5/test/HTML5/Parser/ScannerTest.php | 184 +
.../html5/test/HTML5/Parser/TokenizerTest.php | 978 +++
.../test/HTML5/Parser/TreeBuildingRulesTest.php | 118 +
.../html5/test/HTML5/Parser/UTF8UtilsTest.php | 28 +
.../test/HTML5/Serializer/OutputRulesTest.php | 652 ++
.../html5/test/HTML5/Serializer/TraverserTest.php | 136 +
vendor/masterminds/html5/test/HTML5/TestCase.php | 23 +
.../masterminds/html5/test/benchmark/example.html | 6403 ++++++++++++++++++++
vendor/masterminds/html5/test/benchmark/run.php | 29 +
19 files changed, 10492 insertions(+)
create mode 100644 vendor/masterminds/html5/test/HTML5/ElementsTest.php
create mode 100644 vendor/masterminds/html5/test/HTML5/Fixtures/encoding/utf-8.html
create mode 100644 vendor/masterminds/html5/test/HTML5/Fixtures/encoding/windows-1252.html
create mode 100644 vendor/masterminds/html5/test/HTML5/Html5Test.html
create mode 100644 vendor/masterminds/html5/test/HTML5/Html5Test.php
create mode 100644 vendor/masterminds/html5/test/HTML5/Parser/CharacterReferenceTest.php
create mode 100644 vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php
create mode 100644 vendor/masterminds/html5/test/HTML5/Parser/EventStack.php
create mode 100644 vendor/masterminds/html5/test/HTML5/Parser/EventStackError.php
create mode 100644 vendor/masterminds/html5/test/HTML5/Parser/InstructionProcessorMock.php
create mode 100644 vendor/masterminds/html5/test/HTML5/Parser/ScannerTest.php
create mode 100644 vendor/masterminds/html5/test/HTML5/Parser/TokenizerTest.php
create mode 100644 vendor/masterminds/html5/test/HTML5/Parser/TreeBuildingRulesTest.php
create mode 100644 vendor/masterminds/html5/test/HTML5/Parser/UTF8UtilsTest.php
create mode 100644 vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php
create mode 100644 vendor/masterminds/html5/test/HTML5/Serializer/TraverserTest.php
create mode 100644 vendor/masterminds/html5/test/HTML5/TestCase.php
create mode 100644 vendor/masterminds/html5/test/benchmark/example.html
create mode 100644 vendor/masterminds/html5/test/benchmark/run.php
(limited to 'vendor/masterminds/html5/test')
diff --git a/vendor/masterminds/html5/test/HTML5/ElementsTest.php b/vendor/masterminds/html5/test/HTML5/ElementsTest.php
new file mode 100644
index 0000000..08b5ee4
--- /dev/null
+++ b/vendor/masterminds/html5/test/HTML5/ElementsTest.php
@@ -0,0 +1,485 @@
+html5Elements as $element) {
+ $this->assertTrue(Elements::isHtml5Element($element), 'html5 element test failed on: ' . $element);
+
+ $this->assertTrue(Elements::isHtml5Element(strtoupper($element)), 'html5 element test failed on: ' . strtoupper($element));
+ }
+
+ $nonhtml5 = array(
+ 'foo',
+ 'bar',
+ 'baz',
+ );
+ foreach ($nonhtml5 as $element) {
+ $this->assertFalse(Elements::isHtml5Element($element), 'html5 element test failed on: ' . $element);
+
+ $this->assertFalse(Elements::isHtml5Element(strtoupper($element)), 'html5 element test failed on: ' . strtoupper($element));
+ }
+ }
+
+ public function testIsMathMLElement()
+ {
+ foreach ($this->mathmlElements as $element) {
+ $this->assertTrue(Elements::isMathMLElement($element), 'MathML element test failed on: ' . $element);
+
+ // MathML is case sensitive so these should all fail.
+ $this->assertFalse(Elements::isMathMLElement(strtoupper($element)), 'MathML element test failed on: ' . strtoupper($element));
+ }
+
+ $nonMathML = array(
+ 'foo',
+ 'bar',
+ 'baz',
+ );
+ foreach ($nonMathML as $element) {
+ $this->assertFalse(Elements::isMathMLElement($element), 'MathML element test failed on: ' . $element);
+ }
+ }
+
+ public function testIsSvgElement()
+ {
+ foreach ($this->svgElements as $element) {
+ $this->assertTrue(Elements::isSvgElement($element), 'SVG element test failed on: ' . $element);
+
+ // SVG is case sensitive so these should all fail.
+ $this->assertFalse(Elements::isSvgElement(strtoupper($element)), 'SVG element test failed on: ' . strtoupper($element));
+ }
+
+ $nonSVG = array(
+ 'foo',
+ 'bar',
+ 'baz',
+ );
+ foreach ($nonSVG as $element) {
+ $this->assertFalse(Elements::isSvgElement($element), 'SVG element test failed on: ' . $element);
+ }
+ }
+
+ public function testIsElement()
+ {
+ foreach ($this->html5Elements as $element) {
+ $this->assertTrue(Elements::isElement($element), 'html5 element test failed on: ' . $element);
+
+ $this->assertTrue(Elements::isElement(strtoupper($element)), 'html5 element test failed on: ' . strtoupper($element));
+ }
+
+ foreach ($this->mathmlElements as $element) {
+ $this->assertTrue(Elements::isElement($element), 'MathML element test failed on: ' . $element);
+
+ // MathML is case sensitive so these should all fail.
+ $this->assertFalse(Elements::isElement(strtoupper($element)), 'MathML element test failed on: ' . strtoupper($element));
+ }
+
+ foreach ($this->svgElements as $element) {
+ $this->assertTrue(Elements::isElement($element), 'SVG element test failed on: ' . $element);
+
+ // SVG is case sensitive so these should all fail. But, there is duplication
+ // html5 and SVG. Since html5 is case insensitive we need to make sure
+ // it's not a html5 element first.
+ if (!in_array($element, $this->html5Elements)) {
+ $this->assertFalse(Elements::isElement(strtoupper($element)), 'SVG element test failed on: ' . strtoupper($element));
+ }
+ }
+
+ $nonhtml5 = array(
+ 'foo',
+ 'bar',
+ 'baz',
+ );
+ foreach ($nonhtml5 as $element) {
+ $this->assertFalse(Elements::isElement($element), 'html5 element test failed on: ' . $element);
+
+ $this->assertFalse(Elements::isElement(strtoupper($element)), 'html5 element test failed on: ' . strtoupper($element));
+ }
+ }
+
+ public function testElement()
+ {
+ foreach ($this->html5Elements as $element) {
+ $this->assertGreaterThan(0, Elements::element($element));
+ }
+ $nonhtml5 = array(
+ 'foo',
+ 'bar',
+ 'baz',
+ );
+ foreach ($nonhtml5 as $element) {
+ $this->assertEquals(0, Elements::element($element));
+ }
+ }
+
+ public function testIsA()
+ {
+ $this->assertTrue(Elements::isA('script', Elements::KNOWN_ELEMENT));
+ $this->assertFalse(Elements::isA('scriptypoo', Elements::KNOWN_ELEMENT));
+ $this->assertTrue(Elements::isA('script', Elements::TEXT_RAW));
+ $this->assertFalse(Elements::isA('script', Elements::TEXT_RCDATA));
+
+ $voidElements = array(
+ 'area',
+ 'base',
+ 'basefont',
+ 'bgsound',
+ 'br',
+ 'col',
+ 'command',
+ 'embed',
+ 'frame',
+ 'hr',
+ 'img',
+ );
+
+ foreach ($voidElements as $element) {
+ $this->assertTrue(Elements::isA($element, Elements::VOID_TAG), 'Void element test failed on: ' . $element);
+ }
+
+ $nonVoid = array(
+ 'span',
+ 'a',
+ 'div',
+ );
+ foreach ($nonVoid as $tag) {
+ $this->assertFalse(Elements::isA($tag, Elements::VOID_TAG), 'Void element test failed on: ' . $tag);
+ }
+
+ $blockTags = array(
+ 'address',
+ 'article',
+ 'aside',
+ 'blockquote',
+ 'canvas',
+ 'dd',
+ 'div',
+ 'dl',
+ 'fieldset',
+ 'figcaption',
+ 'figure',
+ 'footer',
+ 'form',
+ 'h1',
+ 'h2',
+ 'h3',
+ 'h4',
+ 'h5',
+ 'h6',
+ 'header',
+ 'hgroup',
+ 'hr',
+ 'noscript',
+ 'ol',
+ 'output',
+ 'p',
+ 'pre',
+ 'section',
+ 'table',
+ 'tfoot',
+ 'ul',
+ 'video',
+ );
+
+ foreach ($blockTags as $tag) {
+ $this->assertTrue(Elements::isA($tag, Elements::BLOCK_TAG), 'Block tag test failed on: ' . $tag);
+ }
+
+ $nonBlockTags = array(
+ 'span',
+ 'img',
+ 'label',
+ );
+ foreach ($nonBlockTags as $tag) {
+ $this->assertFalse(Elements::isA($tag, Elements::BLOCK_TAG), 'Block tag test failed on: ' . $tag);
+ }
+ }
+
+ public function testNormalizeSvgElement()
+ {
+ $tests = array(
+ 'foo' => 'foo',
+ 'altglyph' => 'altGlyph',
+ 'BAR' => 'bar',
+ 'fespecularlighting' => 'feSpecularLighting',
+ 'bAz' => 'baz',
+ 'foreignobject' => 'foreignObject',
+ );
+
+ foreach ($tests as $input => $expected) {
+ $this->assertEquals($expected, Elements::normalizeSvgElement($input));
+ }
+ }
+
+ public function testNormalizeSvgAttribute()
+ {
+ $tests = array(
+ 'foo' => 'foo',
+ 'attributename' => 'attributeName',
+ 'BAR' => 'bar',
+ 'limitingconeangle' => 'limitingConeAngle',
+ 'bAz' => 'baz',
+ 'patterncontentunits' => 'patternContentUnits',
+ );
+
+ foreach ($tests as $input => $expected) {
+ $this->assertEquals($expected, Elements::normalizeSvgAttribute($input));
+ }
+ }
+
+ public function testNormalizeMathMlAttribute()
+ {
+ $tests = array(
+ 'foo' => 'foo',
+ 'definitionurl' => 'definitionURL',
+ 'BAR' => 'bar',
+ );
+
+ foreach ($tests as $input => $expected) {
+ $this->assertEquals($expected, Elements::normalizeMathMlAttribute($input));
+ }
+ }
+}
diff --git a/vendor/masterminds/html5/test/HTML5/Fixtures/encoding/utf-8.html b/vendor/masterminds/html5/test/HTML5/Fixtures/encoding/utf-8.html
new file mode 100644
index 0000000..fa5a029
--- /dev/null
+++ b/vendor/masterminds/html5/test/HTML5/Fixtures/encoding/utf-8.html
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+ Žťčýů
+
+
diff --git a/vendor/masterminds/html5/test/HTML5/Fixtures/encoding/windows-1252.html b/vendor/masterminds/html5/test/HTML5/Fixtures/encoding/windows-1252.html
new file mode 100644
index 0000000..f0132da
--- /dev/null
+++ b/vendor/masterminds/html5/test/HTML5/Fixtures/encoding/windows-1252.html
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/vendor/masterminds/html5/test/HTML5/Html5Test.html b/vendor/masterminds/html5/test/HTML5/Html5Test.html
new file mode 100644
index 0000000..a976e8b
--- /dev/null
+++ b/vendor/masterminds/html5/test/HTML5/Html5Test.html
@@ -0,0 +1,10 @@
+
+
+
+
+ Test
+
+
+ This is a test.
+
+
\ No newline at end of file
diff --git a/vendor/masterminds/html5/test/HTML5/Html5Test.php b/vendor/masterminds/html5/test/HTML5/Html5Test.php
new file mode 100644
index 0000000..ed66d8a
--- /dev/null
+++ b/vendor/masterminds/html5/test/HTML5/Html5Test.php
@@ -0,0 +1,492 @@
+html5 = $this->getInstance();
+ }
+
+ /**
+ * Parse and serialize a string.
+ */
+ protected function cycle($html)
+ {
+ $dom = $this->html5->loadHTML('' . $html . '');
+ $out = $this->html5->saveHTML($dom);
+
+ return $out;
+ }
+
+ protected function cycleFragment($fragment)
+ {
+ $dom = $this->html5->loadHTMLFragment($fragment);
+ $out = $this->html5->saveHTML($dom);
+
+ return $out;
+ }
+
+ public function testImageTagsInSvg()
+ {
+ $html = '
+
+
+ foo
+
+
+
+
+
+
+ ';
+ $doc = $this->html5->loadHTML($html);
+ $this->assertInstanceOf('DOMElement', $doc->getElementsByTagName('image')->item(0));
+ $this->assertEmpty($this->html5->getErrors());
+ }
+
+ public function testLoadOptions()
+ {
+ // doc
+ $dom = $this->html5->loadHTML($this->wrap(' '), array(
+ 'implicitNamespaces' => array('t' => 'http://example.com'),
+ 'xmlNamespaces' => true,
+ ));
+ $this->assertInstanceOf('\DOMDocument', $dom);
+ $this->assertEmpty($this->html5->getErrors());
+ $this->assertFalse($this->html5->hasErrors());
+
+ $xpath = new \DOMXPath($dom);
+ $xpath->registerNamespace('t', 'http://example.com');
+ $this->assertEquals(1, $xpath->query('//t:tag')->length);
+
+ // doc fragment
+ $frag = $this->html5->loadHTMLFragment(' ', array(
+ 'implicitNamespaces' => array('t' => 'http://example.com'),
+ 'xmlNamespaces' => true,
+ ));
+ $this->assertInstanceOf('\DOMDocumentFragment', $frag);
+ $this->assertEmpty($this->html5->getErrors());
+ $this->assertFalse($this->html5->hasErrors());
+
+ $frag->ownerDocument->appendChild($frag);
+ $xpath = new \DOMXPath($frag->ownerDocument);
+ $xpath->registerNamespace('t', 'http://example.com');
+ $this->assertEquals(1, $xpath->query('//t:tag', $frag)->length);
+ }
+
+ public function testEncodingUtf8()
+ {
+ $dom = $this->html5->load(__DIR__ . '/Fixtures/encoding/utf-8.html');
+ $this->assertInstanceOf('\DOMDocument', $dom);
+ $this->assertEmpty($this->html5->getErrors());
+ $this->assertFalse($this->html5->hasErrors());
+
+ $this->assertContains('Žťčýů', $dom->saveHTML());
+ }
+
+ public function testEncodingWindows1252()
+ {
+ $dom = $this->html5->load(__DIR__ . '/Fixtures/encoding/windows-1252.html', array(
+ 'encoding' => 'Windows-1252',
+ ));
+
+ $this->assertInstanceOf('\DOMDocument', $dom);
+ $this->assertEmpty($this->html5->getErrors());
+ $this->assertFalse($this->html5->hasErrors());
+
+ $dumpedAsUtf8 = mb_convert_encoding($dom->saveHTML(), 'UTF-8', 'Windows-1252');
+ $this->assertNotFalse(mb_strpos($dumpedAsUtf8, 'Ž'));
+ $this->assertNotFalse(mb_strpos($dumpedAsUtf8, 'è'));
+ $this->assertNotFalse(mb_strpos($dumpedAsUtf8, 'ý'));
+ $this->assertNotFalse(mb_strpos($dumpedAsUtf8, 'ù'));
+ }
+
+ public function testErrors()
+ {
+ $dom = $this->html5->loadHTML('');
+ $this->assertInstanceOf('\DOMDocument', $dom);
+
+ $this->assertNotEmpty($this->html5->getErrors());
+ $this->assertTrue($this->html5->hasErrors());
+ }
+
+ public function testLoad()
+ {
+ $dom = $this->html5->load(__DIR__ . '/Html5Test.html');
+ $this->assertInstanceOf('\DOMDocument', $dom);
+ $this->assertEmpty($this->html5->getErrors());
+ $this->assertFalse($this->html5->hasErrors());
+
+ $file = fopen(__DIR__ . '/Html5Test.html', 'r');
+ $dom = $this->html5->load($file);
+ $this->assertInstanceOf('\DOMDocument', $dom);
+ $this->assertEmpty($this->html5->getErrors());
+
+ $dom = $this->html5->loadHTMLFile(__DIR__ . '/Html5Test.html');
+ $this->assertInstanceOf('\DOMDocument', $dom);
+ $this->assertEmpty($this->html5->getErrors());
+ }
+
+ public function testLoadHTML()
+ {
+ $contents = file_get_contents(__DIR__ . '/Html5Test.html');
+ $dom = $this->html5->loadHTML($contents);
+ $this->assertInstanceOf('\DOMDocument', $dom);
+ $this->assertEmpty($this->html5->getErrors());
+ }
+
+ public function testLoadHTMLWithComments()
+ {
+ $contents = '
+
+';
+
+ $dom = $this->html5->loadHTML($contents);
+ $this->assertInstanceOf('\DOMDocument', $dom);
+
+ $expected = '
+
+';
+ $this->assertEquals($expected, $this->html5->saveHTML($dom));
+ }
+
+ public function testLoadHTMLFragment()
+ {
+ $fragment = '';
+ $dom = $this->html5->loadHTMLFragment($fragment);
+ $this->assertInstanceOf('\DOMDocumentFragment', $dom);
+ $this->assertEmpty($this->html5->getErrors());
+ }
+
+ public function testSaveHTML()
+ {
+ $dom = $this->html5->load(__DIR__ . '/Html5Test.html');
+ $this->assertInstanceOf('\DOMDocument', $dom);
+ $this->assertEmpty($this->html5->getErrors());
+
+ $saved = $this->html5->saveHTML($dom);
+ $this->assertRegExp('|This is a test.
|', $saved);
+ }
+
+ public function testSaveHTMLFragment()
+ {
+ $fragment = '';
+ $dom = $this->html5->loadHTMLFragment($fragment);
+
+ $string = $this->html5->saveHTML($dom);
+ $this->assertEquals($fragment, $string);
+ }
+
+ public function testSave()
+ {
+ $dom = $this->html5->load(__DIR__ . '/Html5Test.html');
+ $this->assertInstanceOf('\DOMDocument', $dom);
+ $this->assertEmpty($this->html5->getErrors());
+
+ // Test resource
+ $file = fopen('php://temp', 'w');
+ $this->html5->save($dom, $file);
+ $content = stream_get_contents($file, -1, 0);
+ $this->assertRegExp('|This is a test.
|', $content);
+
+ // Test file
+ $tmpfname = tempnam(sys_get_temp_dir(), 'html5-php');
+ $this->html5->save($dom, $tmpfname);
+ $content = file_get_contents($tmpfname);
+ $this->assertRegExp('|This is a test.
|', $content);
+ unlink($tmpfname);
+ }
+
+ // This test reads a document into a dom, turn the dom into a document,
+ // then tries to read that document again. This makes sure we are reading,
+ // and generating a document that works at a high level.
+ public function testItWorks()
+ {
+ $dom = $this->html5->load(__DIR__ . '/Html5Test.html');
+ $this->assertInstanceOf('\DOMDocument', $dom);
+ $this->assertEmpty($this->html5->getErrors());
+
+ $saved = $this->html5->saveHTML($dom);
+
+ $dom2 = $this->html5->loadHTML($saved);
+ $this->assertInstanceOf('\DOMDocument', $dom2);
+ $this->assertEmpty($this->html5->getErrors());
+ }
+
+ public function testConfig()
+ {
+ $html5 = $this->getInstance();
+ $options = $html5->getOptions();
+ $this->assertEquals(false, $options['encode_entities']);
+
+ $html5 = $this->getInstance(array(
+ 'foo' => 'bar',
+ 'encode_entities' => true,
+ ));
+ $options = $html5->getOptions();
+ $this->assertEquals('bar', $options['foo']);
+ $this->assertEquals(true, $options['encode_entities']);
+
+ // Need to reset to original so future tests pass as expected.
+ // $this->getInstance()->setOption('encode_entities', false);
+ }
+
+ public function testSvg()
+ {
+ $dom = $this->html5->loadHTML(
+ '
+
+
+ foo bar baz
+
+
+
+
+
+
+ Test Text.
+
+
+
+
+ ');
+
+ $this->assertEmpty($this->html5->getErrors());
+
+ // Test a mixed case attribute.
+ $list = $dom->getElementsByTagName('svg');
+ $this->assertNotEmpty($list->length);
+ $svg = $list->item(0);
+ $this->assertEquals('0 0 3 2', $svg->getAttribute('viewBox'));
+ $this->assertFalse($svg->hasAttribute('viewbox'));
+
+ // Test a mixed case tag.
+ // Note: getElementsByTagName is not case sensitive.
+ $list = $dom->getElementsByTagName('textPath');
+ $this->assertNotEmpty($list->length);
+ $textPath = $list->item(0);
+ $this->assertEquals('textPath', $textPath->tagName);
+ $this->assertNotEquals('textpath', $textPath->tagName);
+
+ $html = $this->html5->saveHTML($dom);
+ $this->assertRegExp('||', $html);
+ $this->assertRegExp('| |', $html);
+ }
+
+ public function testMathMl()
+ {
+ $dom = $this->html5->loadHTML(
+ '
+
+
+ foo bar baz
+
+ x
+
+ ±
+
+ y
+
+
+ ');
+
+ $this->assertEmpty($this->html5->getErrors());
+ $list = $dom->getElementsByTagName('math');
+ $this->assertNotEmpty($list->length);
+
+ $list = $dom->getElementsByTagName('div');
+ $this->assertNotEmpty($list->length);
+ $div = $list->item(0);
+ $this->assertEquals('http://example.com', $div->getAttribute('definitionurl'));
+ $this->assertFalse($div->hasAttribute('definitionURL'));
+ $list = $dom->getElementsByTagName('csymbol');
+ $csymbol = $list->item(0);
+ $this->assertEquals('http://www.example.com/mathops/multiops.html#plusminus', $csymbol->getAttribute('definitionURL'));
+ $this->assertFalse($csymbol->hasAttribute('definitionurl'));
+
+ $html = $this->html5->saveHTML($dom);
+ $this->assertRegExp('||', $html);
+ $this->assertRegExp('|y |', $html);
+ }
+
+ public function testUnknownElements()
+ {
+ // The : should not have special handling accourding to section 2.9 of the
+ // spec. This is differenant than XML. Since we don't know these elements
+ // they are handled as normal elements. Note, to do this is really
+ // an invalid example and you should not embed prefixed xml in html5.
+ $dom = $this->html5->loadHTMLFragment(
+ '
+ Big rectangle thing
+ 40
+ 80
+
+ um, yeah ');
+
+ $this->assertEmpty($this->html5->getErrors());
+ $markup = $this->html5->saveHTML($dom);
+ $this->assertRegExp('|Big rectangle thing |', $markup);
+ $this->assertRegExp('|um, yeah |', $markup);
+ }
+
+ 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);
+
+ // Elements with dashes and underscores
+ $res = $this->cycleFragment(' ');
+ $this->assertRegExp('| |', $res);
+ $res = $this->cycleFragment(' ');
+ $this->assertRegExp('| |', $res);
+
+ // Should have no closing tag.
+ $res = $this->cycle(' ');
+ $this->assertRegExp('|
Error