xref: /dokuwiki/_test/tests/inc/parser/parser_preformatted.test.php (revision 9cf8b6e0e4b94473739d2b36a906a848b9410f7f)
1<?php
2require_once 'parser.inc.php';
3
4class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
5
6    function testFile() {
7        $this->P->addMode('file',new Doku_Parser_Mode_File());
8        $this->P->parse('Foo <file>testing</file> Bar');
9        $calls = array (
10            array('document_start',array()),
11            array('p_open',array()),
12            array('cdata',array("\n".'Foo ')),
13            array('p_close',array()),
14            array('file',array('testing',null,null)),
15            array('p_open',array()),
16            array('cdata',array(' Bar')),
17            array('p_close',array()),
18            array('document_end',array()),
19        );
20
21        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
22    }
23
24    function testCode() {
25        $this->P->addMode('code',new Doku_Parser_Mode_Code());
26        $this->P->parse('Foo <code>testing</code> Bar');
27        $calls = array (
28            array('document_start',array()),
29            array('p_open',array()),
30            array('cdata',array("\n".'Foo ')),
31            array('p_close',array()),
32            array('code',array('testing', null, null)),
33            array('p_open',array()),
34            array('cdata',array(' Bar')),
35            array('p_close',array()),
36            array('document_end',array()),
37        );
38        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
39    }
40
41    function testCodeWhitespace() {
42        $this->P->addMode('code',new Doku_Parser_Mode_Code());
43        $this->P->parse("Foo <code \n>testing</code> Bar");
44        $calls = array (
45            array('document_start',array()),
46            array('p_open',array()),
47            array('cdata',array("\n".'Foo ')),
48            array('p_close',array()),
49            array('code',array('testing', null, null)),
50            array('p_open',array()),
51            array('cdata',array(' Bar')),
52            array('p_close',array()),
53            array('document_end',array()),
54        );
55        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
56    }
57
58    function testCodeLang() {
59        $this->P->addMode('code',new Doku_Parser_Mode_Code());
60        $this->P->parse("Foo <code php>testing</code> Bar");
61        $calls = array (
62            array('document_start',array()),
63            array('p_open',array()),
64            array('cdata',array("\n".'Foo ')),
65            array('p_close',array()),
66            array('code',array('testing', 'php', null)),
67            array('p_open',array()),
68            array('cdata',array(' Bar')),
69            array('p_close',array()),
70            array('document_end',array()),
71        );
72        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
73    }
74
75    function testPreformatted() {
76        $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
77        $this->P->parse("F  oo\n  x  \n    y  \nBar\n");
78        $calls = array (
79            array('document_start',array()),
80            array('p_open',array()),
81            array('cdata',array("\nF  oo")),
82            array('p_close',array()),
83            array('preformatted',array("x  \n  y  ")),
84            array('p_open',array()),
85            array('cdata',array('Bar')),
86            array('p_close',array()),
87            array('document_end',array()),
88        );
89        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
90    }
91
92    function testPreformattedWinEOL() {
93        $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
94        $this->P->parse("F  oo\r\n  x  \r\n    y  \r\nBar\r\n");
95        $calls = array (
96            array('document_start',array()),
97            array('p_open',array()),
98            array('cdata',array("\nF  oo")),
99            array('p_close',array()),
100            array('preformatted',array("x  \n  y  ")),
101            array('p_open',array()),
102            array('cdata',array('Bar')),
103            array('p_close',array()),
104            array('document_end',array()),
105        );
106        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
107    }
108
109    function testPreformattedTab() {
110        $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
111        $this->P->parse("F  oo\n\tx\t\n\t\ty\t\nBar\n");
112        $calls = array (
113            array('document_start',array()),
114            array('p_open',array()),
115            array('cdata',array("\nF  oo")),
116            array('p_close',array()),
117            array('preformatted',array("x\t\n\ty\t")),
118            array('p_open',array()),
119            array('cdata',array("Bar")),
120            array('p_close',array()),
121            array('document_end',array()),
122        );
123        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
124    }
125
126    function testPreformattedTabWinEOL() {
127        $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
128        $this->P->parse("F  oo\r\n\tx\t\r\n\t\ty\t\r\nBar\r\n");
129        $calls = array (
130            array('document_start',array()),
131            array('p_open',array()),
132            array('cdata',array("\nF  oo")),
133            array('p_close',array()),
134            array('preformatted',array("x\t\n\ty\t")),
135            array('p_open',array()),
136            array('cdata',array("Bar")),
137            array('p_close',array()),
138            array('document_end',array()),
139        );
140        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
141    }
142
143    function testPreformattedList() {
144        $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
145        $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock());
146        $this->P->parse("  - x \n  * y \nF  oo\n  x  \n    y  \n  -X\n  *Y\nBar\n");
147        $calls = array (
148            array('document_start',array()),
149            array('listo_open',array()),
150            array('listitem_open',array(1)),
151            array('listcontent_open',array()),
152            array('cdata',array(" x ")),
153            array('listcontent_close',array()),
154            array('listitem_close',array()),
155            array('listo_close',array()),
156            array('listu_open',array()),
157            array('listitem_open',array(1)),
158            array('listcontent_open',array()),
159            array('cdata',array(" y ")),
160            array('listcontent_close',array()),
161            array('listitem_close',array()),
162            array('listu_close',array()),
163            array('p_open',array()),
164            array('cdata',array("F  oo")),
165            array('p_close',array()),
166            array('preformatted',array("x  \n  y  \n-X\n*Y")),
167            array('p_open',array()),
168            array('cdata',array("Bar")),
169            array('p_close',array()),
170            array('document_end',array()),
171        );
172        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
173    }
174
175    // test for php
176    function testPHP() {
177
178        $this->P->addMode('php',new Doku_Parser_Mode_PHP());
179        $this->P->parse('Foo <php>testing</php> Bar');
180        $calls = array (
181            array('document_start',array()),
182            array('p_open',array()),
183            array('cdata',array("\n".'Foo ')),
184            array('php',array('testing')),
185            array('cdata',array(' Bar')),
186            array('p_close',array()),
187            array('document_end',array()),
188        );
189        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
190    }
191
192    // test with for HTML
193    function testHTML() {
194
195        $this->P->addMode('html',new Doku_Parser_Mode_HTML());
196        $this->P->parse('Foo <html>testing</html> Bar');
197        $calls = array (
198            array('document_start',array()),
199            array('p_open',array()),
200            array('cdata',array("\n".'Foo ')),
201            array('html',array('testing')),
202            array('cdata',array(' Bar')),
203            array('p_close',array()),
204            array('document_end',array()),
205        );
206        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
207    }
208
209
210
211    function testPreformattedPlusHeaderAndEol() {
212        // Note that EOL must come after preformatted!
213        $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
214        $this->P->addMode('header',new Doku_Parser_Mode_Header());
215        $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
216        $this->P->parse("F  oo\n  ==Test==\n    y  \nBar\n");
217        $calls = array (
218            array('document_start',array()),
219            array('p_open',array()),
220            array('cdata',array("F  oo")),
221            array('p_close',array()),
222            array('preformatted',array("==Test==\n  y  ")),
223            array('p_open',array()),
224            array('cdata',array('Bar')),
225            array('p_close',array()),
226            array('document_end',array()),
227        );
228        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
229    }
230}
231
232