xref: /dokuwiki/_test/tests/inc/parser/parser_footnote.test.php (revision 79e79377626799a77c11aa7849cb9c64305590c8)
1<?php
2require_once 'parser.inc.php';
3
4class TestOfDoku_Parser_Footnote extends TestOfDoku_Parser {
5
6    function setUp() {
7        parent::setUp();
8        $this->P->addMode('footnote',new Doku_Parser_Mode_Footnote());
9    }
10
11    function testFootnote() {
12        $this->P->parse('Foo (( testing )) Bar');
13        $calls = array (
14            array('document_start',array()),
15            array('p_open',array()),
16            array('cdata',array("\n".'Foo ')),
17            array('nest', array ( array (
18              array('footnote_open',array()),
19              array('cdata',array(' testing ')),
20              array('footnote_close',array()),
21            ))),
22            array('cdata',array(' Bar')),
23            array('p_close',array()),
24            array('document_end',array()),
25        );
26        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
27    }
28
29    function testNotAFootnote() {
30        $this->P->parse("Foo (( testing\n Bar");
31        $calls = array (
32            array('document_start',array()),
33            array('p_open',array()),
34            array('cdata',array("\nFoo (( testing\n 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 testFootnoteLinefeed() {
42        $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
43        $this->P->parse("Foo (( testing\ntesting )) Bar");
44        $calls = array (
45            array('document_start',array()),
46            array('p_open',array()),
47            array('cdata',array('Foo ')),
48            array('nest', array ( array (
49              array('footnote_open',array()),
50              array('cdata',array(" testing\ntesting ")),
51              array('footnote_close',array()),
52            ))),
53            array('cdata',array(' Bar')),
54            array('p_close',array()),
55            array('document_end',array()),
56        );
57        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
58    }
59
60    function testFootnoteNested() {
61        $this->P->parse('Foo (( x((y))z )) Bar');
62        $calls = array (
63            array('document_start',array()),
64            array('p_open',array()),
65            array('cdata',array("\n".'Foo ')),
66            array('nest', array ( array (
67              array('footnote_open',array()),
68              array('cdata',array(' x((y')),
69              array('footnote_close',array()),
70            ))),
71            array('cdata',array('z )) Bar')),
72            array('p_close',array()),
73            array('document_end',array()),
74        );
75        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
76    }
77
78    function testFootnoteEol() {
79        $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
80        $this->P->parse("Foo \nX(( test\ning ))Y\n Bar");
81        $calls = array (
82            array('document_start',array()),
83            array('p_open',array()),
84            array('cdata',array('Foo '.DOKU_PARSER_EOL.'X')),
85            array('nest', array ( array (
86              array('footnote_open',array()),
87              array('cdata',array(" test\ning ")),
88              array('footnote_close',array()),
89            ))),
90            array('cdata',array('Y'.DOKU_PARSER_EOL.' Bar')),
91            array('p_close',array()),
92            array('document_end',array()),
93        );
94        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
95    }
96
97    function testFootnoteStrong() {
98        $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
99        $this->P->parse('Foo (( **testing** )) Bar');
100        $calls = array (
101            array('document_start',array()),
102            array('p_open',array()),
103            array('cdata',array("\n".'Foo ')),
104            array('nest', array ( array (
105              array('footnote_open',array()),
106              array('cdata',array(' ')),
107              array('strong_open',array()),
108              array('cdata',array('testing')),
109              array('strong_close',array()),
110              array('cdata',array(' ')),
111              array('footnote_close',array()),
112            ))),
113            array('cdata',array(' Bar')),
114            array('p_close',array()),
115            array('document_end',array()),
116        );
117        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
118    }
119
120    function testFootnoteHr() {
121        $this->P->addMode('hr',new Doku_Parser_Mode_HR());
122        $this->P->parse("Foo (( \n ---- \n )) Bar");
123        $calls = array (
124            array('document_start',array()),
125            array('p_open',array()),
126            array('cdata',array("\n".'Foo ')),
127            array('nest', array ( array (
128              array('footnote_open',array()),
129              array('cdata',array(' ')),
130              array('hr',array()),
131              array('cdata',array("\n ")),
132              array('footnote_close',array()),
133            ))),
134            array('cdata',array(' Bar')),
135            array('p_close',array()),
136            array('document_end',array()),
137        );
138        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
139    }
140
141    function testFootnoteCode() {
142        $this->P->addMode('code',new Doku_Parser_Mode_Code());
143        $this->P->parse("Foo (( <code>Test</code> )) Bar");
144        $calls = array (
145            array('document_start',array()),
146            array('p_open',array()),
147            array('cdata',array("\n".'Foo ')),
148            array('nest', array ( array (
149              array('footnote_open',array()),
150              array('cdata',array(' ')),
151              array('code',array('Test',null,null)),
152              array('cdata',array(' ')),
153              array('footnote_close',array()),
154            ))),
155            array('cdata',array(' Bar')),
156            array('p_close',array()),
157            array('document_end',array()),
158        );
159        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
160    }
161
162    function testFootnotePreformatted() {
163        $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
164        $this->P->parse("Foo (( \n  Test\n )) Bar");
165        $calls = array (
166            array('document_start',array()),
167            array('p_open',array()),
168            array('cdata',array("\n".'Foo ')),
169            array('nest', array ( array (
170              array('footnote_open',array()),
171              array('cdata',array(' ')),
172              array('preformatted',array('Test')),
173              array('cdata',array(' ')),
174              array('footnote_close',array()),
175            ))),
176            array('cdata',array(' Bar')),
177            array('p_close',array()),
178            array('document_end',array()),
179        );
180        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
181    }
182
183    function testFootnotePreformattedEol() {
184        $this->P->addMode('preformatted',new Doku_Parser_Mode_Preformatted());
185        $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
186        $this->P->parse("Foo (( \n  Test\n )) Bar");
187        $calls = array (
188            array('document_start',array()),
189            array('p_open',array()),
190            array('cdata',array('Foo ')),
191            array('nest', array ( array (
192              array('footnote_open',array()),
193              array('cdata',array(' ')),
194              array('preformatted',array('Test')),
195              array('cdata',array(' ')),
196              array('footnote_close',array()),
197            ))),
198            array('cdata',array(' Bar')),
199            array('p_close',array()),
200            array('document_end',array()),
201        );
202
203        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
204    }
205
206    function testFootnoteUnformatted() {
207        $this->P->addMode('unformatted',new Doku_Parser_Mode_Unformatted());
208        $this->P->parse("Foo (( <nowiki>Test</nowiki> )) Bar");
209        $calls = array (
210            array('document_start',array()),
211            array('p_open',array()),
212            array('cdata',array("\n".'Foo ')),
213            array('nest', array ( array (
214              array('footnote_open',array()),
215              array('cdata',array(' ')),
216              array('unformatted',array('Test')),
217              array('cdata',array(' ')),
218              array('footnote_close',array()),
219            ))),
220            array('cdata',array(' Bar')),
221            array('p_close',array()),
222            array('document_end',array()),
223        );
224        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
225    }
226
227    function testFootnoteNotHeader() {
228        $this->P->addMode('unformatted',new Doku_Parser_Mode_Unformatted());
229        $this->P->parse("Foo (( \n====Test====\n )) Bar");
230        $calls = array (
231            array('document_start',array()),
232            array('p_open',array()),
233            array('cdata',array("\n".'Foo ')),
234            array('nest', array ( array (
235              array('footnote_open',array()),
236              array('cdata',array(" \n====Test====\n ")),
237              array('footnote_close',array()),
238            ))),
239            array('cdata',array(' Bar')),
240            array('p_close',array()),
241            array('document_end',array()),
242        );
243        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
244    }
245
246    function testFootnoteTable() {
247        $this->P->addMode('table',new Doku_Parser_Mode_Table());
248        $this->P->parse("Foo ((
249| Row 0 Col 1    | Row 0 Col 2     | Row 0 Col 3        |
250| Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
251 )) Bar");
252        $calls = array (
253            array('document_start',array()),
254            array('p_open',array()),
255            array('cdata',array("\n".'Foo ')),
256            array('nest', array ( array (
257              array('footnote_open',array()),
258              array('table_open',array(3, 2, 8)),
259              array('tablerow_open',array()),
260              array('tablecell_open',array(1,'left',1)),
261              array('cdata',array(' Row 0 Col 1    ')),
262              array('tablecell_close',array()),
263              array('tablecell_open',array(1,'left',1)),
264              array('cdata',array(' Row 0 Col 2     ')),
265              array('tablecell_close',array()),
266              array('tablecell_open',array(1,'left',1)),
267              array('cdata',array(' Row 0 Col 3        ')),
268              array('tablecell_close',array()),
269              array('tablerow_close',array()),
270              array('tablerow_open',array()),
271              array('tablecell_open',array(1,'left',1)),
272              array('cdata',array(' Row 1 Col 1    ')),
273              array('tablecell_close',array()),
274              array('tablecell_open',array(1,'left',1)),
275              array('cdata',array(' Row 1 Col 2     ')),
276              array('tablecell_close',array()),
277              array('tablecell_open',array(1,'left',1)),
278              array('cdata',array(' Row 1 Col 3        ')),
279              array('tablecell_close',array()),
280              array('tablerow_close',array()),
281              array('table_close',array(123)),
282              array('cdata',array(' ')),
283              array('footnote_close',array()),
284            ))),
285            array('cdata',array(' Bar')),
286            array('p_close',array()),
287            array('document_end',array()),
288        );
289        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
290    }
291
292    function testFootnoteList() {
293        $this->P->addMode('listblock',new Doku_Parser_Mode_ListBlock());
294        $this->P->parse("Foo ((
295  *A
296    * B
297  * C
298 )) Bar");
299        $calls = array (
300            array('document_start',array()),
301            array('p_open',array()),
302            array('cdata',array("\n".'Foo ')),
303            array('nest', array ( array (
304              array('footnote_open',array()),
305              array('listu_open',array()),
306              array('listitem_open',array(1,Doku_Handler_List::NODE)),
307              array('listcontent_open',array()),
308              array('cdata',array("A")),
309              array('listcontent_close',array()),
310              array('listu_open',array()),
311              array('listitem_open',array(2)),
312              array('listcontent_open',array()),
313              array('cdata',array(' B')),
314              array('listcontent_close',array()),
315              array('listitem_close',array()),
316              array('listu_close',array()),
317              array('listitem_close',array()),
318              array('listitem_open',array(1)),
319              array('listcontent_open',array()),
320              array('cdata',array(' C')),
321              array('listcontent_close',array()),
322              array('listitem_close',array()),
323              array('listu_close',array()),
324              array('cdata',array(' ')),
325              array('footnote_close',array()),
326            ))),
327            array('cdata',array(' Bar')),
328            array('p_close',array()),
329            array('document_end',array()),
330        );
331        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
332    }
333
334    function testFootnoteQuote() {
335        $this->P->addMode('quote',new Doku_Parser_Mode_Quote());
336        $this->P->parse("Foo ((
337> def
338>>ghi
339 )) Bar");
340        $calls = array (
341            array('document_start',array()),
342            array('p_open',array()),
343            array('cdata',array("\n".'Foo ')),
344            array('nest', array ( array (
345              array('footnote_open',array()),
346              array('quote_open',array()),
347              array('cdata',array(" def")),
348              array('quote_open',array()),
349              array('cdata',array("ghi")),
350              array('quote_close',array()),
351              array('quote_close',array()),
352              array('cdata',array(' ')),
353              array('footnote_close',array()),
354            ))),
355            array('cdata',array(' Bar')),
356            array('p_close',array()),
357            array('document_end',array()),
358        );
359
360        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
361    }
362
363    function testFootnoteNesting() {
364        $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
365        $this->P->parse("(( a ** (( b )) ** c ))");
366
367        $calls = array(
368            array('document_start',array()),
369            array('p_open',array()),
370            array('cdata',array("\n")),
371            array('nest', array ( array (
372              array('footnote_open',array()),
373              array('cdata',array(' a ')),
374              array('strong_open',array()),
375              array('cdata',array(' (( b ')),
376              array('footnote_close',array()),
377            ))),
378            array('cdata',array(" ")),
379            array('strong_close',array()),
380            array('cdata',array(" c ))")),
381            array('p_close',array()),
382            array('document_end',array()),
383        );
384
385        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
386    }
387}
388
389