diff --git a/tests/PureHTMLDefinition.php b/tests/PureHTMLDefinition.php
index b7fbeac6..28046fa3 100644
--- a/tests/PureHTMLDefinition.php
+++ b/tests/PureHTMLDefinition.php
@@ -1,5 +1,190 @@
$input) {
+ $result = $def->validateChildren($input);
+ if (is_bool($expect[$i])) {
+ $this->assertIdentical($expect[$i], $result);
+ } else {
+ $this->assertEqual($expect[$i], $result);
+ paintIf($result, $result != $expect[$i]);
+ }
+ }
+ }
+
+ function test_complex() {
+
+ // the table definition
+ $def = new HTMLDTD_ChildDef(
+ '(caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))');
+
+ $inputs[0] = array();
+ $expect[0] = false;
+
+ // we really don't care what's inside, because if it turns out
+ // this tr is illegal, we'll end up re-evaluating the parent node
+ // anyway.
+ $inputs[1] = array(
+ new MF_StartTag('tr') ,new MF_EndTag('tr')
+ );
+ $expect[1] = true;
+
+ $inputs[2] = array(
+ new MF_StartTag('caption') ,new MF_EndTag('caption')
+ ,new MF_StartTag('col') ,new MF_EndTag('col')
+ ,new MF_StartTag('thead') ,new MF_EndTag('thead')
+ ,new MF_StartTag('tfoot') ,new MF_EndTag('tfoot')
+ ,new MF_StartTag('tbody') ,new MF_EndTag('tbody')
+ );
+ $expect[2] = true;
+
+ $inputs[3] = array(
+ new MF_StartTag('col') ,new MF_EndTag('col')
+ ,new MF_StartTag('col') ,new MF_EndTag('col')
+ ,new MF_StartTag('col') ,new MF_EndTag('col')
+ ,new MF_StartTag('tr') ,new MF_EndTag('tr')
+ );
+ $expect[3] = true;
+
+ $this->assertSeries($inputs, $expect, $def);
+
+ }
+
+ function test_simple() {
+
+ // simple is actually an abstract class
+ // but we're unit testing some of the conv. functions it gives
+
+ $def = new HTMLDTD_ChildDef_Simple('foobar | bang |gizmo');
+ $this->assertEqual($def->elements,
+ array(
+ 'foobar' => true
+ ,'bang' => true
+ ,'gizmo' => true
+ ));
+
+ $def = new HTMLDTD_ChildDef_Simple(array('href', 'src'));
+ $this->assertEqual($def->elements,
+ array(
+ 'href' => true
+ ,'src' => true
+ ));
+ }
+
+ function test_required_pcdata_forbidden() {
+
+ $def = new HTMLDTD_ChildDef_Required('dt | dd');
+
+ $inputs[0] = array();
+ $expect[0] = false;
+
+ $inputs[1] = array(
+ new MF_StartTag('dt')
+ ,new MF_Text('Term')
+ ,new MF_EndTag('dt')
+
+ ,new MF_Text('Text in an illegal location')
+
+ ,new MF_StartTag('dd')
+ ,new MF_Text('Definition')
+ ,new MF_EndTag('dd')
+
+ ,new MF_StartTag('b') // test tag removal too
+ ,new MF_EndTag('b')
+ );
+ $expect[1] = array(
+ new MF_StartTag('dt')
+ ,new MF_Text('Term')
+ ,new MF_EndTag('dt')
+
+ ,new MF_StartTag('dd')
+ ,new MF_Text('Definition')
+ ,new MF_EndTag('dd')
+ );
+
+ $inputs[2] = array(new MF_Text('How do you do!'));
+ $expect[2] = false;
+
+ // whitespace shouldn't trigger it
+ $inputs[3] = array(
+ new MF_Text("\n")
+ ,new MF_StartTag('dd')
+ ,new MF_Text('Definition')
+ ,new MF_EndTag('dd')
+ ,new MF_Text(' ')
+ );
+ $expect[3] = true;
+
+ $inputs[4] = array(
+ new MF_StartTag('dd')
+ ,new MF_Text('Definition')
+ ,new MF_EndTag('dd')
+ ,new MF_Text(' ')
+ ,new MF_StartTag('b')
+ ,new MF_EndTag('b')
+ ,new MF_Text(' ')
+ );
+ $expect[4] = array(
+ new MF_StartTag('dd')
+ ,new MF_Text('Definition')
+ ,new MF_EndTag('dd')
+ ,new MF_Text(' ')
+ ,new MF_Text(' ')
+ );
+ $inputs[5] = array(
+ new MF_Text(' ')
+ ,new MF_Text("\t")
+ );
+ $expect[5] = false;
+
+ $this->assertSeries($inputs, $expect, $def);
+
+ }
+
+ function test_required_pcdata_allowed() {
+ $def = new HTMLDTD_ChildDef_Required('#PCDATA | b');
+ $input = array(
+ new MF_StartTag('b')
+ ,new MF_Text('Bold text')
+ ,new MF_EndTag('b')
+ ,new MF_EmptyTag('img') // illegal tag
+ );
+ $expect = array(
+ new MF_StartTag('b')
+ ,new MF_Text('Bold text')
+ ,new MF_EndTag('b')
+ ,new MF_Text('
')
+ );
+ $this->assertEqual($expect, $def->validateChildren($input));
+ }
+
+ function test_optional() {
+ $def = new HTMLDTD_ChildDef_Optional('b | i');
+ $input = array(
+ new MF_StartTag('b')
+ ,new MF_Text('Bold text')
+ ,new MF_EndTag('b')
+ ,new MF_EmptyTag('img') // illegal tag
+ );
+ $expect = array(
+ new MF_StartTag('b')
+ ,new MF_Text('Bold text')
+ ,new MF_EndTag('b')
+ );
+ $this->assertEqual($expect, $def->validateChildren($input));
+
+ $input = array(
+ new MF_Text('Not allowed text')
+ );
+ $expect = array();
+ $this->assertEqual($expect, $def->validateChildren($input));
+ }
+
+}
+
class Test_PureHTMLDefinition extends UnitTestCase
{
@@ -236,189 +421,4 @@ class Test_PureHTMLDefinition extends UnitTestCase
}
-class Test_HTMLDTD_ChildDef extends UnitTestCase
-{
-
- function assertSeries($inputs, $expect, $def) {
- foreach ($inputs as $i => $input) {
- $result = $def->validateChildren($input);
- if (is_bool($expect[$i])) {
- $this->assertIdentical($expect[$i], $result);
- } else {
- $this->assertEqual($expect[$i], $result);
- paintIf($result, $result != $expect[$i]);
- }
- }
- }
-
- function test_complex() {
-
- // the table definition
- $def = new HTMLDTD_ChildDef(
- '(caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))');
-
- $inputs[0] = array();
- $expect[0] = false;
-
- // we really don't care what's inside, because if it turns out
- // this tr is illegal, we'll end up re-evaluating the parent node
- // anyway.
- $inputs[1] = array(
- new MF_StartTag('tr') ,new MF_EndTag('tr')
- );
- $expect[1] = true;
-
- $inputs[2] = array(
- new MF_StartTag('caption') ,new MF_EndTag('caption')
- ,new MF_StartTag('col') ,new MF_EndTag('col')
- ,new MF_StartTag('thead') ,new MF_EndTag('thead')
- ,new MF_StartTag('tfoot') ,new MF_EndTag('tfoot')
- ,new MF_StartTag('tbody') ,new MF_EndTag('tbody')
- );
- $expect[2] = true;
-
- $inputs[3] = array(
- new MF_StartTag('col') ,new MF_EndTag('col')
- ,new MF_StartTag('col') ,new MF_EndTag('col')
- ,new MF_StartTag('col') ,new MF_EndTag('col')
- ,new MF_StartTag('tr') ,new MF_EndTag('tr')
- );
- $expect[3] = true;
-
- $this->assertSeries($inputs, $expect, $def);
-
- }
-
- function test_simple() {
-
- // simple is actually an abstract class
- // but we're unit testing some of the conv. functions it gives
-
- $def = new HTMLDTD_ChildDef_Simple('foobar | bang |gizmo');
- $this->assertEqual($def->elements,
- array(
- 'foobar' => true
- ,'bang' => true
- ,'gizmo' => true
- ));
-
- $def = new HTMLDTD_ChildDef_Simple(array('href', 'src'));
- $this->assertEqual($def->elements,
- array(
- 'href' => true
- ,'src' => true
- ));
- }
-
- function test_required_pcdata_forbidden() {
-
- $def = new HTMLDTD_ChildDef_Required('dt | dd');
-
- $inputs[0] = array();
- $expect[0] = false;
-
- $inputs[1] = array(
- new MF_StartTag('dt')
- ,new MF_Text('Term')
- ,new MF_EndTag('dt')
-
- ,new MF_Text('Text in an illegal location')
-
- ,new MF_StartTag('dd')
- ,new MF_Text('Definition')
- ,new MF_EndTag('dd')
-
- ,new MF_StartTag('b') // test tag removal too
- ,new MF_EndTag('b')
- );
- $expect[1] = array(
- new MF_StartTag('dt')
- ,new MF_Text('Term')
- ,new MF_EndTag('dt')
-
- ,new MF_StartTag('dd')
- ,new MF_Text('Definition')
- ,new MF_EndTag('dd')
- );
-
- $inputs[2] = array(new MF_Text('How do you do!'));
- $expect[2] = false;
-
- // whitespace shouldn't trigger it
- $inputs[3] = array(
- new MF_Text("\n")
- ,new MF_StartTag('dd')
- ,new MF_Text('Definition')
- ,new MF_EndTag('dd')
- ,new MF_Text(' ')
- );
- $expect[3] = true;
-
- $inputs[4] = array(
- new MF_StartTag('dd')
- ,new MF_Text('Definition')
- ,new MF_EndTag('dd')
- ,new MF_Text(' ')
- ,new MF_StartTag('b')
- ,new MF_EndTag('b')
- ,new MF_Text(' ')
- );
- $expect[4] = array(
- new MF_StartTag('dd')
- ,new MF_Text('Definition')
- ,new MF_EndTag('dd')
- ,new MF_Text(' ')
- ,new MF_Text(' ')
- );
- $inputs[5] = array(
- new MF_Text(' ')
- ,new MF_Text("\t")
- );
- $expect[5] = false;
-
- $this->assertSeries($inputs, $expect, $def);
-
- }
-
- function test_required_pcdata_allowed() {
- $def = new HTMLDTD_ChildDef_Required('#PCDATA | b');
- $input = array(
- new MF_StartTag('b')
- ,new MF_Text('Bold text')
- ,new MF_EndTag('b')
- ,new MF_EmptyTag('img') // illegal tag
- );
- $expect = array(
- new MF_StartTag('b')
- ,new MF_Text('Bold text')
- ,new MF_EndTag('b')
- ,new MF_Text('
')
- );
- $this->assertEqual($expect, $def->validateChildren($input));
- }
-
- function test_optional() {
- $def = new HTMLDTD_ChildDef_Optional('b | i');
- $input = array(
- new MF_StartTag('b')
- ,new MF_Text('Bold text')
- ,new MF_EndTag('b')
- ,new MF_EmptyTag('img') // illegal tag
- );
- $expect = array(
- new MF_StartTag('b')
- ,new MF_Text('Bold text')
- ,new MF_EndTag('b')
- );
- $this->assertEqual($expect, $def->validateChildren($input));
-
- $input = array(
- new MF_Text('Not allowed text')
- );
- $expect = array();
- $this->assertEqual($expect, $def->validateChildren($input));
- }
-
-}
-
?>
\ No newline at end of file