summaryrefslogtreecommitdiff
path: root/_test
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2005-10-22 01:23:28 +0200
committerAndreas Gohr <andi@splitbrain.org>2005-10-22 01:23:28 +0200
commitc13104acf0edfa5c08738d32e26ae51ea7e4407c (patch)
tree23141f0c865563590d33003fcbb5173d2ed0b53c /_test
parentaa11db09d61b813593c2ed7d91b329f98ae7010a (diff)
downloadrpg-c13104acf0edfa5c08738d32e26ae51ea7e4407c.tar.gz
rpg-c13104acf0edfa5c08738d32e26ae51ea7e4407c.tar.bz2
moved parser tests to new test environment
The parser tests are outdated and need to be adjusted. Currently 71 tests fail. Others are probably missing. darcs-hash:20051021232328-7ad00-c1d62951dad810dc73f8e78ae82f37465c21c261.gz
Diffstat (limited to '_test')
-rw-r--r--_test/cases/inc/common_obfuscate.test.php1
-rw-r--r--_test/cases/inc/parser/.htaccess3
-rw-r--r--_test/cases/inc/parser/lexer.group.php34
-rw-r--r--_test/cases/inc/parser/lexer.test.php610
-rw-r--r--_test/cases/inc/parser/parser.group.php46
-rw-r--r--_test/cases/inc/parser/parser.test.php46
-rw-r--r--_test/cases/inc/parser/parser_eol.test.php127
-rw-r--r--_test/cases/inc/parser/parser_footnote.test.php384
-rw-r--r--_test/cases/inc/parser/parser_formatting.test.php271
-rw-r--r--_test/cases/inc/parser/parser_headers.test.php236
-rw-r--r--_test/cases/inc/parser/parser_i18n.test.php180
-rw-r--r--_test/cases/inc/parser/parser_links.test.php522
-rw-r--r--_test/cases/inc/parser/parser_lists.test.php422
-rw-r--r--_test/cases/inc/parser/parser_preformatted.test.php244
-rw-r--r--_test/cases/inc/parser/parser_quote.test.php114
-rw-r--r--_test/cases/inc/parser/parser_replacements.test.php377
-rw-r--r--_test/cases/inc/parser/parser_table.test.php558
-rw-r--r--_test/cases/inc/parser/parser_tocsections.test.php516
-rw-r--r--_test/cases/inc/parser/parser_unformatted.test.php49
-rwxr-xr-x_test/runtests.php1
20 files changed, 4740 insertions, 1 deletions
diff --git a/_test/cases/inc/common_obfuscate.test.php b/_test/cases/inc/common_obfuscate.test.php
index 60042ac19..3e1e1a72f 100644
--- a/_test/cases/inc/common_obfuscate.test.php
+++ b/_test/cases/inc/common_obfuscate.test.php
@@ -13,7 +13,6 @@ class common_obfuscate_test extends UnitTestCase {
function test_hex(){
global $conf;
$conf['mailguard'] = 'hex';
-print obfuscate('andi@foobar.com');
$this->assertEqual(obfuscate('jon-doe@example.com'),
'&#x6a;&#x6f;&#x6e;&#x2d;&#x64;&#x6f;&#x65;&#x40;&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x63;&#x6f;&#x6d;');
}
diff --git a/_test/cases/inc/parser/.htaccess b/_test/cases/inc/parser/.htaccess
new file mode 100644
index 000000000..38539a1a2
--- /dev/null
+++ b/_test/cases/inc/parser/.htaccess
@@ -0,0 +1,3 @@
+## no access to the inc directory
+order allow,deny
+allow from all
diff --git a/_test/cases/inc/parser/lexer.group.php b/_test/cases/inc/parser/lexer.group.php
new file mode 100644
index 000000000..623cf6af5
--- /dev/null
+++ b/_test/cases/inc/parser/lexer.group.php
@@ -0,0 +1,34 @@
+<?php
+/**
+* @version $Id: lexer.group.php,v 1.2 2005/03/25 21:00:22 harryf Exp $
+* @package JPSpan
+* @subpackage Tests
+*/
+
+/**
+* Init
+*/
+require_once('./testconfig.php');
+
+/**
+* @package JPSpan
+* @subpackage Tests
+*/
+class LexerGroupTest extends GroupTest {
+
+ function LexerGroupTest() {
+ $this->GroupTest('LexerGroupTest');
+ $this->addTestFile('lexer.test.php');
+ }
+
+}
+
+/**
+* Conditional test runner
+*/
+if (!defined('TEST_RUNNING')) {
+ define('TEST_RUNNING', true);
+ $test = &new LexerGroupTest();
+ $test->run(new HtmlReporter());
+}
+?>
diff --git a/_test/cases/inc/parser/lexer.test.php b/_test/cases/inc/parser/lexer.test.php
new file mode 100644
index 000000000..8c7eeae71
--- /dev/null
+++ b/_test/cases/inc/parser/lexer.test.php
@@ -0,0 +1,610 @@
+<?php
+/**
+* @version $Id: lexer.test.php,v 1.2 2005/03/25 21:00:22 harryf Exp $
+* @package Doku
+* @subpackage Tests
+*/
+
+/**
+* Includes
+*/
+require_once DOKU_INC . 'inc/parser/lexer.php';
+
+/**
+* @package Doku
+* @subpackage Tests
+*/
+class TestOfLexerParallelRegex extends UnitTestCase {
+ function TestOfLexerParallelRegex() {
+ $this->UnitTestCase();
+ }
+ function testNoPatterns() {
+ $regex = &new Doku_LexerParallelRegex(false);
+ $this->assertFalse($regex->match("Hello", $match));
+ $this->assertEqual($match, "");
+ }
+ function testNoSubject() {
+ $regex = &new Doku_LexerParallelRegex(false);
+ $regex->addPattern(".*");
+ $this->assertTrue($regex->match("", $match));
+ $this->assertEqual($match, "");
+ }
+ function testMatchAll() {
+ $regex = &new Doku_LexerParallelRegex(false);
+ $regex->addPattern(".*");
+ $this->assertTrue($regex->match("Hello", $match));
+ $this->assertEqual($match, "Hello");
+ }
+ function testCaseSensitive() {
+ $regex = &new Doku_LexerParallelRegex(true);
+ $regex->addPattern("abc");
+ $this->assertTrue($regex->match("abcdef", $match));
+ $this->assertEqual($match, "abc");
+ $this->assertTrue($regex->match("AAABCabcdef", $match));
+ $this->assertEqual($match, "abc");
+ }
+ function testCaseInsensitive() {
+ $regex = &new Doku_LexerParallelRegex(false);
+ $regex->addPattern("abc");
+ $this->assertTrue($regex->match("abcdef", $match));
+ $this->assertEqual($match, "abc");
+ $this->assertTrue($regex->match("AAABCabcdef", $match));
+ $this->assertEqual($match, "ABC");
+ }
+ function testMatchMultiple() {
+ $regex = &new Doku_LexerParallelRegex(true);
+ $regex->addPattern("abc");
+ $regex->addPattern("ABC");
+ $this->assertTrue($regex->match("abcdef", $match));
+ $this->assertEqual($match, "abc");
+ $this->assertTrue($regex->match("AAABCabcdef", $match));
+ $this->assertEqual($match, "ABC");
+ $this->assertFalse($regex->match("Hello", $match));
+ }
+ function testPatternLabels() {
+ $regex = &new Doku_LexerParallelRegex(false);
+ $regex->addPattern("abc", "letter");
+ $regex->addPattern("123", "number");
+ $this->assertIdentical($regex->match("abcdef", $match), "letter");
+ $this->assertEqual($match, "abc");
+ $this->assertIdentical($regex->match("0123456789", $match), "number");
+ $this->assertEqual($match, "123");
+ }
+ function testMatchMultipleWithLookaheadNot() {
+ $regex = &new Doku_LexerParallelRegex(true);
+ $regex->addPattern("abc");
+ $regex->addPattern("ABC");
+ $regex->addPattern("a(?!\n).{1}");
+ $this->assertTrue($regex->match("abcdef", $match));
+ $this->assertEqual($match, "abc");
+ $this->assertTrue($regex->match("AAABCabcdef", $match));
+ $this->assertEqual($match, "ABC");
+ $this->assertTrue($regex->match("a\nab", $match));
+ $this->assertEqual($match, "ab");
+ $this->assertFalse($regex->match("Hello", $match));
+ }
+ function testMatchSetOptionCaseless() {
+ $regex = &new Doku_LexerParallelRegex(true);
+ $regex->addPattern("a(?i)b(?i)c");
+ $this->assertTrue($regex->match("aBc", $match));
+ $this->assertEqual($match, "aBc");
+ }
+ function testMatchSetOptionUngreedy() {
+ $regex = &new Doku_LexerParallelRegex(true);
+ $regex->addPattern("(?U)\w+");
+ $this->assertTrue($regex->match("aaaaaa", $match));
+ $this->assertEqual($match, "a");
+ }
+ function testMatchLookaheadEqual() {
+ $regex = &new Doku_LexerParallelRegex(true);
+ $regex->addPattern("\w(?=c)");
+ $this->assertTrue($regex->match("xbyczd", $match));
+ $this->assertEqual($match, "y");
+ }
+ function testMatchLookaheadNot() {
+ $regex = &new Doku_LexerParallelRegex(true);
+ $regex->addPattern("\w(?!b|c)");
+ $this->assertTrue($regex->match("xbyczd", $match));
+ $this->assertEqual($match, "b");
+ }
+ function testMatchLookbehindEqual() {
+ $regex = &new Doku_LexerParallelRegex(true);
+ $regex->addPattern("(?<=c)\w");
+ $this->assertTrue($regex->match("xbyczd", $match));
+ $this->assertEqual($match, "z");
+ }
+ function testMatchLookbehindNot() {
+ $regex = &new Doku_LexerParallelRegex(true);
+ $regex->addPattern("(?<!\A|x|b)\w");
+ $this->assertTrue($regex->match("xbyczd", $match));
+ $this->assertEqual($match, "c");
+ }
+}
+
+
+class TestOfLexerStateStack extends UnitTestCase {
+ function TestOfLexerStateStack() {
+ $this->UnitTestCase();
+ }
+ function testStartState() {
+ $stack = &new Doku_LexerStateStack("one");
+ $this->assertEqual($stack->getCurrent(), "one");
+ }
+ function testExhaustion() {
+ $stack = &new Doku_LexerStateStack("one");
+ $this->assertFalse($stack->leave());
+ }
+ function testStateMoves() {
+ $stack = &new Doku_LexerStateStack("one");
+ $stack->enter("two");
+ $this->assertEqual($stack->getCurrent(), "two");
+ $stack->enter("three");
+ $this->assertEqual($stack->getCurrent(), "three");
+ $this->assertTrue($stack->leave());
+ $this->assertEqual($stack->getCurrent(), "two");
+ $stack->enter("third");
+ $this->assertEqual($stack->getCurrent(), "third");
+ $this->assertTrue($stack->leave());
+ $this->assertTrue($stack->leave());
+ $this->assertEqual($stack->getCurrent(), "one");
+ }
+}
+
+class TestParser {
+ function TestParser() {
+ }
+ function accept() {
+ }
+ function a() {
+ }
+ function b() {
+ }
+}
+Mock::generate('TestParser');
+
+class TestOfLexer extends UnitTestCase {
+ function TestOfLexer() {
+ $this->UnitTestCase();
+ }
+ function testNoPatterns() {
+ $handler = &new MockTestParser($this);
+ $handler->expectNever("accept");
+ $handler->setReturnValue("accept", true);
+ $lexer = &new Doku_Lexer($handler);
+ $this->assertFalse($lexer->parse("abcdef"));
+ }
+ function testEmptyPage() {
+ $handler = &new MockTestParser($this);
+ $handler->expectNever("accept");
+ $handler->setReturnValue("accept", true);
+ $handler->expectNever("accept");
+ $handler->setReturnValue("accept", true);
+ $lexer = &new Doku_Lexer($handler);
+ $lexer->addPattern("a+");
+ $this->assertTrue($lexer->parse(""));
+ }
+ function testSinglePattern() {
+ $handler = &new MockTestParser($this);
+ $handler->expectArgumentsAt(0, "accept", array("aaa", DOKU_LEXER_MATCHED, 0));
+ $handler->expectArgumentsAt(1, "accept", array("x", DOKU_LEXER_UNMATCHED, 3));
+ $handler->expectArgumentsAt(2, "accept", array("a", DOKU_LEXER_MATCHED, 4));
+ $handler->expectArgumentsAt(3, "accept", array("yyy", DOKU_LEXER_UNMATCHED, 5));
+ $handler->expectArgumentsAt(4, "accept", array("a", DOKU_LEXER_MATCHED, 8));
+ $handler->expectArgumentsAt(5, "accept", array("x", DOKU_LEXER_UNMATCHED, 9));
+ $handler->expectArgumentsAt(6, "accept", array("aaa", DOKU_LEXER_MATCHED, 10));
+ $handler->expectArgumentsAt(7, "accept", array("z", DOKU_LEXER_UNMATCHED, 13));
+ $handler->expectCallCount("accept", 8);
+ $handler->setReturnValue("accept", true);
+ $lexer = &new Doku_Lexer($handler);
+ $lexer->addPattern("a+");
+ $this->assertTrue($lexer->parse("aaaxayyyaxaaaz"));
+ $handler->tally();
+ }
+ function testMultiplePattern() {
+ $handler = &new MockTestParser($this);
+ $target = array("a", "b", "a", "bb", "x", "b", "a", "xxxxxx", "a", "x");
+ $positions = array(0,1,2,3,5,6,7,8,14,15);
+ for ($i = 0; $i < count($target); $i++) {
+ $handler->expectArgumentsAt($i, "accept", array($target[$i], '*', $positions[$i]));
+ }
+ $handler->expectCallCount("accept", count($target));
+ $handler->setReturnValue("accept", true);
+ $lexer = &new Doku_Lexer($handler);
+ $lexer->addPattern("a+");
+ $lexer->addPattern("b+");
+ $this->assertTrue($lexer->parse("ababbxbaxxxxxxax"));
+ $handler->tally();
+ }
+}
+
+class TestOfLexerModes extends UnitTestCase {
+ function TestOfLexerModes() {
+ $this->UnitTestCase();
+ }
+ function testIsolatedPattern() {
+ $handler = &new MockTestParser($this);
+ $handler->expectArgumentsAt(0, "a", array("a", DOKU_LEXER_MATCHED,0));
+ $handler->expectArgumentsAt(1, "a", array("b", DOKU_LEXER_UNMATCHED,1));
+ $handler->expectArgumentsAt(2, "a", array("aa", DOKU_LEXER_MATCHED,2));
+ $handler->expectArgumentsAt(3, "a", array("bxb", DOKU_LEXER_UNMATCHED,4));
+ $handler->expectArgumentsAt(4, "a", array("aaa", DOKU_LEXER_MATCHED,7));
+ $handler->expectArgumentsAt(5, "a", array("x", DOKU_LEXER_UNMATCHED,10));
+ $handler->expectArgumentsAt(6, "a", array("aaaa", DOKU_LEXER_MATCHED,11));
+ $handler->expectArgumentsAt(7, "a", array("x", DOKU_LEXER_UNMATCHED,15));
+ $handler->expectCallCount("a", 8);
+ $handler->setReturnValue("a", true);
+ $lexer = &new Doku_Lexer($handler, "a");
+ $lexer->addPattern("a+", "a");
+ $lexer->addPattern("b+", "b");
+ $this->assertTrue($lexer->parse("abaabxbaaaxaaaax"));
+ $handler->tally();
+ }
+ function testModeChange() {
+ $handler = &new MockTestParser($this);
+ $handler->expectArgumentsAt(0, "a", array("a", DOKU_LEXER_MATCHED,0));
+ $handler->expectArgumentsAt(1, "a", array("b", DOKU_LEXER_UNMATCHED,1));
+ $handler->expectArgumentsAt(2, "a", array("aa", DOKU_LEXER_MATCHED,2));
+ $handler->expectArgumentsAt(3, "a", array("b", DOKU_LEXER_UNMATCHED,4));
+ $handler->expectArgumentsAt(4, "a", array("aaa", DOKU_LEXER_MATCHED,5));
+ $handler->expectArgumentsAt(0, "b", array(":", DOKU_LEXER_ENTER,8));
+ $handler->expectArgumentsAt(1, "b", array("a", DOKU_LEXER_UNMATCHED,9));
+ $handler->expectArgumentsAt(2, "b", array("b", DOKU_LEXER_MATCHED, 10));
+ $handler->expectArgumentsAt(3, "b", array("a", DOKU_LEXER_UNMATCHED,11));
+ $handler->expectArgumentsAt(4, "b", array("bb", DOKU_LEXER_MATCHED,12));
+ $handler->expectArgumentsAt(5, "b", array("a", DOKU_LEXER_UNMATCHED,14));
+ $handler->expectArgumentsAt(6, "b", array("bbb", DOKU_LEXER_MATCHED,15));
+ $handler->expectArgumentsAt(7, "b", array("a", DOKU_LEXER_UNMATCHED,18));
+ $handler->expectCallCount("a", 5);
+ $handler->expectCallCount("b", 8);
+ $handler->setReturnValue("a", true);
+ $handler->setReturnValue("b", true);
+ $lexer = &new Doku_Lexer($handler, "a");
+ $lexer->addPattern("a+", "a");
+ $lexer->addEntryPattern(":", "a", "b");
+ $lexer->addPattern("b+", "b");
+ $this->assertTrue($lexer->parse("abaabaaa:ababbabbba"));
+ $handler->tally();
+ }
+ function testNesting() {
+ $handler = &new MockTestParser($this);
+ $handler->setReturnValue("a", true);
+ $handler->setReturnValue("b", true);
+ $handler->expectArgumentsAt(0, "a", array("aa", DOKU_LEXER_MATCHED,0));
+ $handler->expectArgumentsAt(1, "a", array("b", DOKU_LEXER_UNMATCHED,2));
+ $handler->expectArgumentsAt(2, "a", array("aa", DOKU_LEXER_MATCHED,3));
+ $handler->expectArgumentsAt(3, "a", array("b", DOKU_LEXER_UNMATCHED,5));
+ $handler->expectArgumentsAt(0, "b", array("(", DOKU_LEXER_ENTER,6));
+ $handler->expectArgumentsAt(1, "b", array("bb", DOKU_LEXER_MATCHED,7));
+ $handler->expectArgumentsAt(2, "b", array("a", DOKU_LEXER_UNMATCHED,9));
+ $handler->expectArgumentsAt(3, "b", array("bb", DOKU_LEXER_MATCHED,10));
+ $handler->expectArgumentsAt(4, "b", array(")", DOKU_LEXER_EXIT,12));
+ $handler->expectArgumentsAt(4, "a", array("aa", DOKU_LEXER_MATCHED,13));
+ $handler->expectArgumentsAt(5, "a", array("b", DOKU_LEXER_UNMATCHED,15));
+ $handler->expectCallCount("a", 6);
+ $handler->expectCallCount("b", 5);
+ $lexer = &new Doku_Lexer($handler, "a");
+ $lexer->addPattern("a+", "a");
+ $lexer->addEntryPattern("(", "a", "b");
+ $lexer->addPattern("b+", "b");
+ $lexer->addExitPattern(")", "b");
+ $this->assertTrue($lexer->parse("aabaab(bbabb)aab"));
+ $handler->tally();
+ }
+ function testSingular() {
+ $handler = &new MockTestParser($this);
+ $handler->setReturnValue("a", true);
+ $handler->setReturnValue("b", true);
+ $handler->expectArgumentsAt(0, "a", array("aa", DOKU_LEXER_MATCHED,0));
+ $handler->expectArgumentsAt(1, "a", array("aa", DOKU_LEXER_MATCHED,3));
+ $handler->expectArgumentsAt(2, "a", array("xx", DOKU_LEXER_UNMATCHED,5));
+ $handler->expectArgumentsAt(3, "a", array("xx", DOKU_LEXER_UNMATCHED,10));
+ $handler->expectArgumentsAt(0, "b", array("b", DOKU_LEXER_SPECIAL,2));
+ $handler->expectArgumentsAt(1, "b", array("bbb", DOKU_LEXER_SPECIAL,7));
+ $handler->expectCallCount("a", 4);
+ $handler->expectCallCount("b", 2);
+ $lexer = &new Doku_Lexer($handler, "a");
+ $lexer->addPattern("a+", "a");
+ $lexer->addSpecialPattern("b+", "a", "b");
+ $this->assertTrue($lexer->parse("aabaaxxbbbxx"));
+ $handler->tally();
+ }
+ function testUnwindTooFar() {
+ $handler = &new MockTestParser($this);
+ $handler->setReturnValue("a", true);
+ $handler->expectArgumentsAt(0, "a", array("aa", DOKU_LEXER_MATCHED,0));
+ $handler->expectArgumentsAt(1, "a", array(")", DOKU_LEXER_EXIT,2));
+ $handler->expectCallCount("a", 2);
+ $lexer = &new Doku_Lexer($handler, "a");
+ $lexer->addPattern("a+", "a");
+ $lexer->addExitPattern(")", "a");
+ $this->assertFalse($lexer->parse("aa)aa"));
+ $handler->tally();
+ }
+}
+
+class TestOfLexerHandlers extends UnitTestCase {
+ function TestOfLexerHandlers() {
+ $this->UnitTestCase();
+ }
+ function testModeMapping() {
+ $handler = &new MockTestParser($this);
+ $handler->setReturnValue("a", true);
+ $handler->expectArgumentsAt(0, "a", array("aa", DOKU_LEXER_MATCHED,0));
+ $handler->expectArgumentsAt(1, "a", array("(", DOKU_LEXER_ENTER,2));
+ $handler->expectArgumentsAt(2, "a", array("bb", DOKU_LEXER_MATCHED,3));
+ $handler->expectArgumentsAt(3, "a", array("a", DOKU_LEXER_UNMATCHED,5));
+ $handler->expectArgumentsAt(4, "a", array("bb", DOKU_LEXER_MATCHED,6));
+ $handler->expectArgumentsAt(5, "a", array(")", DOKU_LEXER_EXIT,8));
+ $handler->expectArgumentsAt(6, "a", array("b", DOKU_LEXER_UNMATCHED,9));
+ $handler->expectCallCount("a", 7);
+ $lexer = &new Doku_Lexer($handler, "mode_a");
+ $lexer->addPattern("a+", "mode_a");
+ $lexer->addEntryPattern("(", "mode_a", "mode_b");
+ $lexer->addPattern("b+", "mode_b");
+ $lexer->addExitPattern(")", "mode_b");
+ $lexer->mapHandler("mode_a", "a");
+ $lexer->mapHandler("mode_b", "a");
+ $this->assertTrue($lexer->parse("aa(bbabb)b"));
+ $handler->tally();
+ }
+}
+
+class TestParserByteIndex {
+
+ function TestParserByteIndex() {}
+
+ function ignore() {}
+
+ function catch() {}
+}
+
+Mock::generate('TestParserByteIndex');
+
+class TestOfLexerByteIndices extends UnitTestCase {
+
+ function TestOfLexerByteIndices() {
+ $this->UnitTestCase();
+ }
+
+ function testIndex() {
+ $doc = "aaa<file>bcd</file>eee";
+
+ $handler = &new MockTestParserByteIndex($this);
+ $handler->setReturnValue("ignore", true);
+ $handler->setReturnValue("catch", true);
+
+ $handler->expectArgumentsAt(
+ 0,
+ "catch",
+ array("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))
+ );
+ $handler->expectArgumentsAt(
+ 1,
+ "catch",
+ array("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))
+ );
+ $handler->expectArgumentsAt(
+ 2,
+ "catch",
+ array("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))
+ );
+ $handler->expectArgumentsAt(
+ 3,
+ "catch",
+ array("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))
+ );
+ $handler->expectArgumentsAt(
+ 4,
+ "catch",
+ array("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))
+ );
+ $handler->expectCallCount("catch", 5);
+
+ $lexer = &new Doku_Lexer($handler, "ignore");
+ $lexer->addEntryPattern("<file>", "ignore", "catch");
+ $lexer->addExitPattern("</file>", "catch");
+ $lexer->addSpecialPattern('b','catch','special');
+ $lexer->mapHandler('special','catch');
+ $lexer->addPattern('c','catch');
+
+ $this->assertTrue($lexer->parse($doc));
+ $handler->tally();
+ }
+
+ function testIndexLookaheadEqual() {
+ $doc = "aaa<file>bcd</file>eee";
+
+ $handler = &new MockTestParserByteIndex($this);
+ $handler->setReturnValue("ignore", true);
+ $handler->setReturnValue("catch", true);
+
+ $handler->expectArgumentsAt(
+ 0,
+ "catch",
+ array("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))
+ );
+ $handler->expectArgumentsAt(
+ 1,
+ "catch",
+ array("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))
+ );
+ $handler->expectArgumentsAt(
+ 2,
+ "catch",
+ array("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))
+ );
+ $handler->expectArgumentsAt(
+ 3,
+ "catch",
+ array("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))
+ );
+ $handler->expectArgumentsAt(
+ 4,
+ "catch",
+ array("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))
+ );
+ $handler->expectCallCount("catch", 5);
+
+ $lexer = &new Doku_Lexer($handler, "ignore");
+ $lexer->addEntryPattern('<file>(?=.*\x3C/file\x3E)', "ignore", "catch");
+ $lexer->addExitPattern("</file>", "catch");
+ $lexer->addSpecialPattern('b','catch','special');
+ $lexer->mapHandler('special','catch');
+ $lexer->addPattern('c','catch');
+
+ $this->assertTrue($lexer->parse($doc));
+ $handler->tally();
+ }
+
+ function testIndexLookaheadNotEqual() {
+ $doc = "aaa<file>bcd</file>eee";
+
+ $handler = &new MockTestParserByteIndex($this);
+ $handler->setReturnValue("ignore", true);
+ $handler->setReturnValue("catch", true);
+
+ $handler->expectArgumentsAt(
+ 0,
+ "catch",
+ array("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))
+ );
+ $handler->expectArgumentsAt(
+ 1,
+ "catch",
+ array("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))
+ );
+ $handler->expectArgumentsAt(
+ 2,
+ "catch",
+ array("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))
+ );
+ $handler->expectArgumentsAt(
+ 3,
+ "catch",
+ array("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))
+ );
+ $handler->expectArgumentsAt(
+ 4,
+ "catch",
+ array("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))
+ );
+ $handler->expectCallCount("catch", 5);
+
+ $lexer = &new Doku_Lexer($handler, "ignore");
+ $lexer->addEntryPattern('<file>(?!foo)', "ignore", "catch");
+ $lexer->addExitPattern("</file>", "catch");
+ $lexer->addSpecialPattern('b','catch','special');
+ $lexer->mapHandler('special','catch');
+ $lexer->addPattern('c','catch');
+
+ $this->assertTrue($lexer->parse($doc));
+ $handler->tally();
+ }
+
+ function testIndexLookbehindEqual() {
+ $doc = "aaa<file>bcd</file>eee";
+
+ $handler = &new MockTestParserByteIndex($this);
+ $handler->setReturnValue("ignore", true);
+ $handler->setReturnValue("catch", true);
+
+ $handler->expectArgumentsAt(
+ 0,
+ "catch",
+ array("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))
+ );
+ $handler->expectArgumentsAt(
+ 1,
+ "catch",
+ array("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))
+ );
+ $handler->expectArgumentsAt(
+ 2,
+ "catch",
+ array("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))
+ );
+ $handler->expectArgumentsAt(
+ 3,
+ "catch",
+ array("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))
+ );
+ $handler->expectArgumentsAt(
+ 4,
+ "catch",
+ array("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))
+ );
+ $handler->expectCallCount("catch", 5);
+
+ $lexer = &new Doku_Lexer($handler, "ignore");
+ $lexer->addEntryPattern('<file>', "ignore", "catch");
+ $lexer->addExitPattern("(?<=d)</file>", "catch");
+ $lexer->addSpecialPattern('b','catch','special');
+ $lexer->mapHandler('special','catch');
+ $lexer->addPattern('c','catch');
+
+ $this->assertTrue($lexer->parse($doc));
+ $handler->tally();
+ }
+
+ function testIndexLookbehindNotEqual() {
+ $doc = "aaa<file>bcd</file>eee";
+
+ $handler = &new MockTestParserByteIndex($this);
+ $handler->setReturnValue("ignore", true);
+ $handler->setReturnValue("catch", true);
+
+ $handler->expectArgumentsAt(
+ 0,
+ "catch",
+ array("<file>", DOKU_LEXER_ENTER, strpos($doc,'<file>'))
+ );
+ $handler->expectArgumentsAt(
+ 1,
+ "catch",
+ array("b", DOKU_LEXER_SPECIAL, strpos($doc,'b'))
+ );
+ $handler->expectArgumentsAt(
+ 2,
+ "catch",
+ array("c", DOKU_LEXER_MATCHED, strpos($doc,'c'))
+ );
+ $handler->expectArgumentsAt(
+ 3,
+ "catch",
+ array("d", DOKU_LEXER_UNMATCHED, strpos($doc,'d'))
+ );
+ $handler->expectArgumentsAt(
+ 4,
+ "catch",
+ array("</file>", DOKU_LEXER_EXIT, strpos($doc,'</file>'))
+ );
+ $handler->expectCallCount("catch", 5);
+
+ $lexer = &new Doku_Lexer($handler, "ignore");
+ $lexer->addEntryPattern('<file>', "ignore", "catch");
+ $lexer->addExitPattern("(?<!c)</file>", "catch");
+ $lexer->addSpecialPattern('b','catch','special');
+ $lexer->mapHandler('special','catch');
+ $lexer->addPattern('c','catch');
+
+ $this->assertTrue($lexer->parse($doc));
+ $handler->tally();
+ }
+
+}
+
+/**
+* Conditional test runner
+*/
+if (!defined('TEST_RUNNING')) {
+ define('TEST_RUNNING', true);
+ $test = & new GroupTest('LexerTests');
+ $test->addTestCase(new TestOfLexerParallelRegex());
+ $test->addTestCase(new TestOfLexerStateStack());
+ $test->addTestCase(new TestOfLexer());
+ $test->addTestCase(new TestOfLexerModes());
+ $test->addTestCase(new TestOfLexerHandlers());
+ $test->addTestCase(new TestOfLexerByteIndices());
+ $test->run(new HtmlReporter());
+}
+?>
diff --git a/_test/cases/inc/parser/parser.group.php b/_test/cases/inc/parser/parser.group.php
new file mode 100644
index 000000000..ca9084127
--- /dev/null
+++ b/_test/cases/inc/parser/parser.group.php
@@ -0,0 +1,46 @@
+<?php
+/**
+* @version $Id: parser.group.php,v 1.3 2005/03/30 13:42:10 harryf Exp $
+* @package Dokuwiki
+* @subpackage Tests
+*/
+
+/**
+* Init
+*/
+require_once('./testconfig.php');
+
+/**
+* @package Dokuwiki
+* @subpackage Tests
+*/
+class ParserGroupTest extends GroupTest {
+
+ function ParserGroupTest() {
+ $this->GroupTest('ParserGroupTest');
+ $this->addTestFile('parser_eol.test.php');
+ $this->addTestFile('parser_footnote.test.php');
+ $this->addTestFile('parser_formatting.test.php');
+ $this->addTestFile('parser_headers.test.php');
+ $this->addTestFile('parser_i18n.test.php');
+ $this->addTestFile('parser_links.test.php');
+ $this->addTestFile('parser_lists.test.php');
+ $this->addTestFile('parser_preformatted.test.php');
+ $this->addTestFile('parser_quote.test.php');
+ $this->addTestFile('parser_replacements.test.php');
+ $this->addTestFile('parser_table.test.php');
+ $this->addTestFile('parser_tocsections.test.php');
+ $this->addTestFile('parser_unformatted.test.php');
+ }
+
+}
+
+/**
+* Conditional test runner
+*/
+if (!defined('TEST_RUNNING')) {
+ define('TEST_RUNNING', true);
+ $test = &new ParserGroupTest();
+ $test->run(new HtmlReporter());
+}
+?>
diff --git a/_test/cases/inc/parser/parser.test.php b/_test/cases/inc/parser/parser.test.php
new file mode 100644
index 000000000..c760c127a
--- /dev/null
+++ b/_test/cases/inc/parser/parser.test.php
@@ -0,0 +1,46 @@
+<?php
+/**
+* @version $Id: parser.test.php,v 1.2 2005/03/25 21:00:22 harryf Exp $
+* @package Doku
+* @subpackage Tests
+*/
+
+/**
+* Includes
+*/
+require_once DOKU_INC . 'inc/parser/parser.php';
+require_once DOKU_INC . 'inc/parser/handler.php';
+//require_once DOKU . 'parser/renderer.php';
+
+//Mock::generate('Doku_Renderer');
+
+/**
+* @package Doku
+* @subpackage Tests
+*/
+class TestOfDoku_Parser extends UnitTestCase {
+
+ var $P;
+ var $H;
+
+ function TestOfDoku_Parser() {
+ $this->UnitTestCase('TestOfDoku_Parser');
+ }
+
+ function setup() {
+ $this->P = & new Doku_Parser();
+ $this->H = & new Doku_Handler();
+ $this->P->Handler = & $this->H;
+ }
+
+ function tearDown() {
+ unset($this->P);
+ unset($this->H);
+ }
+}
+
+function stripByteIndex($call) {
+ unset($call[2]);
+ return $call;
+}
+
diff --git a/_test/cases/inc/parser/parser_eol.test.php b/_test/cases/inc/parser/parser_eol.test.php
new file mode 100644
index 000000000..44ade3dda
--- /dev/null
+++ b/_test/cases/inc/parser/parser_eol.test.php
@@ -0,0 +1,127 @@
+<?php
+require_once 'parser.test.php';
+
+class TestOfDoku_Parser_Eol extends TestOfDoku_Parser {
+
+ function TestOfDoku_Parser_Eol() {
+ $this->UnitTestCase('TestOfDoku_Parser_Eol');
+ }
+
+ function testEol() {
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse("Foo\nBar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("Foo")),
+ array('p_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);
+ }
+
+ function testEolMultiple() {
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse("Foo\n\nbar\nFoo");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("Foo")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('cdata',array("bar")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('cdata',array("Foo")),
+ 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);
+ }
+
+ function testWinEol() {
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse("Foo\r\nBar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("Foo")),
+ array('p_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);
+ }
+
+ function testLinebreak() {
+ $this->P->addMode('linebreak',new Doku_Parser_Mode_Linebreak());
+ $this->P->parse('Foo\\\\ Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nFoo")),
+ array('linebreak',array()),
+ array('cdata',array("Bar\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testLinebreakPlusEol() {
+ $this->P->addMode('linebreak',new Doku_Parser_Mode_Linebreak());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse('Foo\\\\'."\n\n".'Bar');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("Foo")),
+ array('linebreak',array()),
+ array('p_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);
+ }
+
+ function testLinebreakInvalid() {
+ $this->P->addMode('linebreak',new Doku_Parser_Mode_Linebreak());
+ $this->P->parse('Foo\\\\Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo\\\\Bar'."\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_Eol();
+ $test->run(new HtmlReporter());
+}
diff --git a/_test/cases/inc/parser/parser_footnote.test.php b/_test/cases/inc/parser/parser_footnote.test.php
new file mode 100644
index 000000000..2bcfb3472
--- /dev/null
+++ b/_test/cases/inc/parser/parser_footnote.test.php
@@ -0,0 +1,384 @@
+<?php
+require_once 'parser.test.php';
+
+class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
+
+ function TestOfDoku_Parser_Footnote() {
+ $this->UnitTestCase('TestOfDoku_Parser_Footnote');
+ }
+
+ function setup() {
+ parent::setup();
+ $this->P->addMode('footnote',new Doku_Parser_Mode_Footnote());
+ }
+
+ function testFootnote() {
+ $this->P->parse('Foo (( testing )) Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('footnote_open',array()),
+ array('cdata',array(' testing ')),
+ array('footnote_close',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testNotAFootnote() {
+ $this->P->parse("Foo (( testing\n Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nFoo (( testing\n Bar\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testFootnoteLinefeed() {
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse("Foo (( testing\ntesting )) Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array('Foo ')),
+ array('footnote_open',array()),
+ array('cdata',array(" testing\ntesting ")),
+ array('footnote_close',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);
+ }
+
+ function testFootnoteNested() {
+ $this->P->parse('Foo (( x((y))z )) Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('footnote_open',array()),
+ array('cdata',array(' x')),
+ array('footnote_open',array()),
+ array('cdata',array('y')),
+ array('footnote_close',array()),
+ array('cdata',array('z ')),
+ array('footnote_close',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testFootnoteEol() {
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse("Foo \nX(( test\ning ))Y\n Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array('Foo ')),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('cdata',array('X')),
+ array('footnote_open',array()),
+ array('cdata',array(" test\ning ")),
+ array('footnote_close',array()),
+ array('cdata',array('Y')),
+ array('p_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);
+ }
+
+ function testFootnoteStrong() {
+ $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
+ $this->P->parse('Foo (( **testing** )) Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('footnote_open',array()),
+ array('cdata',array(' ')),
+ array('strong_open',array()),
+ array('cdata',array('testing')),
+ array('strong_close',array()),
+ array('cdata',array(' ')),
+ array('footnote_close',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testFootnoteHr() {
+ $this->P->addMode('hr',new Doku_Parser_Mode_HR());
+ $this->P->parse("Foo (( \n ---- \n )) Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('footnote_open',array()),
+ array('cdata',array(' ')),
+ array('hr',array()),
+ array('p_open',array()),
+ array('cdata',array(' ')),
+ array('p_close',array()),
+ array('footnote_close',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testFootnoteCode() {
+ $this->P->addMode('code',new Doku_Parser_Mode_Code());
+ $this->P->parse("Foo (( <code>Test</code> )) Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('footnote_open',array()),
+ array('cdata',array(' ')),
+ array('code',array('Test',NULL)),
+ array('p_open',array()),
+ array('cdata',array(' ')),
+ array('p_close',array()),
+ array('footnote_close',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testFootnotePreformatted() {
+ $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
+ $this->P->parse("Foo (( \n Test\n )) Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('footnote_open',array()),
+ array('cdata',array(' ')),
+ array('preformatted',array('Test')),
+ array('p_open',array()),
+ array('cdata',array(' ')),
+ array('p_close',array()),
+ array('footnote_close',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testFootnotePreformattedEol() {
+ $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse("Foo (( \n Test\n )) Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array('Foo ')),
+ array('footnote_open',array()),
+ array('cdata',array(' ')),
+ array('preformatted',array('Test')),
+ array('p_open',array()),
+ array('cdata',array(' ')),
+ array('p_close',array()),
+ array('footnote_close',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);
+ }
+
+ function testFootnoteUnformatted() {
+ $this->P->addMode('unformatted',new Doku_Parser_Mode_Unformatted());
+ $this->P->parse("Foo (( <nowiki>Test</nowiki> )) Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('footnote_open',array()),
+ array('cdata',array(' ')),
+ array('unformatted',array('Test')),
+ array('cdata',array(' ')),
+ array('footnote_close',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testFootnoteNotHeader() {
+ $this->P->addMode('unformatted',new Doku_Parser_Mode_Unformatted());
+ $this->P->parse("Foo (( \n====Test====\n )) Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('footnote_open',array()),
+ array('cdata',array(" \n====Test====\n ")),
+ array('footnote_close',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testFootnoteTable() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->parse("Foo ((
+| Row 0 Col 1 | Row 0 Col 2 | Row 0 Col 3 |
+| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+ )) Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('footnote_open',array()),
+ array('cdata',array(' ')),
+ array('table_open',array(3,2)),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array(' ')),
+ array('p_close',array()),
+ array('footnote_close',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testFootnoteList() {
+ $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock());
+ $this->P->parse("Foo ((
+ *A
+ * B
+ * C
+ )) Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('footnote_open',array()),
+ array('cdata',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(' ')),
+ array('p_close',array()),
+ array('footnote_close',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testFootnoteQuote() {
+ $this->P->addMode('quote',new Doku_Parser_Mode_Quote());
+ $this->P->parse("Foo ((
+> def
+>>ghi
+ )) Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('footnote_open',array()),
+ array('cdata',array(' ')),
+ array('quote_open',array()),
+ array('cdata',array(" def")),
+ array('quote_open',array()),
+ array('cdata',array("ghi")),
+ array('quote_close',array()),
+ array('quote_close',array()),
+ array('p_open',array()),
+ array('cdata',array(' ')),
+ array('p_close',array()),
+ array('footnote_close',array()),
+ array('cdata',array(' Bar'."\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_Footnote();
+ $test->run(new HtmlReporter());
+}
diff --git a/_test/cases/inc/parser/parser_formatting.test.php b/_test/cases/inc/parser/parser_formatting.test.php
new file mode 100644
index 000000000..ca89813db
--- /dev/null
+++ b/_test/cases/inc/parser/parser_formatting.test.php
@@ -0,0 +1,271 @@
+<?php
+require_once 'parser.test.php';
+
+class TestOfDoku_Parser_Formatting extends TestOfDoku_Parser {
+
+ function TestOfDoku_Parser_Formatting() {
+ $this->UnitTestCase('TestOfDoku_Parser_Formatting');
+ }
+
+ function testStrong() {
+ $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
+ $this->P->parse('abc **bar** def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('strong_open',array()),
+ array('cdata',array('bar')),
+ array('strong_close',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testNotStrong() {
+ $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
+ $this->P->parse('abc **bar def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc **bar def\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testEm() {
+ $this->P->addMode('emphasis',new Doku_Parser_Mode_Formatting('emphasis'));
+ $this->P->parse('abc //bar// def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('emphasis_open',array()),
+ array('cdata',array('bar')),
+ array('emphasis_close',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testNotEm() {
+ $this->P->addMode('emphasis',new Doku_Parser_Mode_Formatting('emphasis'));
+ $this->P->parse('abc //bar def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc //bar def\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testUnderline() {
+ $this->P->addMode('underline',new Doku_Parser_Mode_Formatting('underline'));
+ $this->P->parse('abc __bar__ def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('underline_open',array()),
+ array('cdata',array('bar')),
+ array('underline_close',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testNotUnderline() {
+ $this->P->addMode('underline',new Doku_Parser_Mode_Formatting('underline'));
+ $this->P->parse('abc __bar def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc __bar def\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testMonospace() {
+ $this->P->addMode('monospace',new Doku_Parser_Mode_Formatting('monospace'));
+ $this->P->parse("abc ''bar'' def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('monospace_open',array()),
+ array('cdata',array('bar')),
+ array('monospace_close',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testNotMonospace() {
+ $this->P->addMode('monospace',new Doku_Parser_Mode_Formatting('monospace'));
+ $this->P->parse("abc ''bar def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc ''bar def\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testSubscript() {
+ $this->P->addMode('subscript',new Doku_Parser_Mode_Formatting('subscript'));
+ $this->P->parse('abc <sub>bar</sub> def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('subscript_open',array()),
+ array('cdata',array('bar')),
+ array('subscript_close',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testNotSubscript() {
+ $this->P->addMode('subscript',new Doku_Parser_Mode_Formatting('subscript'));
+ $this->P->parse('abc <sub>bar def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc <sub>bar def\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testSuperscript() {
+ $this->P->addMode('superscript',new Doku_Parser_Mode_Formatting('superscript'));
+ $this->P->parse("abc <sup>bar</sup> def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('superscript_open',array()),
+ array('cdata',array('bar')),
+ array('superscript_close',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testNotSuperscript() {
+ $this->P->addMode('superscript',new Doku_Parser_Mode_Formatting('superscript'));
+ $this->P->parse("abc <sup>bar def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc <sup>bar def\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testDeleted() {
+ $this->P->addMode('deleted',new Doku_Parser_Mode_Formatting('deleted'));
+ $this->P->parse('abc <del>bar</del> def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('deleted_open',array()),
+ array('cdata',array('bar')),
+ array('deleted_close',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testNotDeleted() {
+ $this->P->addMode('deleted',new Doku_Parser_Mode_Formatting('deleted'));
+ $this->P->parse('abc <del>bar def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc <del>bar def\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testNestedFormatting() {
+ $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
+ $this->P->addMode('emphasis',new Doku_Parser_Mode_Formatting('emphasis'));
+ $this->P->parse('abc **a//b//c** def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('strong_open',array()),
+ array('cdata',array('a')),
+ array('emphasis_open',array()),
+ array('cdata',array('b')),
+ array('emphasis_close',array()),
+ array('cdata',array('c')),
+ array('strong_close',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testIllegalNestedFormatting() {
+ $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
+ $this->P->parse('abc **a**b**c** def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('strong_open',array()),
+ array('cdata',array('a')),
+ array('strong_close',array()),
+ array('cdata',array('b')),
+ array('strong_open',array()),
+ array('cdata',array('c')),
+ array('strong_close',array()),
+ array('cdata',array(' def'."\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_Formatting();
+ $test->run(new HtmlReporter());
+}
diff --git a/_test/cases/inc/parser/parser_headers.test.php b/_test/cases/inc/parser/parser_headers.test.php
new file mode 100644
index 000000000..b8de6983b
--- /dev/null
+++ b/_test/cases/inc/parser/parser_headers.test.php
@@ -0,0 +1,236 @@
+<?php
+require_once 'parser.test.php';
+
+class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
+
+ function TestOfDoku_Parser_Headers() {
+ $this->UnitTestCase('TestOfDoku_Parser_Headers');
+ }
+
+ function testHeader1() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->parse("abc \n ====== Header ====== \n def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc \n")),
+ array('p_close',array()),
+ array('header',array(' Header ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testHeader2() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->parse("abc \n ===== Header ===== \n def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc \n")),
+ array('p_close',array()),
+ array('header',array(' Header ',2)),
+ array('section_open',array(2)),
+ array('p_open',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testHeader3() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->parse("abc \n ==== Header ==== \n def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc \n")),
+ array('p_close',array()),
+ array('header',array(' Header ',3)),
+ array('section_open',array(3)),
+ array('p_open',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testHeader4() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->parse("abc \n === Header === \n def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc \n")),
+ array('p_close',array()),
+ array('header',array(' Header ',4)),
+ array('section_open',array(4)),
+ array('p_open',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testHeader5() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->parse("abc \n == Header == \n def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc \n")),
+ array('p_close',array()),
+ array('header',array(' Header ',5)),
+ array('section_open',array(5)),
+ array('p_open',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+
+ function testHeaderLarge() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->parse("abc \n ======= Header ======= \n def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc \n")),
+ array('p_close',array()),
+ array('header',array('= Header =',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testHeaderSmall() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->parse("abc \n= Header =\n def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc \n= Header =\n def\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+
+ function testHeader1Mixed() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->parse("abc \n====== == Header == ======\n def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc \n")),
+ array('p_close',array()),
+ array('header',array(' == Header == ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testHeader5Mixed() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->parse("abc \n== ====== Header ====== ==\n def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc \n")),
+ array('p_close',array()),
+ array('header',array(' ====== Header ====== ',5)),
+ array('section_open',array(5)),
+ array('p_open',array()),
+ array('cdata',array(' def'."\n")),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testHeaderMultiline() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->parse("abc \n== ====== Header\n ====== ==\n def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc \n== ====== Header\n")),
+ array('p_close',array()),
+ array('header',array('',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array(" def\n")),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testNoToc() {
+ $this->P->addMode('notoc',new Doku_Parser_Mode_NoToc());
+ $this->P->parse('abc ~~NOTOC~~ def');
+ $this->assertFalse($this->H->meta['toc']);
+ }
+
+ function testHeader1Eol() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse("abc \n ====== Header ====== \n def");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array('abc ')),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('header',array(' Header ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array(' def')),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_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_Headers();
+ $test->run(new HtmlReporter());
+}
diff --git a/_test/cases/inc/parser/parser_i18n.test.php b/_test/cases/inc/parser/parser_i18n.test.php
new file mode 100644
index 000000000..f9609b07e
--- /dev/null
+++ b/_test/cases/inc/parser/parser_i18n.test.php
@@ -0,0 +1,180 @@
+<?php
+require_once 'parser.test.php';
+
+class TestOfDoku_Parser_i18n extends TestOfDoku_Parser {
+
+ function TestOfDoku_Parser_i18n() {
+ $this->UnitTestCase('TestOfDoku_Parser_i18n');
+ }
+
+ function testFormatting() {
+ $formats = array (
+ 'strong', 'emphasis', 'underline', 'monospace',
+ 'subscript', 'superscript', 'deleted',
+ );
+ foreach ( $formats as $format ) {
+ $this->P->addMode($format,new Doku_Parser_Mode_Formatting($format));
+ }
+ $this->P->parse("I**ñ**t__ë__r//n//â<sup>t</sup>i<sub>ô</sub>n''à''liz<del>æ</del>tiøn");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nI")),
+ array('strong_open',array()),
+ array('cdata',array('ñ')),
+ array('strong_close',array()),
+ array('cdata',array('t')),
+ array('underline_open',array()),
+ array('cdata',array('ë')),
+ array('underline_close',array()),
+ array('cdata',array('r')),
+ array('emphasis_open',array()),
+ array('cdata',array('n')),
+ array('emphasis_close',array()),
+ array('cdata',array('â')),
+ array('superscript_open',array()),
+ array('cdata',array('t')),
+ array('superscript_close',array()),
+ array('cdata',array('i')),
+ array('subscript_open',array()),
+ array('cdata',array('ô')),
+ array('subscript_close',array()),
+ array('cdata',array('n')),
+ array('monospace_open',array()),
+ array('cdata',array('à')),
+ array('monospace_close',array()),
+ array('cdata',array('liz')),
+ array('deleted_open',array()),
+ array('cdata',array('æ')),
+ array('deleted_close',array()),
+ array('cdata',array("tiøn\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testHeader() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->parse("Foo\n ==== Iñtërnâtiônàlizætiøn ==== \n Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nFoo\n")),
+ array('p_close',array()),
+ array('header',array(' Iñtërnâtiônàlizætiøn ',3)),
+ array('section_open',array(3)),
+ array('p_open',array()),
+ array('cdata',array(" Bar\n")),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testTable() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->parse('
+abc
+| Row 0 Col 1 | Iñtërnâtiônàlizætiøn | Row 0 Col 3 |
+| Row 1 Col 1 | Iñtërnâtiônàlizætiøn | Row 1 Col 3 |
+def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n\nabc")),
+ array('p_close',array()),
+ array('table_open',array(3,2)),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Iñtërnâtiônàlizætiøn')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Iñtërnâtiônàlizætiøn')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testAcronym() {
+ $t = array('Iñtërnâtiônàlizætiøn');
+ $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym($t));
+ $this->P->parse("Foo Iñtërnâtiônàlizætiøn Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nFoo ")),
+ array('acronym',array('Iñtërnâtiônàlizætiøn')),
+ array('cdata',array(" Bar\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testInterwiki() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse("Foo [[wp>Iñtërnâtiônàlizætiøn|Iñtërnâtiônàlizætiøn]] Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('interwikilink',array('wp>Iñtërnâtiônàlizætiøn','Iñtërnâtiônàlizætiøn','wp','Iñtërnâtiônàlizætiøn')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testInternalLink() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse("Foo [[x:Iñtërnâtiônàlizætiøn:y:foo_bar:z|Iñtërnâtiônàlizætiøn]] Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internallink',array('x:Iñtërnâtiônàlizætiøn:y:foo_bar:z','Iñtërnâtiônàlizætiøn')),
+ array('cdata',array(' Bar'."\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_i18n();
+ $test->run(new HtmlReporter());
+}
diff --git a/_test/cases/inc/parser/parser_links.test.php b/_test/cases/inc/parser/parser_links.test.php
new file mode 100644
index 000000000..0d27ae6b0
--- /dev/null
+++ b/_test/cases/inc/parser/parser_links.test.php
@@ -0,0 +1,522 @@
+<?php
+require_once 'parser.test.php';
+
+class TestOfDoku_Parser_Links extends TestOfDoku_Parser {
+
+ function TestOfDoku_Parser_Links() {
+ $this->UnitTestCase('TestOfDoku_Parser_Links');
+ }
+
+
+ function testExternalLinkSimple() {
+ $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink());
+ $this->P->parse("Foo http://www.google.com Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('externallink',array('http://www.google.com ', NULL)),
+ array('cdata',array('Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testExternalLinkCase() {
+ $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink());
+ $this->P->parse("Foo HTTP://WWW.GOOGLE.COM Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('externallink',array('HTTP://WWW.GOOGLE.COM ', NULL)),
+ array('cdata',array('Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testExternalLinkJavascript() {
+ $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink());
+ $this->P->parse("Foo javascript:alert('XSS'); Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nFoo javascript:alert('XSS'); Bar\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testExternalWWWLink() {
+ $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink());
+ $this->P->parse("Foo www.google.com Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('externallink',array('www.google.com ', NULL)),
+ array('cdata',array('Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testExternalFTPLink() {
+ $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink());
+ $this->P->parse("Foo ftp.sunsite.com Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('externallink',array('ftp.sunsite.com ', NULL)),
+ array('cdata',array('Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testEmail() {
+ $this->P->addMode('email',new Doku_Parser_Mode_Emaillink());
+ $this->P->parse("Foo <bugs@php.net> Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('email',array('bugs@php.net', NULL)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testInternalLinkOneChar() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse("Foo [[l]] Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internallink',array('l',NULL)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testInternalLinkNamespaceNoTitle() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse("Foo [[foo:bar]] Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internallink',array('foo:bar',NULL)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testInternalLinkNamespace() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse("Foo [[x:1:y:foo_bar:z|Test]] Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internallink',array('x:1:y:foo_bar:z','Test')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testInternalLinkSectionRef() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse("Foo [[wiki:syntax#internal|Syntax]] Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internallink',array('wiki:syntax#internal','Syntax')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testExternalInInternalLink() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse("Foo [[http://www.google.com|Google]] Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('externallink',array('http://www.google.com','Google')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testInterwikiLink() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse("Foo [[iw>somepage|Some Page]] Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('interwikilink',array('iw>somepage','Some Page','iw','somepage')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testInterwikiLinkCase() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse("Foo [[IW>somepage|Some Page]] Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('interwikilink',array('IW>somepage','Some Page','iw','somepage')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testInterwikiPedia() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse("Foo [[wp>Callback_(computer_science)|callbacks]] Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('interwikilink',array('wp>Callback_(computer_science)','callbacks','wp','Callback_(computer_science)')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testCamelCase() {
+ $this->P->addMode('camelcaselink',new Doku_Parser_Mode_CamelCaseLink());
+ $this->P->parse("Foo FooBar Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('camelcaselink',array('FooBar')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testFileLink() {
+ $this->P->addMode('filelink',new Doku_Parser_Mode_FileLink());
+ $this->P->parse('Foo file://temp/file.txt Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('filelink',array('file://temp/file.txt ',NULL)),
+ array('cdata',array('Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testFileLinkInternal() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse('Foo [[file://temp/file.txt|Some File]] Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('filelink',array('file://temp/file.txt','Some File')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testWindowsShareLink() {
+ $this->P->addMode('windowssharelink',new Doku_Parser_Mode_WindowsShareLink());
+ $this->P->parse('Foo \\\server\share Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo')),
+ array('windowssharelink',array(' \\\server\share ',NULL)),
+ array('cdata',array('Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testWindowsShareLinkInternal() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse('Foo [[\\\server\share|My Documents]] Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('windowssharelink',array('\\\server\share','My Documents')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testMediaInternal() {
+ $this->P->addMode('media',new Doku_Parser_Mode_Media());
+ $this->P->parse('Foo {{img.gif}} Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internalmedia',array('img.gif',NULL,NULL,NULL,NULL,TRUE)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testMediaNotImage() {
+ $this->P->addMode('media',new Doku_Parser_Mode_Media());
+ $this->P->parse('Foo {{foo.txt?10x10|Some File}} Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internallink',array('foo.txt','Some File')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testMediaInternalLAlign() {
+ $this->P->addMode('media',new Doku_Parser_Mode_Media());
+ $this->P->parse('Foo {{img.gif }} Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internalmedia',array('img.gif',NULL,'left',NULL,NULL,TRUE)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testMediaInternalRAlign() {
+ $this->P->addMode('media',new Doku_Parser_Mode_Media());
+ $this->P->parse('Foo {{ img.gif}} Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internalmedia',array('img.gif',NULL,'right',NULL,NULL,TRUE)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testMediaInternalCenter() {
+ $this->P->addMode('media',new Doku_Parser_Mode_Media());
+ $this->P->parse('Foo {{ img.gif }} Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internalmedia',array('img.gif',NULL,'center',NULL,NULL,TRUE)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testMediaInternalParams() {
+ $this->P->addMode('media',new Doku_Parser_Mode_Media());
+ $this->P->parse('Foo {{img.gif?50x100nocache}} Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internalmedia',array('img.gif',NULL,NULL,'50','100',FALSE)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testMediaInternalTitle() {
+ $this->P->addMode('media',new Doku_Parser_Mode_Media());
+ $this->P->parse('Foo {{img.gif?50x100|Some Image}} Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internalmedia',array('img.gif','Some Image',NULL,'50','100',TRUE)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testMediaExternal() {
+ $this->P->addMode('media',new Doku_Parser_Mode_Media());
+ $this->P->parse('Foo {{http://www.google.com/img.gif}} Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('externalmedia',array('http://www.google.com/img.gif',NULL,NULL,NULL,NULL,TRUE)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testMediaExternalParams() {
+ $this->P->addMode('media',new Doku_Parser_Mode_Media());
+ $this->P->parse('Foo {{http://www.google.com/img.gif?50x100nocache}} Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('externalmedia',array('http://www.google.com/img.gif',NULL,NULL,'50','100',FALSE)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testMediaExternalTitle() {
+ $this->P->addMode('media',new Doku_Parser_Mode_Media());
+ $this->P->parse('Foo {{http://www.google.com/img.gif?50x100|Some Image}} Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('externalmedia',
+ array('http://www.google.com/img.gif','Some Image',NULL,'50','100',TRUE)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testMediaInInternalLink() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse("Foo [[x:1:y:foo_bar:z|{{img.gif?10x20nocache|Some Image}}]] Bar");
+
+ $image = array(
+ 'type'=>'internalmedia',
+ 'src'=>'img.gif',
+ 'title'=>'Some Image',
+ 'align'=>NULL,
+ 'width'=>10,
+ 'height'=>20,
+ 'cache'=>FALSE,
+ );
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internallink',array('x:1:y:foo_bar:z',$image)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testMediaNoImageInInternalLink() {
+ $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink());
+ $this->P->parse("Foo [[x:1:y:foo_bar:z|{{foo.txt?10x20nocache|Some Image}}]] Bar");
+
+ $image = array(
+ 'type'=>'internalmedia',
+ 'src'=>'img.gif',
+ 'title'=>'Some Image',
+ 'align'=>NULL,
+ 'width'=>10,
+ 'height'=>20,
+ 'cache'=>FALSE,
+ );
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internallink',array('x:1:y:foo_bar:z','{{foo.txt?10x20nocache|Some Image}}')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testNestedMedia() {
+ $this->P->addMode('media',new Doku_Parser_Mode_Media());
+ $this->P->parse('Foo {{img.gif|{{foo.gif|{{bar.gif|Bar}}}}}} Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('internalmedia',
+ array('img.gif','{{foo.gif|{{bar.gif|Bar',NULL,NULL,NULL,TRUE)),
+ array('cdata',array('}}}} Bar'."\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_Links();
+ $test->run(new HtmlReporter());
+}
diff --git a/_test/cases/inc/parser/parser_lists.test.php b/_test/cases/inc/parser/parser_lists.test.php
new file mode 100644
index 000000000..92bef7812
--- /dev/null
+++ b/_test/cases/inc/parser/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());
+}
diff --git a/_test/cases/inc/parser/parser_preformatted.test.php b/_test/cases/inc/parser/parser_preformatted.test.php
new file mode 100644
index 000000000..2b5746216
--- /dev/null
+++ b/_test/cases/inc/parser/parser_preformatted.test.php
@@ -0,0 +1,244 @@
+<?php
+require_once 'parser.test.php';
+
+class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
+
+ function TestOfDoku_Parser_Preformatted() {
+ $this->UnitTestCase('TestOfDoku_Parser_Preformatted');
+ }
+
+ function testFile() {
+ $this->P->addMode('file',new Doku_Parser_Mode_File());
+ $this->P->parse('Foo <file>testing</file> Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('p_close',array()),
+ array('file',array('testing')),
+ array('p_open',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testCode() {
+ $this->P->addMode('code',new Doku_Parser_Mode_Code());
+ $this->P->parse('Foo <code>testing</code> Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('p_close',array()),
+ array('code',array('testing', NULL)),
+ array('p_open',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testCodeWhitespace() {
+ $this->P->addMode('code',new Doku_Parser_Mode_Code());
+ $this->P->parse("Foo <code \n>testing</code> Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('p_close',array()),
+ array('code',array('testing', NULL)),
+ array('p_open',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testCodeLang() {
+ $this->P->addMode('code',new Doku_Parser_Mode_Code());
+ $this->P->parse("Foo <code php>testing</code> Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('p_close',array()),
+ array('code',array('testing', 'php')),
+ array('p_open',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testPreformatted() {
+ $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
+ $this->P->parse("F oo\n x \n y \nBar\n");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nF oo")),
+ array('p_close',array()),
+ array('preformatted',array("x \n y ")),
+ array('p_open',array()),
+ array('cdata',array('Bar'."\n\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testPreformattedWinEOL() {
+ $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
+ $this->P->parse("F oo\r\n x \r\n y \r\nBar\r\n");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nF oo")),
+ array('p_close',array()),
+ array('preformatted',array("x \n y ")),
+ array('p_open',array()),
+ array('cdata',array('Bar'."\n\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testPreformattedTab() {
+ $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
+ $this->P->parse("F oo\n\tx\t\n\t\ty\t\nBar\n");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nF oo")),
+ array('p_close',array()),
+ array('preformatted',array("x\t\n\ty\t")),
+ array('p_open',array()),
+ array('cdata',array("Bar\n\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testPreformattedTabWinEOL() {
+ $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
+ $this->P->parse("F oo\r\n\tx\t\r\n\t\ty\t\r\nBar\r\n");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nF oo")),
+ array('p_close',array()),
+ array('preformatted',array("x\t\n\ty\t")),
+ array('p_open',array()),
+ array('cdata',array("Bar\n\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testPreformattedList() {
+ $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
+ $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock());
+ $this->P->parse(" - x \n * y \nF oo\n x \n y \n -X\n *Y\nBar\n");
+ $calls = array (
+ array('document_start',array()),
+ array('listo_open',array()),
+ array('listitem_open',array(1)),
+ array('listcontent_open',array()),
+ array('cdata',array(" x ")),
+ array('listcontent_close',array()),
+ array('listitem_close',array()),
+ array('listo_close',array()),
+ array('listu_open',array()),
+ array('listitem_open',array(1)),
+ array('listcontent_open',array()),
+ array('cdata',array(" y ")),
+ array('listcontent_close',array()),
+ array('listitem_close',array()),
+ array('listu_close',array()),
+ array('p_open',array()),
+ array('cdata',array("F oo")),
+ array('p_close',array()),
+ array('preformatted',array("x \n y \n-X\n*Y")),
+ array('p_open',array()),
+ array('cdata',array("Bar\n\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testPHP() {
+ $this->P->addMode('php',new Doku_Parser_Mode_PHP());
+ $this->P->parse('Foo <php>testing</php> Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('p_close',array()),
+ array('php',array('testing')),
+ array('p_open',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testHTML() {
+ $this->P->addMode('html',new Doku_Parser_Mode_HTML());
+ $this->P->parse('Foo <html>testing</html> Bar');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('p_close',array()),
+ array('html',array('testing')),
+ array('p_open',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testPreformattedPlusHeaderAndEol() {
+ // Note that EOL must come after preformatted!
+ $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse("F oo\n ==Test==\n y \nBar\n");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("F oo")),
+ array('p_close',array()),
+ array('preformatted',array("==Test==\n y ")),
+ array('p_open',array()),
+ array('cdata',array('Bar')),
+ array('p_close',array()),
+ array('p_open',array()),
+ 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);
+ }
+}
+
+/**
+* Conditional test runner
+*/
+if (!defined('TEST_RUNNING')) {
+ define('TEST_RUNNING', true);
+ $test = &new TestOfDoku_Parser_Preformatted();
+ $test->run(new HtmlReporter());
+}
diff --git a/_test/cases/inc/parser/parser_quote.test.php b/_test/cases/inc/parser/parser_quote.test.php
new file mode 100644
index 000000000..ccee56062
--- /dev/null
+++ b/_test/cases/inc/parser/parser_quote.test.php
@@ -0,0 +1,114 @@
+<?php
+require_once 'parser.test.php';
+
+class TestOfDoku_Parser_Quote extends TestOfDoku_Parser {
+
+ function TestOfDoku_Parser_Quote() {
+ $this->UnitTestCase('TestOfDoku_Parser_Quote');
+ }
+
+ function testQuote() {
+ $this->P->addMode('quote',new Doku_Parser_Mode_Quote());
+ $this->P->parse("abc\n> def\n>>ghi\nklm");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc")),
+ array('p_close',array()),
+ array('quote_open',array()),
+ array('cdata',array(" def")),
+ array('quote_open',array()),
+ array('cdata',array("ghi")),
+ array('quote_close',array()),
+ array('quote_close',array()),
+ array('p_open',array()),
+ array('cdata',array("klm\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testQuoteWinCr() {
+ $this->P->addMode('quote',new Doku_Parser_Mode_Quote());
+ $this->P->parse("abc\r\n> def\r\n>>ghi\r\nklm");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\nabc")),
+ array('p_close',array()),
+ array('quote_open',array()),
+ array('cdata',array(" def")),
+ array('quote_open',array()),
+ array('cdata',array("ghi")),
+ array('quote_close',array()),
+ array('quote_close',array()),
+ array('p_open',array()),
+ array('cdata',array("klm\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testQuoteMinumumContext() {
+ $this->P->addMode('quote',new Doku_Parser_Mode_Quote());
+ $this->P->parse("\n> def\n>>ghi\n ");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n")),
+ array('p_close',array()),
+ array('quote_open',array()),
+ array('cdata',array(" def")),
+ array('quote_open',array()),
+ array('cdata',array("ghi")),
+ array('quote_close',array()),
+ array('quote_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 testQuoteEol() {
+ $this->P->addMode('quote',new Doku_Parser_Mode_Quote());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse("abc\n> def\n>>ghi\nklm");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("abc")),
+ array('p_close',array()),
+ array('quote_open',array()),
+ array('cdata',array(" def")),
+ array('quote_open',array()),
+ array('cdata',array("ghi")),
+ array('quote_close',array()),
+ array('quote_close',array()),
+ array('p_open',array()),
+ array('cdata',array("klm")),
+ 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);
+ }
+
+}
+
+/**
+* Conditional test runner
+*/
+if (!defined('TEST_RUNNING')) {
+ define('TEST_RUNNING', true);
+ $test = &new TestOfDoku_Parser_Quote();
+ $test->run(new HtmlReporter());
+}
diff --git a/_test/cases/inc/parser/parser_replacements.test.php b/_test/cases/inc/parser/parser_replacements.test.php
new file mode 100644
index 000000000..0aae4496b
--- /dev/null
+++ b/_test/cases/inc/parser/parser_replacements.test.php
@@ -0,0 +1,377 @@
+<?php
+require_once 'parser.test.php';
+
+class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
+
+ function TestOfDoku_Parser_Replacements() {
+ $this->UnitTestCase('TestOfDoku_Parser_Replacements');
+ }
+
+
+ function testSingleAcronym() {
+ $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOOBAR')));
+ $this->P->parse('abc FOOBAR xyz');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('acronym',array('FOOBAR')),
+ array('cdata',array(' xyz'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testAlmostAnAcronym() {
+ $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOOBAR')));
+ $this->P->parse('abcFOOBARxyz');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abcFOOBARxyz'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testMultipleAcronyms() {
+ $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOO','BAR')));
+ $this->P->parse('abc FOO def BAR xyz');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('acronym',array('FOO')),
+ array('cdata',array(' def ')),
+ array('acronym',array('BAR')),
+ array('cdata',array(' xyz'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+
+ }
+ //
+
+ function testSingleSmiley() {
+ $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)')));
+ $this->P->parse('abc:-)xyz');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc')),
+ array('smiley',array(':-)')),
+ array('cdata',array('xyz'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testMultipleSmileys() {
+ $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)','^_^')));
+ $this->P->parse('abc:-)x^_^yz');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc')),
+ array('smiley',array(':-)')),
+ array('cdata',array('x')),
+ array('smiley',array('^_^')),
+ array('cdata',array('yz'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+
+ }
+
+ function testBackslashSmiley() {
+ // This smiley is really :-\\ but escaping makes like interesting
+ $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-\\\\')));
+ $this->P->parse('abc:-\\\xyz');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc')),
+ array('smiley',array(':-\\\\')),
+ array('cdata',array('xyz'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testSingleWordblock() {
+ $this->P->addMode('wordblock',new Doku_Parser_Mode_Wordblock(array('CAT')));
+ $this->P->parse('abc CAT xyz');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('wordblock',array('CAT')),
+ array('cdata',array(' xyz'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testWordblockCase() {
+ $this->P->addMode('wordblock',new Doku_Parser_Mode_Wordblock(array('CAT')));
+ $this->P->parse('abc cat xyz');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('wordblock',array('cat')),
+ array('cdata',array(' xyz'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testMultipleWordblock() {
+ $this->P->addMode('wordblock',new Doku_Parser_Mode_Wordblock(array('CAT','dog')));
+ $this->P->parse('abc cat x DOG yz');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'abc ')),
+ array('wordblock',array('cat')),
+ array('cdata',array(' x ')),
+ array('wordblock',array('DOG')),
+ array('cdata',array(' yz'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testSingleEntity() {
+ $this->P->addMode('entity',new Doku_Parser_Mode_Entity(array('->')));
+ $this->P->parse('x -> y');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'x ')),
+ array('entity',array('->')),
+ array('cdata',array(' y'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testMultipleEntities() {
+ $this->P->addMode('entity',new Doku_Parser_Mode_Entity(array('->','<-')));
+ $this->P->parse('x -> y <- z');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'x ')),
+ array('entity',array('->')),
+ array('cdata',array(' y ')),
+ array('entity',array('<-')),
+ array('cdata',array(' z'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testMultiplyEntity() {
+ $this->P->addMode('multiplyentity',new Doku_Parser_Mode_MultiplyEntity());
+ $this->P->parse('Foo 10x20 Bar');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('multiplyentity',array(10,20)),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testSingleQuoteOpening() {
+ $this->P->addMode('quotes',new Doku_Parser_Mode_Quotes());
+ $this->P->parse("Foo 'hello Bar");
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('singlequoteopening',array()),
+ array('cdata',array('hello Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testSingleQuoteClosing() {
+ $this->P->addMode('quotes',new Doku_Parser_Mode_Quotes());
+ $this->P->parse("Foo hello' Bar");
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo hello')),
+ array('singlequoteclosing',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testSingleQuotes() {
+ $this->P->addMode('quotes',new Doku_Parser_Mode_Quotes());
+ $this->P->parse("Foo 'hello' Bar");
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('singlequoteopening',array()),
+ array('cdata',array('hello')),
+ array('singlequoteclosing',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testDoubleQuoteOpening() {
+ $this->P->addMode('quotes',new Doku_Parser_Mode_Quotes());
+ $this->P->parse('Foo "hello Bar');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('doublequoteopening',array()),
+ array('cdata',array('hello Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testDoubleQuoteClosing() {
+ $this->P->addMode('quotes',new Doku_Parser_Mode_Quotes());
+ $this->P->parse('Foo hello" Bar');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo hello')),
+ array('doublequoteclosing',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testDoubleQuotes() {
+ $this->P->addMode('quotes',new Doku_Parser_Mode_Quotes());
+ $this->P->parse('Foo "hello" Bar');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('doublequoteopening',array()),
+ array('cdata',array('hello')),
+ array('doublequoteclosing',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testHR() {
+ $this->P->addMode('hr',new Doku_Parser_Mode_HR());
+ $this->P->parse("Foo \n ---- \n Bar");
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('p_close',array()),
+ array('hr',array()),
+ array('p_open',array()),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testHREol() {
+ $this->P->addMode('hr',new Doku_Parser_Mode_HR());
+ $this->P->parse("Foo \n----\n Bar");
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('p_close',array()),
+ array('hr',array()),
+ array('p_open',array()),
+ array('cdata',array(' Bar'."\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_Replacements();
+ $test->run(new HtmlReporter());
+}
diff --git a/_test/cases/inc/parser/parser_table.test.php b/_test/cases/inc/parser/parser_table.test.php
new file mode 100644
index 000000000..0f04dbeee
--- /dev/null
+++ b/_test/cases/inc/parser/parser_table.test.php
@@ -0,0 +1,558 @@
+<?php
+require_once 'parser.test.php';
+
+class TestOfDoku_Parser_Table extends TestOfDoku_Parser {
+
+ function TestOfDoku_Parser_Table() {
+ $this->UnitTestCase('TestOfDoku_Parser_Table');
+ }
+
+ function testTable() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->parse('
+abc
+| Row 0 Col 1 | Row 0 Col 2 | Row 0 Col 3 |
+| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n\nabc")),
+ array('p_close',array()),
+ array('table_open',array(3,2)),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testTableWinEOL() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->parse("\r\nabc\r\n| Row 0 Col 1 | Row 0 Col 2 | Row 0 Col 3 |\r\n| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |\r\ndef");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n\nabc")),
+ array('p_close',array()),
+ array('table_open',array(3,2)),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testEmptyTable() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->parse('
+abc
+|
+def');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n\nabc")),
+ array('p_close',array()),
+ array('table_open',array(0,1)),
+ array('tablerow_open',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testTableHeaders() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->parse('
+abc
+^ X | Y ^ Z |
+def');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n\nabc")),
+ array('p_close',array()),
+ array('table_open',array(3,1)),
+ array('tablerow_open',array()),
+ array('tableheader_open',array(1,NULL)),
+ array('cdata',array(' X ')),
+ array('tableheader_close',array()),
+ array('tablecell_open',array(1,NULL)),
+ array('cdata',array(' Y ')),
+ array('tablecell_close',array()),
+ array('tableheader_open',array(1,NULL)),
+ array('cdata',array(' Z ')),
+ array('tableheader_close',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+
+ }
+
+ function testCellAlignment() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->parse('
+abc
+| X | Y ^ Z |
+def');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n\nabc")),
+ array('p_close',array()),
+ array('table_open',array(3,1)),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'right')),
+ array('cdata',array(' ')),
+ array('cdata',array('X ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Y')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tableheader_open',array(1,'center')),
+ array('cdata',array(' ')),
+ array('cdata',array('Z')),
+ array('cdata',array(' ')),
+ array('tableheader_close',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testCellSpan() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->parse('
+abc
+| d || e |
+| f ^ ^|
+||||
+def');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n\nabc")),
+ array('p_close',array()),
+ array('table_open',array(3,3)),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(2,'right')),
+ array('cdata',array(' ')),
+ array('cdata',array('d ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,NULL)),
+ array('cdata',array(' e ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(3,NULL)),
+ array('cdata',array(' f ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('tablerow_open',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testCellAlignmentFormatting() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
+ $this->P->parse('
+abc
+| **X** | Y ^ Z |
+def');
+
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n\nabc")),
+ array('p_close',array()),
+ array('table_open',array(3,1)),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'right')),
+ array('cdata',array(' ')),
+ array('strong_open',array()),
+ array('cdata',array('X')),
+ array('strong_close',array()),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Y')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tableheader_open',array(1,'center')),
+ array('cdata',array(' ')),
+ array('cdata',array('Z')),
+ array('cdata',array(' ')),
+ array('tableheader_close',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+
+ }
+
+ function testTableEol() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse('
+abc
+| Row 0 Col 1 | Row 0 Col 2 | Row 0 Col 3 |
+| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('cdata',array("abc")),
+ array('p_close',array()),
+ array('table_open',array(3,2)),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def')),
+ 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 cols
+ // Problem is fixing it would mean a major rewrite of table handling
+ function testTableStrong() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
+ $this->P->parse('
+abc
+| **Row 0 Col 1** | **Row 0 Col 2 | Row 0 Col 3** |
+| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n\nabc")),
+ array('p_close',array()),
+ array('table_open',array(3,2)),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('strong_open',array()),
+ array('cdata',array('Row 0 Col 1')),
+ array('strong_close',array()),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('strong_open',array()),
+ array('cdata',array('Row 0 Col 2 | Row 0 Col 3')),
+ array('strong_close',array()),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def'."\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 cols
+ // Problem is fixing it would mean a major rewrite of table handling
+ function testTableUnformatted() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->addMode('unformatted',new Doku_Parser_Mode_Unformatted());
+ $this->P->parse('
+abc
+| <nowiki>Row 0 Col 1</nowiki> | <nowiki>Row 0 Col 2 | Row 0 Col 3</nowiki> |
+| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n\nabc")),
+ array('p_close',array()),
+ array('table_open',array(3,2)),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('unformatted',array('Row 0 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('unformatted',array('Row 0 Col 2 | Row 0 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ function testTableLinebreak() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->addMode('linebreak',new Doku_Parser_Mode_Linebreak());
+ $this->P->parse('
+abc
+| Row 0\\\\ Col 1 | Row 0 Col 2 | Row 0 Col 3 |
+| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n\nabc")),
+ array('p_close',array()),
+ array('table_open',array(3,2)),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0')),
+ array('linebreak',array()),
+ array('cdata',array('Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 0 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripbyteindex',$this->H->calls),$calls);
+ }
+
+ // This is really a failing test - footnote able to spread across cols
+ // Problem is fixing it would mean a major rewrite of table handling
+ function testTableFootnote() {
+ $this->P->addMode('table',new Doku_Parser_Mode_Table());
+ $this->P->addMode('footnote',new Doku_Parser_Mode_Footnote());
+ $this->P->parse('
+abc
+| ((Row 0 Col 1)) | ((Row 0 Col 2 | Row 0 Col 3)) |
+| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+def');
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n\nabc")),
+ array('p_close',array()),
+ array('table_open',array(3,2)),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('footnote_open',array()),
+ array('cdata',array('Row 0 Col 1')),
+ array('footnote_close',array()),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('footnote_open',array()),
+ array('cdata',array('Row 0 Col 2 | Row 0 Col 3')),
+ array('footnote_close',array()),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('tablerow_open',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 1')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 2')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablecell_open',array(1,'left')),
+ array('cdata',array(' Row 1 Col 3')),
+ array('cdata',array(' ')),
+ array('tablecell_close',array()),
+ array('tablerow_close',array()),
+ array('table_close',array()),
+ array('p_open',array()),
+ array('cdata',array('def'."\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_Table();
+ $test->run(new HtmlReporter());
+}
diff --git a/_test/cases/inc/parser/parser_tocsections.test.php b/_test/cases/inc/parser/parser_tocsections.test.php
new file mode 100644
index 000000000..64051e2ad
--- /dev/null
+++ b/_test/cases/inc/parser/parser_tocsections.test.php
@@ -0,0 +1,516 @@
+<?php
+require_once 'parser.test.php';
+
+class TestOfDoku_Parser_TocSections extends TestOfDoku_Parser {
+
+ function TestOfDoku_Parser_TocSections() {
+ $this->UnitTestCase('TestOfDoku_Parser_TocSections');
+ }
+
+
+ function testNoToc() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->addMode('notoc',new Doku_Parser_Mode_NoToc());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse('abc
+~~NOTOC~~
+def
+====== HeaderX ======
+X
+====== HeaderY ======
+Y
+====== HeaderZ ======
+Z
+');
+ $calls = array(
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("abc")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('cdata',array("def")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('header',array(' HeaderX ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array("X")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderY ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array("Y")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderZ ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array("Z")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testTocSameLevel() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse('abc
+def
+====== HeaderX ======
+X
+====== HeaderY ======
+Y
+====== HeaderZ ======
+Z
+');
+ $calls = array(
+ array('document_start',array()),
+ array('toc_open',array()),
+ array('tocbranch_open',array(1)),
+ array('tocitem_open',array(1)),
+ array('tocelement',array(1,' HeaderX ')),
+ array('tocitem_close',array(1)),
+ array('tocitem_open',array(1)),
+ array('tocelement',array(1,' HeaderY ')),
+ array('tocitem_close',array(1)),
+ array('tocitem_open',array(1)),
+ array('tocelement',array(1,' HeaderZ ')),
+ array('tocitem_close',array(1)),
+ array('tocbranch_close',array(1)),
+ array('toc_close',array()),
+ array('p_open',array()),
+ array('cdata',array("abc")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('cdata',array("def")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('header',array(' HeaderX ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array("X")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderY ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array("Y")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderZ ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array("Z")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testTocDeepening() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse('abc
+def
+====== HeaderX ======
+X
+===== HeaderY =====
+Y
+==== HeaderZ ====
+Z
+');
+ $calls = array(
+ array('document_start',array()),
+ array('toc_open',array()),
+ array('tocbranch_open',array(1)),
+ array('tocitem_open',array(1)),
+ array('tocelement',array(1,' HeaderX ')),
+ array('tocbranch_open',array(2)),
+ array('tocitem_open',array(2)),
+ array('tocelement',array(2,' HeaderY ')),
+ array('tocbranch_open',array(3)),
+ array('tocitem_open',array(3)),
+ array('tocelement',array(3,' HeaderZ ')),
+ array('tocitem_close',array(3)),
+ array('tocbranch_close',array(3)),
+ array('tocitem_close',array(2)),
+ array('tocbranch_close',array(2)),
+ array('tocitem_close',array(1)),
+ array('tocbranch_close',array(1)),
+ array('toc_close',array()),
+ array('p_open',array()),
+ array('cdata',array("abc")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('cdata',array("def")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('header',array(' HeaderX ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array("X")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderY ',2)),
+ array('section_open',array(2)),
+ array('p_open',array()),
+ array('cdata',array("Y")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderZ ',3)),
+ array('section_open',array(3)),
+ array('p_open',array()),
+ array('cdata',array("Z")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testTocShallower() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse('abc
+def
+==== HeaderX ====
+X
+===== HeaderY =====
+Y
+====== HeaderZ ======
+Z
+');
+ $calls = array(
+ array('document_start',array()),
+ array('toc_open',array()),
+ array('tocbranch_open',array(1)),
+ array('tocitem_open',array(1,TRUE)),
+ array('tocbranch_open',array(2)),
+ array('tocitem_open',array(2,TRUE)),
+ array('tocbranch_open',array(3)),
+ array('tocitem_open',array(3)),
+ array('tocelement',array(3,' HeaderX ')),
+ array('tocitem_close',array(3)),
+ array('tocbranch_close',array(3)),
+ array('tocitem_close',array(2)),
+ array('tocitem_open',array(2)),
+ array('tocelement',array(2,' HeaderY ')),
+ array('tocitem_close',array(2)),
+ array('tocbranch_close',array(2)),
+ array('tocitem_close',array(1)),
+ array('tocitem_open',array(1)),
+ array('tocelement',array(1,' HeaderZ ')),
+ array('tocitem_close',array(1)),
+ array('tocbranch_close',array(1)),
+ array('toc_close',array()),
+ array('p_open',array()),
+ array('cdata',array("abc")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('cdata',array("def")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('header',array(' HeaderX ',3)),
+ array('section_open',array(3)),
+ array('p_open',array()),
+ array('cdata',array("X")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderY ',2)),
+ array('section_open',array(2)),
+ array('p_open',array()),
+ array('cdata',array("Y")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderZ ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array("Z")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testTocNesting() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse('abc
+def
+====== HeaderX ======
+X
+===== HeaderY =====
+Y
+====== HeaderZ ======
+Z
+');
+ $calls = array(
+ array('document_start',array()),
+ array('toc_open',array()),
+ array('tocbranch_open',array(1)),
+ array('tocitem_open',array(1)),
+ array('tocelement',array(1,' HeaderX ')),
+ array('tocbranch_open',array(2)),
+ array('tocitem_open',array(2)),
+ array('tocelement',array(2,' HeaderY ')),
+ array('tocitem_close',array(2)),
+ array('tocbranch_close',array(2)),
+ array('tocitem_close',array(1)),
+ array('tocitem_open',array(1)),
+ array('tocelement',array(1,' HeaderZ ')),
+ array('tocitem_close',array(1)),
+ array('tocbranch_close',array(1)),
+ array('toc_close',array()),
+ array('p_open',array()),
+ array('cdata',array("abc")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('cdata',array("def")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('header',array(' HeaderX ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array("X")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderY ',2)),
+ array('section_open',array(2)),
+ array('p_open',array()),
+ array('cdata',array("Y")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderZ ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array("Z")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testTocNestingInverted() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse('abc
+def
+===== HeaderX =====
+X
+====== HeaderY ======
+Y
+===== HeaderZ =====
+Z
+');
+ $calls = array(
+ array('document_start',array()),
+ array('toc_open',array()),
+ array('tocbranch_open',array(1)),
+ array('tocitem_open',array(1,TRUE)),
+ array('tocbranch_open',array(2)),
+ array('tocitem_open',array(2)),
+ array('tocelement',array(2,' HeaderX ')),
+ array('tocitem_close',array(2)),
+ array('tocbranch_close',array(2)),
+ array('tocitem_close',array(1)),
+ array('tocitem_open',array(1)),
+ array('tocelement',array(1,' HeaderY ')),
+ array('tocbranch_open',array(2)),
+ array('tocitem_open',array(2)),
+ array('tocelement',array(2,' HeaderZ ')),
+ array('tocitem_close',array(2)),
+ array('tocbranch_close',array(2)),
+ array('tocitem_close',array(1)),
+ array('tocbranch_close',array(1)),
+ array('toc_close',array()),
+ array('p_open',array()),
+ array('cdata',array("abc")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('cdata',array("def")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('header',array(' HeaderX ',2)),
+ array('section_open',array(2)),
+ array('p_open',array()),
+ array('cdata',array("X")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderY ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array("Y")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderZ ',2)),
+ array('section_open',array(2)),
+ array('p_open',array()),
+ array('cdata',array("Z")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+ }
+
+ function testTocAllLevels() {
+ $this->P->addMode('header',new Doku_Parser_Mode_Header());
+ $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
+ $this->P->parse('abc
+def
+====== HeaderV ======
+V
+===== HeaderW =====
+W
+==== HeaderX ====
+X
+=== HeaderY ===
+Y
+== HeaderZ ==
+Z
+');
+ $calls = array(
+ array('document_start',array()),
+ array('toc_open',array()),
+ array('tocbranch_open',array(1)),
+ array('tocitem_open',array(1)),
+ array('tocelement',array(1,' HeaderV ')),
+ array('tocbranch_open',array(2)),
+ array('tocitem_open',array(2)),
+ array('tocelement',array(2,' HeaderW ')),
+ array('tocbranch_open',array(3)),
+ array('tocitem_open',array(3)),
+ array('tocelement',array(3,' HeaderX ')),
+ array('tocitem_close',array(3)),
+ array('tocbranch_close',array(3)),
+ array('tocitem_close',array(2)),
+ array('tocbranch_close',array(2)),
+ array('tocitem_close',array(1)),
+ array('tocbranch_close',array(1)),
+ array('toc_close',array()),
+ array('p_open',array()),
+ array('cdata',array("abc")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('cdata',array("def")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('header',array(' HeaderV ',1)),
+ array('section_open',array(1)),
+ array('p_open',array()),
+ array('cdata',array("V")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderW ',2)),
+ array('section_open',array(2)),
+ array('p_open',array()),
+ array('cdata',array("W")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderX ',3)),
+ array('section_open',array(3)),
+ array('p_open',array()),
+ array('cdata',array("X")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderY ',4)),
+ array('section_open',array(4)),
+ array('p_open',array()),
+ array('cdata',array("Y")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_close',array()),
+ array('header',array(' HeaderZ ',5)),
+ array('section_open',array(5)),
+ array('p_open',array()),
+ array('cdata',array("Z")),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('p_open',array()),
+ array('p_close',array()),
+ array('section_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_TocSections();
+ $test->run(new HtmlReporter());
+}
diff --git a/_test/cases/inc/parser/parser_unformatted.test.php b/_test/cases/inc/parser/parser_unformatted.test.php
new file mode 100644
index 000000000..e9c1fce70
--- /dev/null
+++ b/_test/cases/inc/parser/parser_unformatted.test.php
@@ -0,0 +1,49 @@
+<?php
+require_once 'parser.test.php';
+
+class TestOfDoku_Parser_Unformatted extends TestOfDoku_Parser {
+
+ function TestOfDoku_Parser_Unformatted() {
+ $this->UnitTestCase('TestOfDoku_Parser_Unformatted');
+ }
+
+ function testNowiki() {
+ $this->P->addMode('unformatted',new Doku_Parser_Mode_Unformatted());
+ $this->P->parse("Foo <nowiki>testing</nowiki> Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('unformatted',array('testing')),
+ array('cdata',array(' Bar'."\n")),
+ array('p_close',array()),
+ array('document_end',array()),
+ );
+ $this->assertEqual(array_map('stripByteIndex',$this->H->calls),$calls);
+
+ }
+
+ function testDoublePercent() {
+ $this->P->addMode('unformatted',new Doku_Parser_Mode_Unformatted());
+ $this->P->parse("Foo %%testing%% Bar");
+ $calls = array (
+ array('document_start',array()),
+ array('p_open',array()),
+ array('cdata',array("\n".'Foo ')),
+ array('unformatted',array('testing')),
+ array('cdata',array(' Bar'."\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_Unformatted();
+ $test->run(new HtmlReporter());
+}
diff --git a/_test/runtests.php b/_test/runtests.php
index ba9bc4b1d..4e0f97b50 100755
--- a/_test/runtests.php
+++ b/_test/runtests.php
@@ -4,6 +4,7 @@ ini_set('memory_limit','128M');
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/');
define('TEST_ROOT', dirname(__FILE__));
define('TMPL_FILESCHEME_PATH', TEST_ROOT . '/filescheme/');
+define('TEST_RUNNING',TRUE);
error_reporting(E_ALL);
require_once 'lib/testmanager.php';