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