diff options
Diffstat (limited to 'inc/parser/tests/parser_lists.test.php')
-rw-r--r-- | inc/parser/tests/parser_lists.test.php | 422 |
1 files changed, 422 insertions, 0 deletions
diff --git a/inc/parser/tests/parser_lists.test.php b/inc/parser/tests/parser_lists.test.php new file mode 100644 index 000000000..92bef7812 --- /dev/null +++ b/inc/parser/tests/parser_lists.test.php @@ -0,0 +1,422 @@ +<?php +require_once 'parser.test.php'; + +class TestOfDoku_Parser_Lists extends TestOfDoku_Parser { + + function TestOfDoku_Parser_Lists() { + $this->UnitTestCase('TestOfDoku_Parser_Lists'); + } + + function testUnorderedList() { + $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock()); + $this->P->parse(' + *A + * B + * C +'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('listu_open',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array("A")), + array('listcontent_close',array()), + array('listu_open',array()), + array('listitem_open',array(2)), + array('listcontent_open',array()), + array('cdata',array(' B')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('listitem_close',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array(' C')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); + } + + function testOrderedList() { + $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock()); + $this->P->parse(' + -A + - B + - C +'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('listo_open',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array("A")), + array('listcontent_close',array()), + array('listo_open',array()), + array('listitem_open',array(2)), + array('listcontent_open',array()), + array('cdata',array(' B')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listo_close',array()), + array('listitem_close',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array(' C')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listo_close',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); + } + + + function testMixedList() { + $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock()); + $this->P->parse(' + -A + * B + - C +'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('listo_open',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array("A")), + array('listcontent_close',array()), + array('listu_open',array()), + array('listitem_open',array(2)), + array('listcontent_open',array()), + array('cdata',array(' B')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('listitem_close',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array(' C')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listo_close',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); + } + + function testUnorderedListWinEOL() { + $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock()); + $this->P->parse("\r\n *A\r\n * B\r\n * C\r\n"); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('listu_open',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array("A")), + array('listcontent_close',array()), + array('listu_open',array()), + array('listitem_open',array(2)), + array('listcontent_open',array()), + array('cdata',array(' B')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('listitem_close',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array(' C')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); + } + + function testOrderedListWinEOL() { + $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock()); + $this->P->parse("\r\n -A\r\n - B\r\n - C\r\n"); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('listo_open',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array("A")), + array('listcontent_close',array()), + array('listo_open',array()), + array('listitem_open',array(2)), + array('listcontent_open',array()), + array('cdata',array(' B')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listo_close',array()), + array('listitem_close',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array(' C')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listo_close',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); + } + + function testNotAList() { + $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock()); + $this->P->parse("Foo -bar *foo Bar"); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\nFoo -bar *foo Bar\n")), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); + } + + function testUnorderedListParagraph() { + $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock()); + $this->P->addMode('eol',new Doku_Parser_Mode_Eol()); + $this->P->parse('Foo + *A + * B + * C +Bar'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("Foo")), + array('p_close',array()), + array('listu_open',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array("A")), + array('listcontent_close',array()), + array('listu_open',array()), + array('listitem_open',array(2)), + array('listcontent_open',array()), + array('cdata',array(' B')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('listitem_close',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array(' C')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('p_open',array()), + array('cdata',array("Bar")), + array('p_close',array()), + array('p_open',array()), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); + } + + // This is really a failing test - formatting able to spread across list items + // Problem is fixing it would mean a major rewrite of lists + function testUnorderedListStrong() { + $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock()); + $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong')); + $this->P->parse(' + ***A** + *** B + * C** +'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('listu_open',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('strong_open',array()), + array('cdata',array("A")), + array('strong_close',array()), + array('listcontent_close',array()), + array('listu_open',array()), + array('listitem_open',array(2)), + array('listcontent_open',array()), + array('strong_open',array()), + array('cdata',array(" B\n * C")), + array('strong_close',array()), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); + } + + // This is really a failing test - unformatted able to spread across list items + // Problem is fixing it would mean a major rewrite of lists + function testUnorderedListUnformatted() { + $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock()); + $this->P->addMode('unformatted',new Doku_Parser_Mode_Unformatted()); + $this->P->parse(' + *%%A%% + *%% B + * C%% +'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('listu_open',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('unformatted',array("A")), + array('listcontent_close',array()), + array('listu_open',array()), + array('listitem_open',array(2)), + array('listcontent_open',array()), + array('unformatted',array(" B\n * C")), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); + } + + function testUnorderedListLinebreak() { + $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock()); + $this->P->addMode('linebreak',new Doku_Parser_Mode_Linebreak()); + $this->P->parse(' + *A\\\\ D + * B + * C +'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('listu_open',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array("A")), + array('linebreak',array()), + array('cdata',array("D")), + array('listcontent_close',array()), + array('listu_open',array()), + array('listitem_open',array(2)), + array('listcontent_open',array()), + array('cdata',array(' B')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('listitem_close',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('cdata',array(' C')), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); + } + + // Huh? + function testUnorderedListFootnote() { + $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock()); + $this->P->addMode('footnote',new Doku_Parser_Mode_Footnote()); + $this->P->parse(' + *((A)) + *(( B + * C )) + +'); + $calls = array ( + array('document_start',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('listu_open',array()), + array('listitem_open',array(1)), + array('listcontent_open',array()), + array('footnote_open',array()), + array('cdata',array("A")), + array('footnote_close',array()), + array('listcontent_close',array()), + array('listu_open',array()), + array('listitem_open',array(2)), + array('listcontent_open',array()), + array('footnote_open',array()), + array('cdata',array(" B\n * C")), + array('footnote_close',array()), + array('listcontent_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('listitem_close',array()), + array('listu_close',array()), + array('p_open',array()), + array('cdata',array("\n")), + array('p_close',array()), + array('document_end',array()), + ); + $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls); + } +} + +/** +* Conditional test runner +*/ +if (!defined('TEST_RUNNING')) { + define('TEST_RUNNING', true); + $test = &new TestOfDoku_Parser_Lists(); + $test->run(new HtmlReporter()); +} |