xref: /dokuwiki/_test/tests/inc/parser/parser_table.test.php (revision e0328e30d24321e319e2733192bf829b9000c5eb)
1<?php
2require_once 'parser.inc.php';
3
4class TestOfDoku_Parser_Table extends TestOfDoku_Parser {
5
6    function testTable() {
7        $this->P->addMode('table',new Doku_Parser_Mode_Table());
8        $this->P->parse('
9abc
10| Row 0 Col 1    | Row 0 Col 2     | Row 0 Col 3        |
11| Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
12def');
13        $calls = array (
14            array('document_start',array()),
15            array('p_open',array()),
16            array('cdata',array("\n\nabc")),
17            array('p_close',array()),
18            array('table_open',array(3, 2, 6)),
19            array('tablerow_open',array()),
20            array('tablecell_open',array(1,'left',1)),
21            array('cdata',array(' Row 0 Col 1    ')),
22            array('tablecell_close',array()),
23            array('tablecell_open',array(1,'left',1)),
24            array('cdata',array(' Row 0 Col 2     ')),
25            array('tablecell_close',array()),
26            array('tablecell_open',array(1,'left',1)),
27            array('cdata',array(' Row 0 Col 3        ')),
28            array('tablecell_close',array()),
29            array('tablerow_close',array()),
30            array('tablerow_open',array()),
31            array('tablecell_open',array(1,'left',1)),
32            array('cdata',array(' Row 1 Col 1    ')),
33            array('tablecell_close',array()),
34            array('tablecell_open',array(1,'left',1)),
35            array('cdata',array(' Row 1 Col 2     ')),
36            array('tablecell_close',array()),
37            array('tablecell_open',array(1,'left',1)),
38            array('cdata',array(' Row 1 Col 3        ')),
39            array('tablecell_close',array()),
40            array('tablerow_close',array()),
41            array('table_close',array(121)),
42            array('p_open',array()),
43            array('cdata',array('def')),
44            array('p_close',array()),
45            array('document_end',array()),
46        );
47        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
48    }
49
50    function testTableWinEOL() {
51        $this->P->addMode('table',new Doku_Parser_Mode_Table());
52        $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");
53        $calls = array (
54            array('document_start',array()),
55            array('p_open',array()),
56            array('cdata',array("\n\nabc")),
57            array('p_close',array()),
58            array('table_open',array(3, 2, 6)),
59            array('tablerow_open',array()),
60            array('tablecell_open',array(1,'left',1)),
61            array('cdata',array(' Row 0 Col 1    ')),
62            array('tablecell_close',array()),
63            array('tablecell_open',array(1,'left',1)),
64            array('cdata',array(' Row 0 Col 2     ')),
65            array('tablecell_close',array()),
66            array('tablecell_open',array(1,'left',1)),
67            array('cdata',array(' Row 0 Col 3        ')),
68            array('tablecell_close',array()),
69            array('tablerow_close',array()),
70            array('tablerow_open',array()),
71            array('tablecell_open',array(1,'left',1)),
72            array('cdata',array(' Row 1 Col 1    ')),
73            array('tablecell_close',array()),
74            array('tablecell_open',array(1,'left',1)),
75            array('cdata',array(' Row 1 Col 2     ')),
76            array('tablecell_close',array()),
77            array('tablecell_open',array(1,'left',1)),
78            array('cdata',array(' Row 1 Col 3        ')),
79            array('tablecell_close',array()),
80            array('tablerow_close',array()),
81            array('table_close',array(121)),
82            array('p_open',array()),
83            array('cdata',array('def')),
84            array('p_close',array()),
85            array('document_end',array()),
86        );
87        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
88    }
89
90    function testEmptyTable() {
91        $this->P->addMode('table',new Doku_Parser_Mode_Table());
92        $this->P->parse('
93abc
94|
95def');
96
97        $calls = array (
98            array('document_start',array()),
99            array('p_open',array()),
100            array('cdata',array("\n\nabc")),
101            array('p_close',array()),
102            array('table_open',array(0, 1, 6)),
103            array('tablerow_open',array()),
104            array('tablerow_close',array()),
105            array('table_close',array(7)),
106            array('p_open',array()),
107            array('cdata',array('def')),
108            array('p_close',array()),
109            array('document_end',array()),
110        );
111
112        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
113    }
114
115    function testTableHeaders() {
116        $this->P->addMode('table',new Doku_Parser_Mode_Table());
117        $this->P->parse('
118abc
119^ X | Y ^ Z |
120def');
121
122        $calls = array (
123            array('document_start',array()),
124            array('p_open',array()),
125            array('cdata',array("\n\nabc")),
126            array('p_close',array()),
127            array('table_open',array(3, 1, 6)),
128            array('tablerow_open',array()),
129            array('tableheader_open',array(1,NULL,1)),
130            array('cdata',array(' X ')),
131            array('tableheader_close',array()),
132            array('tablecell_open',array(1,NULL,1)),
133            array('cdata',array(' Y ')),
134            array('tablecell_close',array()),
135            array('tableheader_open',array(1,NULL,1)),
136            array('cdata',array(' Z ')),
137            array('tableheader_close',array()),
138            array('tablerow_close',array()),
139            array('table_close',array(19)),
140            array('p_open',array()),
141            array('cdata',array('def')),
142            array('p_close',array()),
143            array('document_end',array()),
144        );
145
146        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
147
148    }
149
150    function testTableHead() {
151        $this->P->addMode('table',new Doku_Parser_Mode_Table());
152        $this->P->parse('
153abc
154^ X ^ Y ^ Z ^
155def');
156
157        $calls = array (
158            array('document_start',array()),
159            array('p_open',array()),
160            array('cdata',array("\n\nabc")),
161            array('p_close',array()),
162            array('table_open',array(3, 1, 6)),
163            array('tablethead_open',array()),
164            array('tablerow_open',array()),
165            array('tableheader_open',array(1,NULL,1)),
166            array('cdata',array(' X ')),
167            array('tableheader_close',array()),
168            array('tableheader_open',array(1,NULL,1)),
169            array('cdata',array(' Y ')),
170            array('tableheader_close',array()),
171            array('tableheader_open',array(1,NULL,1)),
172            array('cdata',array(' Z ')),
173            array('tableheader_close',array()),
174            array('tablerow_close',array()),
175            array('tablethead_close',array()),
176            array('table_close',array(19)),
177            array('p_open',array()),
178            array('cdata',array('def')),
179            array('p_close',array()),
180            array('document_end',array()),
181        );
182
183        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
184
185    }
186
187    function testTableHeadMultiline() {
188        $this->P->addMode('table',new Doku_Parser_Mode_Table());
189        $this->P->parse('
190abc
191^ X1 ^ Y1 ^ Z1 ^
192^ X2 ^ Y2 ^ Z2 ^
193| A | B | C |
194def');
195
196        $calls = array (
197            array('document_start',array()),
198            array('p_open',array()),
199            array('cdata',array("\n\nabc")),
200            array('p_close',array()),
201            array('table_open',array(3, 3, 6)),
202            array('tablethead_open',array()),
203            array('tablerow_open',array()),
204            array('tableheader_open',array(1,NULL,1)),
205            array('cdata',array(' X1 ')),
206            array('tableheader_close',array()),
207            array('tableheader_open',array(1,NULL,1)),
208            array('cdata',array(' Y1 ')),
209            array('tableheader_close',array()),
210            array('tableheader_open',array(1,NULL,1)),
211            array('cdata',array(' Z1 ')),
212            array('tableheader_close',array()),
213            array('tablerow_close',array()),
214            array('tablerow_open',array()),
215            array('tableheader_open',array(1,NULL,1)),
216            array('cdata',array(' X2 ')),
217            array('tableheader_close',array()),
218            array('tableheader_open',array(1,NULL,1)),
219            array('cdata',array(' Y2 ')),
220            array('tableheader_close',array()),
221            array('tableheader_open',array(1,NULL,1)),
222            array('cdata',array(' Z2 ')),
223            array('tableheader_close',array()),
224            array('tablerow_close',array()),
225            array('tablethead_close',array()),
226            array('tablerow_open',array()),
227            array('tablecell_open',array(1,NULL,1)),
228            array('cdata',array(' A ')),
229            array('tablecell_close',array()),
230            array('tablecell_open',array(1,NULL,1)),
231            array('cdata',array(' B ')),
232            array('tablecell_close',array()),
233            array('tablecell_open',array(1,NULL,1)),
234            array('cdata',array(' C ')),
235            array('tablecell_close',array()),
236            array('tablerow_close',array()),
237            array('table_close',array(53)),
238            array('p_open',array()),
239            array('cdata',array('def')),
240            array('p_close',array()),
241            array('document_end',array()),
242        );
243
244        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
245
246    }
247
248    function testCellAlignment() {
249        $this->P->addMode('table',new Doku_Parser_Mode_Table());
250        $this->P->parse('
251abc
252|  X | Y  ^  Z  |
253def');
254
255        $calls = array (
256            array('document_start',array()),
257            array('p_open',array()),
258            array('cdata',array("\n\nabc")),
259            array('p_close',array()),
260            array('table_open',array(3, 1, 6)),
261            array('tablerow_open',array()),
262            array('tablecell_open',array(1,'right',1)),
263            array('cdata',array('  X ')),
264            array('tablecell_close',array()),
265            array('tablecell_open',array(1,'left',1)),
266            array('cdata',array(' Y  ')),
267            array('tablecell_close',array()),
268            array('tableheader_open',array(1,'center',1)),
269            array('cdata',array('  Z  ')),
270            array('tableheader_close',array()),
271            array('tablerow_close',array()),
272            array('table_close',array(23)),
273            array('p_open',array()),
274            array('cdata',array('def')),
275            array('p_close',array()),
276            array('document_end',array()),
277        );
278
279        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
280    }
281
282    function testCellSpan() {
283        $this->P->addMode('table',new Doku_Parser_Mode_Table());
284        $this->P->parse('
285abc
286|  d || e |
287| f ^ ^|
288||||
289def');
290
291        $calls = array (
292            array('document_start',array()),
293            array('p_open',array()),
294            array('cdata',array("\n\nabc")),
295            array('p_close',array()),
296            array('table_open',array(3, 3, 6)),
297            array('tablerow_open',array()),
298            array('tablecell_open',array(2,'right',1)),
299            array('cdata',array('  d ')),
300            array('tablecell_close',array()),
301            array('tablecell_open',array(1,NULL,1)),
302            array('cdata',array(' e ')),
303            array('tablecell_close',array()),
304            array('tablerow_close',array()),
305            array('tablerow_open',array()),
306            array('tablecell_open',array(1,NULL,1)),
307            array('cdata',array(' f ')),
308            array('tablecell_close',array()),
309            array('tableheader_open',array(2,NULL,1)),
310            array('cdata',array(' ')),
311            array('tableheader_close',array()),
312            array('tablerow_close',array()),
313            array('tablerow_open',array()),
314            array('tablerow_close',array()),
315            array('table_close',array(31)),
316            array('p_open',array()),
317            array('cdata',array('def')),
318            array('p_close',array()),
319            array('document_end',array()),
320        );
321        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
322    }
323
324    function testCellRowSpan() {
325        $this->P->addMode('table',new Doku_Parser_Mode_Table());
326        $this->P->parse('
327abc
328| a |  c:::||
329|:::^ d  | e|
330|b  ^  ::: |:::f|
331def');
332
333        $calls = array (
334            array('document_start',array()),
335            array('p_open',array()),
336            array('cdata',array("\n\nabc")),
337            array('p_close',array()),
338            array('table_open',array(3, 3, 6)),
339            array('tablerow_open',array()),
340            array('tablecell_open',array(1,NULL,2)),
341            array('cdata',array(' a ')),
342            array('tablecell_close',array()),
343            array('tablecell_open',array(2,'right',1)),
344            array('cdata',array('  c:::')),
345            array('tablecell_close',array()),
346            array('tablerow_close',array()),
347            array('tablerow_open',array()),
348            array('tableheader_open',array(1,'left',2)),
349            array('cdata',array(' d  ')),
350            array('tableheader_close',array()),
351            array('tablecell_open',array(1,NULL,1)),
352            array('cdata',array(' e')),
353            array('tablecell_close',array()),
354            array('tablerow_close',array()),
355            array('tablerow_open',array()),
356            array('tablecell_open',array(1,'left',1)),
357            array('cdata',array('b  ')),
358            array('tablecell_close',array()),
359            array('tablecell_open',array(1,NULL,1)),
360            array('cdata',array(':::f')),
361            array('tablecell_close',array()),
362            array('tablerow_close',array()),
363            array('table_close',array(51)),
364            array('p_open',array()),
365            array('cdata',array('def')),
366            array('p_close',array()),
367            array('document_end',array()),
368        );
369        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
370    }
371
372    function testCellRowSpanFirstRow() {
373        $this->P->addMode('table',new Doku_Parser_Mode_Table());
374        $this->P->parse('
375abc
376|::: ^  d:::^:::|  :::  |
377| b ^ e  | | ::: |
378|c  ^  ::: | |:::|
379def');
380
381        $calls = array (
382            array('document_start',array()),
383            array('p_open',array()),
384            array('cdata',array("\n\nabc")),
385            array('p_close',array()),
386            array('table_open',array(4, 3, 6)),
387            array('tablerow_open',array()),
388            array('tablecell_open',array(1,NULL,1)),
389            array('cdata',array('')),
390            array('tablecell_close',array()),
391            array('tableheader_open',array(1,'right',1)),
392            array('cdata',array('  d:::')),
393            array('tableheader_close',array()),
394            array('tableheader_open',array(1,NULL,1)),
395            array('cdata',array('')),
396            array('tableheader_close',array()),
397            array('tablecell_open',array(1,NULL,3)),
398            array('cdata',array('')),
399            array('tablecell_close',array()),
400            array('tablerow_close',array()),
401            array('tablerow_open',array()),
402            array('tablecell_open',array(1,NULL,1)),
403            array('cdata',array(' b ')),
404            array('tablecell_close',array()),
405            array('tableheader_open',array(1,'left',2)),
406            array('cdata',array(' e  ')),
407            array('tableheader_close',array()),
408            array('tablecell_open',array(1,NULL,1)),
409            array('cdata',array(' ')),
410            array('tablecell_close',array()),
411            array('tablerow_close',array()),
412            array('tablerow_open',array()),
413            array('tablecell_open',array(1,'left',1)),
414            array('cdata',array('c  ')),
415            array('tablecell_close',array()),
416            array('tablecell_open',array(1,NULL,1)),
417            array('cdata',array(' ')),
418            array('tablecell_close',array()),
419            array('tablerow_close',array()),
420
421            array('table_close',array(69)),
422            array('p_open',array()),
423            array('cdata',array('def')),
424            array('p_close',array()),
425            array('document_end',array()),
426        );
427        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
428    }
429
430    function testRowSpanTableHead() {
431        $this->P->addMode('table',new Doku_Parser_Mode_Table());
432        $this->P->parse('
433abc
434^ X1 ^ Y1 ^ Z1 ^
435^ X2 ^ ::: ^ Z2 ^
436| A3 | B3 | C3 |
437def');
438
439        $calls = array (
440            array('document_start',array()),
441            array('p_open',array()),
442            array('cdata',array("\n\nabc")),
443            array('p_close',array()),
444            array('table_open',array(3, 3, 6)),
445            array('tablethead_open',array()),
446            array('tablerow_open',array()),
447            array('tableheader_open',array(1,NULL,1)),
448            array('cdata',array(' X1 ')),
449            array('tableheader_close',array()),
450            array('tableheader_open',array(1,NULL,2)),
451            array('cdata',array(' Y1 ')),
452            array('tableheader_close',array()),
453            array('tableheader_open',array(1,NULL,1)),
454            array('cdata',array(' Z1 ')),
455            array('tableheader_close',array()),
456            array('tablerow_close',array()),
457            array('tablerow_open',array()),
458            array('tableheader_open',array(1,NULL,1)),
459            array('cdata',array(' X2 ')),
460            array('tableheader_close',array()),
461            array('tableheader_open',array(1,NULL,1)),
462            array('cdata',array(' Z2 ')),
463            array('tableheader_close',array()),
464            array('tablerow_close',array()),
465            array('tablethead_close',array()),
466            array('tablerow_open',array()),
467            array('tablecell_open',array(1,NULL,1)),
468            array('cdata',array(' A3 ')),
469            array('tablecell_close',array()),
470            array('tablecell_open',array(1,NULL,1)),
471            array('cdata',array(' B3 ')),
472            array('tablecell_close',array()),
473            array('tablecell_open',array(1,NULL,1)),
474            array('cdata',array(' C3 ')),
475            array('tablecell_close',array()),
476            array('tablerow_close',array()),
477            array('table_close',array(57)),
478            array('p_open',array()),
479            array('cdata',array('def')),
480            array('p_close',array()),
481            array('document_end',array()),
482        );
483
484        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
485
486    }
487
488    function testRowSpanAcrossTableHeadBoundary() {
489        $this->P->addMode('table',new Doku_Parser_Mode_Table());
490        $this->P->parse('
491abc
492^ X1 ^ Y1 ^ Z1 ^
493^ X2 ^ ::: ^ Z2 ^
494| A3 | ::: | C3 |
495| A4 | ::: | C4 |
496def');
497
498        $calls = array (
499            array('document_start',array()),
500            array('p_open',array()),
501            array('cdata',array("\n\nabc")),
502            array('p_close',array()),
503            array('table_open',array(3, 4, 6)),
504            array('tablethead_open',array()),
505            array('tablerow_open',array()),
506            array('tableheader_open',array(1,NULL,1)),
507            array('cdata',array(' X1 ')),
508            array('tableheader_close',array()),
509            array('tableheader_open',array(1,NULL,2)),
510            array('cdata',array(' Y1 ')),
511            array('tableheader_close',array()),
512            array('tableheader_open',array(1,NULL,1)),
513            array('cdata',array(' Z1 ')),
514            array('tableheader_close',array()),
515            array('tablerow_close',array()),
516            array('tablerow_open',array()),
517            array('tableheader_open',array(1,NULL,1)),
518            array('cdata',array(' X2 ')),
519            array('tableheader_close',array()),
520            array('tableheader_open',array(1,NULL,1)),
521            array('cdata',array(' Z2 ')),
522            array('tableheader_close',array()),
523            array('tablerow_close',array()),
524            array('tablethead_close',array()),
525            array('tablerow_open',array()),
526            array('tablecell_open',array(1,NULL,1)),
527            array('cdata',array(' A3 ')),
528            array('tablecell_close',array()),
529            array('tablecell_open',array(1,NULL,2)),
530            array('cdata',array('')),
531            array('tablecell_close',array()),
532            array('tablecell_open',array(1,NULL,1)),
533            array('cdata',array(' C3 ')),
534            array('tablecell_close',array()),
535            array('tablerow_close',array()),
536            array('tablerow_open',array()),
537            array('tablecell_open',array(1,NULL,1)),
538            array('cdata',array(' A4 ')),
539            array('tablecell_close',array()),
540            array('tablecell_open',array(1,NULL,1)),
541            array('cdata',array(' C4 ')),
542            array('tablecell_close',array()),
543            array('tablerow_close',array()),
544            array('table_close',array(76)),
545            array('p_open',array()),
546            array('cdata',array('def')),
547            array('p_close',array()),
548            array('document_end',array()),
549        );
550
551        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
552
553    }
554
555    function testCellAlignmentFormatting() {
556        $this->P->addMode('table',new Doku_Parser_Mode_Table());
557        $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
558        $this->P->parse('
559abc
560|  **X** | Y  ^  Z  |
561def');
562
563        $calls = array (
564            array('document_start',array()),
565            array('p_open',array()),
566            array('cdata',array("\n\nabc")),
567            array('p_close',array()),
568            array('table_open',array(3, 1, 6)),
569            array('tablerow_open',array()),
570            array('tablecell_open',array(1,'right',1)),
571            array('cdata',array('  ')),
572            array('strong_open',array()),
573            array('cdata',array('X')),
574            array('strong_close',array()),
575            array('cdata',array(' ')),
576            array('tablecell_close',array()),
577            array('tablecell_open',array(1,'left',1)),
578            array('cdata',array(' Y  ')),
579            array('tablecell_close',array()),
580            array('tableheader_open',array(1,'center',1)),
581            array('cdata',array('  Z  ')),
582            array('tableheader_close',array()),
583            array('tablerow_close',array()),
584            array('table_close',array(27)),
585            array('p_open',array()),
586            array('cdata',array('def')),
587            array('p_close',array()),
588            array('document_end',array()),
589        );
590
591        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
592
593    }
594
595    function testTableEol() {
596        $this->P->addMode('table',new Doku_Parser_Mode_Table());
597        $this->P->addMode('eol',new Doku_Parser_Mode_Eol());
598        $this->P->parse('
599abc
600| Row 0 Col 1    | Row 0 Col 2     | Row 0 Col 3        |
601| Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
602def');
603        $calls = array (
604            array('document_start',array()),
605            array('p_open',array()),
606            array('cdata',array("abc")),
607            array('p_close',array()),
608            array('table_open',array(3, 2, 6)),
609            array('tablerow_open',array()),
610            array('tablecell_open',array(1,'left',1)),
611            array('cdata',array(' Row 0 Col 1    ')),
612            array('tablecell_close',array()),
613            array('tablecell_open',array(1,'left',1)),
614            array('cdata',array(' Row 0 Col 2     ')),
615            array('tablecell_close',array()),
616            array('tablecell_open',array(1,'left',1)),
617            array('cdata',array(' Row 0 Col 3        ')),
618            array('tablecell_close',array()),
619            array('tablerow_close',array()),
620            array('tablerow_open',array()),
621            array('tablecell_open',array(1,'left',1)),
622            array('cdata',array(' Row 1 Col 1    ')),
623            array('tablecell_close',array()),
624            array('tablecell_open',array(1,'left',1)),
625            array('cdata',array(' Row 1 Col 2     ')),
626            array('tablecell_close',array()),
627            array('tablecell_open',array(1,'left',1)),
628            array('cdata',array(' Row 1 Col 3        ')),
629            array('tablecell_close',array()),
630            array('tablerow_close',array()),
631            array('table_close',array(121)),
632            array('p_open',array()),
633            array('cdata',array('def')),
634            array('p_close',array()),
635            array('document_end',array()),
636        );
637        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
638    }
639
640    // This is really a failing test - formatting able to spread across cols
641    // Problem is fixing it would mean a major rewrite of table handling
642    function testTableStrong() {
643        $this->P->addMode('table',new Doku_Parser_Mode_Table());
644        $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong'));
645        $this->P->parse('
646abc
647| **Row 0 Col 1**    | **Row 0 Col 2     | Row 0 Col 3**        |
648| Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
649def');
650        $calls = array (
651            array('document_start',array()),
652            array('p_open',array()),
653            array('cdata',array("\n\nabc")),
654            array('p_close',array()),
655            array('table_open',array(3, 2, 6)),
656            array('tablerow_open',array()),
657            array('tablecell_open',array(1,'left',1)),
658            array('cdata',array(' ')),
659            array('strong_open',array()),
660            array('cdata',array('Row 0 Col 1')),
661            array('strong_close',array()),
662            array('cdata',array('    ')),
663            array('tablecell_close',array()),
664            array('tablecell_open',array(1,'left',1)),
665            array('cdata',array(' ')),
666            array('strong_open',array()),
667            array('cdata',array('Row 0 Col 2     | Row 0 Col 3')),
668            array('strong_close',array()),
669            array('cdata',array('        ')),
670            array('tablecell_close',array()),
671            array('tablecell_open',array(1,null,1)),
672            array('cdata',array('')),
673            array('tablecell_close',array()),
674            array('tablerow_close',array()),
675            array('tablerow_open',array()),
676            array('tablecell_open',array(1,'left',1)),
677            array('cdata',array(' Row 1 Col 1    ')),
678            array('tablecell_close',array()),
679            array('tablecell_open',array(1,'left',1)),
680            array('cdata',array(' Row 1 Col 2     ')),
681            array('tablecell_close',array()),
682            array('tablecell_open',array(1,'left',1)),
683            array('cdata',array(' Row 1 Col 3        ')),
684            array('tablecell_close',array()),
685            array('tablerow_close',array()),
686            array('table_close',array(129)),
687            array('p_open',array()),
688            array('cdata',array('def')),
689            array('p_close',array()),
690            array('document_end',array()),
691        );
692        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
693    }
694
695    // This is really a failing test - unformatted able to spread across cols
696    // Problem is fixing it would mean a major rewrite of table handling
697    function testTableUnformatted() {
698        $this->P->addMode('table',new Doku_Parser_Mode_Table());
699        $this->P->addMode('unformatted',new Doku_Parser_Mode_Unformatted());
700        $this->P->parse('
701abc
702| <nowiki>Row 0 Col 1</nowiki>    | <nowiki>Row 0 Col 2     | Row 0 Col 3</nowiki>        |
703| Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
704def');
705        $calls = array (
706            array('document_start',array()),
707            array('p_open',array()),
708            array('cdata',array("\n\nabc")),
709            array('p_close',array()),
710            array('table_open',array(3, 2, 6)),
711            array('tablerow_open',array()),
712            array('tablecell_open',array(1,'left',1)),
713            array('cdata',array(' ')),
714            array('unformatted',array('Row 0 Col 1')),
715            array('cdata',array('    ')),
716            array('tablecell_close',array()),
717            array('tablecell_open',array(1,'left',1)),
718            array('cdata',array(' ')),
719            array('unformatted',array('Row 0 Col 2     | Row 0 Col 3')),
720            array('cdata',array('        ')),
721            array('tablecell_close',array()),
722            array('tablecell_open',array(1,null,1)),
723            array('cdata',array('')),
724            array('tablecell_close',array()),
725            array('tablerow_close',array()),
726            array('tablerow_open',array()),
727            array('tablecell_open',array(1,'left',1)),
728            array('cdata',array(' Row 1 Col 1    ')),
729            array('tablecell_close',array()),
730            array('tablecell_open',array(1,'left',1)),
731            array('cdata',array(' Row 1 Col 2     ')),
732            array('tablecell_close',array()),
733            array('tablecell_open',array(1,'left',1)),
734            array('cdata',array(' Row 1 Col 3        ')),
735            array('tablecell_close',array()),
736            array('tablerow_close',array()),
737            array('table_close',array(155)),
738            array('p_open',array()),
739            array('cdata',array('def')),
740            array('p_close',array()),
741            array('document_end',array()),
742        );
743        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
744    }
745
746    function testTableLinebreak() {
747        $this->P->addMode('table',new Doku_Parser_Mode_Table());
748        $this->P->addMode('linebreak',new Doku_Parser_Mode_Linebreak());
749        $this->P->parse('
750abc
751| Row 0\\\\ Col 1    | Row 0 Col 2     | Row 0 Col 3        |
752| Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
753def');
754        $calls = array (
755            array('document_start',array()),
756            array('p_open',array()),
757            array('cdata',array("\n\nabc")),
758            array('p_close',array()),
759            array('table_open',array(3, 2, 6)),
760            array('tablerow_open',array()),
761            array('tablecell_open',array(1,'left',1)),
762            array('cdata',array(' Row 0')),
763            array('linebreak',array()),
764            array('cdata',array('Col 1    ')),
765            array('tablecell_close',array()),
766            array('tablecell_open',array(1,'left',1)),
767            array('cdata',array(' Row 0 Col 2     ')),
768            array('tablecell_close',array()),
769            array('tablecell_open',array(1,'left',1)),
770            array('cdata',array(' Row 0 Col 3        ')),
771            array('tablecell_close',array()),
772            array('tablerow_close',array()),
773            array('tablerow_open',array()),
774            array('tablecell_open',array(1,'left',1)),
775            array('cdata',array(' Row 1 Col 1    ')),
776            array('tablecell_close',array()),
777            array('tablecell_open',array(1,'left',1)),
778            array('cdata',array(' Row 1 Col 2     ')),
779            array('tablecell_close',array()),
780            array('tablecell_open',array(1,'left',1)),
781            array('cdata',array(' Row 1 Col 3        ')),
782            array('tablecell_close',array()),
783            array('tablerow_close',array()),
784            array('table_close',array(123)),
785            array('p_open',array()),
786            array('cdata',array('def')),
787            array('p_close',array()),
788            array('document_end',array()),
789        );
790
791        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
792    }
793
794    // This is really a failing test - footnote able to spread across cols
795    // Problem is fixing it would mean a major rewrite of table handling
796    function testTableFootnote() {
797        $this->P->addMode('table',new Doku_Parser_Mode_Table());
798        $this->P->addMode('footnote',new Doku_Parser_Mode_Footnote());
799        $this->P->parse('
800abc
801| ((Row 0 Col 1))    | ((Row 0 Col 2     | Row 0 Col 3))        |
802| Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
803def');
804        $calls = array (
805            array('document_start',array()),
806            array('p_open',array()),
807            array('cdata',array("\n\nabc")),
808            array('p_close',array()),
809            array('table_open',array(3, 2, 6)),
810            array('tablerow_open',array()),
811            array('tablecell_open',array(1,'left',1)),
812            array('cdata',array(' ')),
813            array('nest', array ( array (
814              array('footnote_open',array()),
815              array('cdata',array('Row 0 Col 1')),
816              array('footnote_close',array()),
817            ))),
818            array('cdata',array('    ')),
819            array('tablecell_close',array()),
820            array('tablecell_open',array(1,'left',1)),
821            array('cdata',array(' ')),
822            array('nest', array ( array (
823              array('footnote_open',array()),
824              array('cdata',array('Row 0 Col 2     | Row 0 Col 3')),
825              array('footnote_close',array()),
826            ))),
827            array('cdata',array('        ')),
828            array('tablecell_close',array()),
829            array('tablecell_open',array(1,null,1)),
830            array('cdata',array('')),
831            array('tablecell_close',array()),
832            array('tablerow_close',array()),
833            array('tablerow_open',array()),
834            array('tablecell_open',array(1,'left',1)),
835            array('cdata',array(' Row 1 Col 1    ')),
836            array('tablecell_close',array()),
837            array('tablecell_open',array(1,'left',1)),
838            array('cdata',array(' Row 1 Col 2     ')),
839            array('tablecell_close',array()),
840            array('tablecell_open',array(1,'left',1)),
841            array('cdata',array(' Row 1 Col 3        ')),
842            array('tablecell_close',array()),
843            array('tablerow_close',array()),
844            array('table_close',array(129)),
845            array('p_open',array()),
846            array('cdata',array('def')),
847            array('p_close',array()),
848            array('document_end',array()),
849        );
850        $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
851    }
852}
853