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 function testTable_FS1833() { 854 $syntax = " \n| Row 0 Col 1 |\n"; 855 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 856 $this->P->parse($syntax); 857 $calls = array ( 858 array('document_start',array()), 859 array('table_open',array(1, 1, 2)), 860 array('tablerow_open',array()), 861 array('tablecell_open',array(1,'left',1)), 862 array('cdata',array(' Row 0 Col 1 ')), 863 array('tablecell_close',array()), 864 array('tablerow_close',array()), 865 array('table_close',array(strlen($syntax))), 866 array('document_end',array()), 867 ); 868 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 869 } 870 871} 872