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 ^ 155| x | y | z | 156def'); 157 158 $calls = array ( 159 array('document_start',array()), 160 array('p_open',array()), 161 array('cdata',array("\n\nabc")), 162 array('p_close',array()), 163 array('table_open',array(3, 2, 6)), 164 array('tablethead_open',array()), 165 array('tablerow_open',array()), 166 array('tableheader_open',array(1,NULL,1)), 167 array('cdata',array(' X ')), 168 array('tableheader_close',array()), 169 array('tableheader_open',array(1,NULL,1)), 170 array('cdata',array(' Y ')), 171 array('tableheader_close',array()), 172 array('tableheader_open',array(1,NULL,1)), 173 array('cdata',array(' Z ')), 174 array('tableheader_close',array()), 175 array('tablerow_close',array()), 176 array('tablethead_close',array()), 177 array('tablerow_open',array()), 178 array('tablecell_open',array(1,NULL,1)), 179 array('cdata',array(' x ')), 180 array('tablecell_close',array()), 181 array('tablecell_open',array(1,NULL,1)), 182 array('cdata',array(' y ')), 183 array('tablecell_close',array()), 184 array('tablecell_open',array(1,NULL,1)), 185 array('cdata',array(' z ')), 186 array('tablecell_close',array()), 187 array('tablerow_close',array()), 188 array('table_close',array(33)), 189 array('p_open',array()), 190 array('cdata',array('def')), 191 array('p_close',array()), 192 array('document_end',array()), 193 ); 194 195 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 196 197 } 198 199 function testTableHeadOneRowTable() { 200 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 201 $this->P->parse(' 202abc 203^ X ^ Y ^ Z ^ 204def'); 205 206 $calls = array ( 207 array('document_start',array()), 208 array('p_open',array()), 209 array('cdata',array("\n\nabc")), 210 array('p_close',array()), 211 array('table_open',array(3, 1, 6)), 212 array('tablerow_open',array()), 213 array('tableheader_open',array(1,NULL,1)), 214 array('cdata',array(' X ')), 215 array('tableheader_close',array()), 216 array('tableheader_open',array(1,NULL,1)), 217 array('cdata',array(' Y ')), 218 array('tableheader_close',array()), 219 array('tableheader_open',array(1,NULL,1)), 220 array('cdata',array(' Z ')), 221 array('tableheader_close',array()), 222 array('tablerow_close',array()), 223 array('table_close',array(19)), 224 array('p_open',array()), 225 array('cdata',array('def')), 226 array('p_close',array()), 227 array('document_end',array()), 228 ); 229 230 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 231 232 } 233 234 function testTableHeadMultiline() { 235 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 236 $this->P->parse(' 237abc 238^ X1 ^ Y1 ^ Z1 ^ 239^ X2 ^ Y2 ^ Z2 ^ 240| A | B | C | 241def'); 242 243 $calls = array ( 244 array('document_start',array()), 245 array('p_open',array()), 246 array('cdata',array("\n\nabc")), 247 array('p_close',array()), 248 array('table_open',array(3, 3, 6)), 249 array('tablethead_open',array()), 250 array('tablerow_open',array()), 251 array('tableheader_open',array(1,NULL,1)), 252 array('cdata',array(' X1 ')), 253 array('tableheader_close',array()), 254 array('tableheader_open',array(1,NULL,1)), 255 array('cdata',array(' Y1 ')), 256 array('tableheader_close',array()), 257 array('tableheader_open',array(1,NULL,1)), 258 array('cdata',array(' Z1 ')), 259 array('tableheader_close',array()), 260 array('tablerow_close',array()), 261 array('tablerow_open',array()), 262 array('tableheader_open',array(1,NULL,1)), 263 array('cdata',array(' X2 ')), 264 array('tableheader_close',array()), 265 array('tableheader_open',array(1,NULL,1)), 266 array('cdata',array(' Y2 ')), 267 array('tableheader_close',array()), 268 array('tableheader_open',array(1,NULL,1)), 269 array('cdata',array(' Z2 ')), 270 array('tableheader_close',array()), 271 array('tablerow_close',array()), 272 array('tablethead_close',array()), 273 array('tablerow_open',array()), 274 array('tablecell_open',array(1,NULL,1)), 275 array('cdata',array(' A ')), 276 array('tablecell_close',array()), 277 array('tablecell_open',array(1,NULL,1)), 278 array('cdata',array(' B ')), 279 array('tablecell_close',array()), 280 array('tablecell_open',array(1,NULL,1)), 281 array('cdata',array(' C ')), 282 array('tablecell_close',array()), 283 array('tablerow_close',array()), 284 array('table_close',array(53)), 285 array('p_open',array()), 286 array('cdata',array('def')), 287 array('p_close',array()), 288 array('document_end',array()), 289 ); 290 291 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 292 293 } 294 295 function testCellAlignment() { 296 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 297 $this->P->parse(' 298abc 299| X | Y ^ Z | 300def'); 301 302 $calls = array ( 303 array('document_start',array()), 304 array('p_open',array()), 305 array('cdata',array("\n\nabc")), 306 array('p_close',array()), 307 array('table_open',array(3, 1, 6)), 308 array('tablerow_open',array()), 309 array('tablecell_open',array(1,'right',1)), 310 array('cdata',array(' X ')), 311 array('tablecell_close',array()), 312 array('tablecell_open',array(1,'left',1)), 313 array('cdata',array(' Y ')), 314 array('tablecell_close',array()), 315 array('tableheader_open',array(1,'center',1)), 316 array('cdata',array(' Z ')), 317 array('tableheader_close',array()), 318 array('tablerow_close',array()), 319 array('table_close',array(23)), 320 array('p_open',array()), 321 array('cdata',array('def')), 322 array('p_close',array()), 323 array('document_end',array()), 324 ); 325 326 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 327 } 328 329 function testCellSpan() { 330 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 331 $this->P->parse(' 332abc 333| d || e | 334| f ^ ^| 335|||| 336def'); 337 338 $calls = array ( 339 array('document_start',array()), 340 array('p_open',array()), 341 array('cdata',array("\n\nabc")), 342 array('p_close',array()), 343 array('table_open',array(3, 3, 6)), 344 array('tablerow_open',array()), 345 array('tablecell_open',array(2,'right',1)), 346 array('cdata',array(' d ')), 347 array('tablecell_close',array()), 348 array('tablecell_open',array(1,NULL,1)), 349 array('cdata',array(' e ')), 350 array('tablecell_close',array()), 351 array('tablerow_close',array()), 352 array('tablerow_open',array()), 353 array('tablecell_open',array(1,NULL,1)), 354 array('cdata',array(' f ')), 355 array('tablecell_close',array()), 356 array('tableheader_open',array(2,NULL,1)), 357 array('cdata',array(' ')), 358 array('tableheader_close',array()), 359 array('tablerow_close',array()), 360 array('tablerow_open',array()), 361 array('tablerow_close',array()), 362 array('table_close',array(31)), 363 array('p_open',array()), 364 array('cdata',array('def')), 365 array('p_close',array()), 366 array('document_end',array()), 367 ); 368 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 369 } 370 371 function testCellRowSpan() { 372 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 373 $this->P->parse(' 374abc 375| a | c:::|| 376|:::^ d | e| 377|b ^ ::: |:::f| 378def'); 379 380 $calls = array ( 381 array('document_start',array()), 382 array('p_open',array()), 383 array('cdata',array("\n\nabc")), 384 array('p_close',array()), 385 array('table_open',array(3, 3, 6)), 386 array('tablerow_open',array()), 387 array('tablecell_open',array(1,NULL,2)), 388 array('cdata',array(' a ')), 389 array('tablecell_close',array()), 390 array('tablecell_open',array(2,'right',1)), 391 array('cdata',array(' c:::')), 392 array('tablecell_close',array()), 393 array('tablerow_close',array()), 394 array('tablerow_open',array()), 395 array('tableheader_open',array(1,'left',2)), 396 array('cdata',array(' d ')), 397 array('tableheader_close',array()), 398 array('tablecell_open',array(1,NULL,1)), 399 array('cdata',array(' e')), 400 array('tablecell_close',array()), 401 array('tablerow_close',array()), 402 array('tablerow_open',array()), 403 array('tablecell_open',array(1,'left',1)), 404 array('cdata',array('b ')), 405 array('tablecell_close',array()), 406 array('tablecell_open',array(1,NULL,1)), 407 array('cdata',array(':::f')), 408 array('tablecell_close',array()), 409 array('tablerow_close',array()), 410 array('table_close',array(51)), 411 array('p_open',array()), 412 array('cdata',array('def')), 413 array('p_close',array()), 414 array('document_end',array()), 415 ); 416 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 417 } 418 419 function testCellRowSpanFirstRow() { 420 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 421 $this->P->parse(' 422abc 423|::: ^ d:::^:::| ::: | 424| b ^ e | | ::: | 425|c ^ ::: | |:::| 426def'); 427 428 $calls = array ( 429 array('document_start',array()), 430 array('p_open',array()), 431 array('cdata',array("\n\nabc")), 432 array('p_close',array()), 433 array('table_open',array(4, 3, 6)), 434 array('tablerow_open',array()), 435 array('tablecell_open',array(1,NULL,1)), 436 array('cdata',array('')), 437 array('tablecell_close',array()), 438 array('tableheader_open',array(1,'right',1)), 439 array('cdata',array(' d:::')), 440 array('tableheader_close',array()), 441 array('tableheader_open',array(1,NULL,1)), 442 array('cdata',array('')), 443 array('tableheader_close',array()), 444 array('tablecell_open',array(1,NULL,3)), 445 array('cdata',array('')), 446 array('tablecell_close',array()), 447 array('tablerow_close',array()), 448 array('tablerow_open',array()), 449 array('tablecell_open',array(1,NULL,1)), 450 array('cdata',array(' b ')), 451 array('tablecell_close',array()), 452 array('tableheader_open',array(1,'left',2)), 453 array('cdata',array(' e ')), 454 array('tableheader_close',array()), 455 array('tablecell_open',array(1,NULL,1)), 456 array('cdata',array(' ')), 457 array('tablecell_close',array()), 458 array('tablerow_close',array()), 459 array('tablerow_open',array()), 460 array('tablecell_open',array(1,'left',1)), 461 array('cdata',array('c ')), 462 array('tablecell_close',array()), 463 array('tablecell_open',array(1,NULL,1)), 464 array('cdata',array(' ')), 465 array('tablecell_close',array()), 466 array('tablerow_close',array()), 467 468 array('table_close',array(69)), 469 array('p_open',array()), 470 array('cdata',array('def')), 471 array('p_close',array()), 472 array('document_end',array()), 473 ); 474 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 475 } 476 477 function testRowSpanTableHead() { 478 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 479 $this->P->parse(' 480abc 481^ X1 ^ Y1 ^ Z1 ^ 482^ X2 ^ ::: ^ Z2 ^ 483| A3 | B3 | C3 | 484def'); 485 486 $calls = array ( 487 array('document_start',array()), 488 array('p_open',array()), 489 array('cdata',array("\n\nabc")), 490 array('p_close',array()), 491 array('table_open',array(3, 3, 6)), 492 array('tablethead_open',array()), 493 array('tablerow_open',array()), 494 array('tableheader_open',array(1,NULL,1)), 495 array('cdata',array(' X1 ')), 496 array('tableheader_close',array()), 497 array('tableheader_open',array(1,NULL,2)), 498 array('cdata',array(' Y1 ')), 499 array('tableheader_close',array()), 500 array('tableheader_open',array(1,NULL,1)), 501 array('cdata',array(' Z1 ')), 502 array('tableheader_close',array()), 503 array('tablerow_close',array()), 504 array('tablerow_open',array()), 505 array('tableheader_open',array(1,NULL,1)), 506 array('cdata',array(' X2 ')), 507 array('tableheader_close',array()), 508 array('tableheader_open',array(1,NULL,1)), 509 array('cdata',array(' Z2 ')), 510 array('tableheader_close',array()), 511 array('tablerow_close',array()), 512 array('tablethead_close',array()), 513 array('tablerow_open',array()), 514 array('tablecell_open',array(1,NULL,1)), 515 array('cdata',array(' A3 ')), 516 array('tablecell_close',array()), 517 array('tablecell_open',array(1,NULL,1)), 518 array('cdata',array(' B3 ')), 519 array('tablecell_close',array()), 520 array('tablecell_open',array(1,NULL,1)), 521 array('cdata',array(' C3 ')), 522 array('tablecell_close',array()), 523 array('tablerow_close',array()), 524 array('table_close',array(57)), 525 array('p_open',array()), 526 array('cdata',array('def')), 527 array('p_close',array()), 528 array('document_end',array()), 529 ); 530 531 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 532 533 } 534 535 function testRowSpanAcrossTableHeadBoundary() { 536 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 537 $this->P->parse(' 538abc 539^ X1 ^ Y1 ^ Z1 ^ 540^ X2 ^ ::: ^ Z2 ^ 541| A3 | ::: | C3 | 542| A4 | ::: | C4 | 543def'); 544 545 $calls = array ( 546 array('document_start',array()), 547 array('p_open',array()), 548 array('cdata',array("\n\nabc")), 549 array('p_close',array()), 550 array('table_open',array(3, 4, 6)), 551 array('tablethead_open',array()), 552 array('tablerow_open',array()), 553 array('tableheader_open',array(1,NULL,1)), 554 array('cdata',array(' X1 ')), 555 array('tableheader_close',array()), 556 array('tableheader_open',array(1,NULL,2)), 557 array('cdata',array(' Y1 ')), 558 array('tableheader_close',array()), 559 array('tableheader_open',array(1,NULL,1)), 560 array('cdata',array(' Z1 ')), 561 array('tableheader_close',array()), 562 array('tablerow_close',array()), 563 array('tablerow_open',array()), 564 array('tableheader_open',array(1,NULL,1)), 565 array('cdata',array(' X2 ')), 566 array('tableheader_close',array()), 567 array('tableheader_open',array(1,NULL,1)), 568 array('cdata',array(' Z2 ')), 569 array('tableheader_close',array()), 570 array('tablerow_close',array()), 571 array('tablethead_close',array()), 572 array('tablerow_open',array()), 573 array('tablecell_open',array(1,NULL,1)), 574 array('cdata',array(' A3 ')), 575 array('tablecell_close',array()), 576 array('tablecell_open',array(1,NULL,2)), 577 array('cdata',array('')), 578 array('tablecell_close',array()), 579 array('tablecell_open',array(1,NULL,1)), 580 array('cdata',array(' C3 ')), 581 array('tablecell_close',array()), 582 array('tablerow_close',array()), 583 array('tablerow_open',array()), 584 array('tablecell_open',array(1,NULL,1)), 585 array('cdata',array(' A4 ')), 586 array('tablecell_close',array()), 587 array('tablecell_open',array(1,NULL,1)), 588 array('cdata',array(' C4 ')), 589 array('tablecell_close',array()), 590 array('tablerow_close',array()), 591 array('table_close',array(76)), 592 array('p_open',array()), 593 array('cdata',array('def')), 594 array('p_close',array()), 595 array('document_end',array()), 596 ); 597 598 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 599 600 } 601 602 function testCellAlignmentFormatting() { 603 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 604 $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong')); 605 $this->P->parse(' 606abc 607| **X** | Y ^ Z | 608def'); 609 610 $calls = array ( 611 array('document_start',array()), 612 array('p_open',array()), 613 array('cdata',array("\n\nabc")), 614 array('p_close',array()), 615 array('table_open',array(3, 1, 6)), 616 array('tablerow_open',array()), 617 array('tablecell_open',array(1,'right',1)), 618 array('cdata',array(' ')), 619 array('strong_open',array()), 620 array('cdata',array('X')), 621 array('strong_close',array()), 622 array('cdata',array(' ')), 623 array('tablecell_close',array()), 624 array('tablecell_open',array(1,'left',1)), 625 array('cdata',array(' Y ')), 626 array('tablecell_close',array()), 627 array('tableheader_open',array(1,'center',1)), 628 array('cdata',array(' Z ')), 629 array('tableheader_close',array()), 630 array('tablerow_close',array()), 631 array('table_close',array(27)), 632 array('p_open',array()), 633 array('cdata',array('def')), 634 array('p_close',array()), 635 array('document_end',array()), 636 ); 637 638 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 639 640 } 641 642 function testTableEol() { 643 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 644 $this->P->addMode('eol',new Doku_Parser_Mode_Eol()); 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("abc")), 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(' Row 0 Col 1 ')), 659 array('tablecell_close',array()), 660 array('tablecell_open',array(1,'left',1)), 661 array('cdata',array(' Row 0 Col 2 ')), 662 array('tablecell_close',array()), 663 array('tablecell_open',array(1,'left',1)), 664 array('cdata',array(' Row 0 Col 3 ')), 665 array('tablecell_close',array()), 666 array('tablerow_close',array()), 667 array('tablerow_open',array()), 668 array('tablecell_open',array(1,'left',1)), 669 array('cdata',array(' Row 1 Col 1 ')), 670 array('tablecell_close',array()), 671 array('tablecell_open',array(1,'left',1)), 672 array('cdata',array(' Row 1 Col 2 ')), 673 array('tablecell_close',array()), 674 array('tablecell_open',array(1,'left',1)), 675 array('cdata',array(' Row 1 Col 3 ')), 676 array('tablecell_close',array()), 677 array('tablerow_close',array()), 678 array('table_close',array(121)), 679 array('p_open',array()), 680 array('cdata',array('def')), 681 array('p_close',array()), 682 array('document_end',array()), 683 ); 684 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 685 } 686 687 // This is really a failing test - formatting able to spread across cols 688 // Problem is fixing it would mean a major rewrite of table handling 689 function testTableStrong() { 690 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 691 $this->P->addMode('strong',new Doku_Parser_Mode_Formatting('strong')); 692 $this->P->parse(' 693abc 694| **Row 0 Col 1** | **Row 0 Col 2 | Row 0 Col 3** | 695| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 | 696def'); 697 $calls = array ( 698 array('document_start',array()), 699 array('p_open',array()), 700 array('cdata',array("\n\nabc")), 701 array('p_close',array()), 702 array('table_open',array(3, 2, 6)), 703 array('tablerow_open',array()), 704 array('tablecell_open',array(1,'left',1)), 705 array('cdata',array(' ')), 706 array('strong_open',array()), 707 array('cdata',array('Row 0 Col 1')), 708 array('strong_close',array()), 709 array('cdata',array(' ')), 710 array('tablecell_close',array()), 711 array('tablecell_open',array(1,'left',1)), 712 array('cdata',array(' ')), 713 array('strong_open',array()), 714 array('cdata',array('Row 0 Col 2 | Row 0 Col 3')), 715 array('strong_close',array()), 716 array('cdata',array(' ')), 717 array('tablecell_close',array()), 718 array('tablecell_open',array(1,null,1)), 719 array('cdata',array('')), 720 array('tablecell_close',array()), 721 array('tablerow_close',array()), 722 array('tablerow_open',array()), 723 array('tablecell_open',array(1,'left',1)), 724 array('cdata',array(' Row 1 Col 1 ')), 725 array('tablecell_close',array()), 726 array('tablecell_open',array(1,'left',1)), 727 array('cdata',array(' Row 1 Col 2 ')), 728 array('tablecell_close',array()), 729 array('tablecell_open',array(1,'left',1)), 730 array('cdata',array(' Row 1 Col 3 ')), 731 array('tablecell_close',array()), 732 array('tablerow_close',array()), 733 array('table_close',array(129)), 734 array('p_open',array()), 735 array('cdata',array('def')), 736 array('p_close',array()), 737 array('document_end',array()), 738 ); 739 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 740 } 741 742 // This is really a failing test - unformatted able to spread across cols 743 // Problem is fixing it would mean a major rewrite of table handling 744 function testTableUnformatted() { 745 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 746 $this->P->addMode('unformatted',new Doku_Parser_Mode_Unformatted()); 747 $this->P->parse(' 748abc 749| <nowiki>Row 0 Col 1</nowiki> | <nowiki>Row 0 Col 2 | Row 0 Col 3</nowiki> | 750| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 | 751def'); 752 $calls = array ( 753 array('document_start',array()), 754 array('p_open',array()), 755 array('cdata',array("\n\nabc")), 756 array('p_close',array()), 757 array('table_open',array(3, 2, 6)), 758 array('tablerow_open',array()), 759 array('tablecell_open',array(1,'left',1)), 760 array('cdata',array(' ')), 761 array('unformatted',array('Row 0 Col 1')), 762 array('cdata',array(' ')), 763 array('tablecell_close',array()), 764 array('tablecell_open',array(1,'left',1)), 765 array('cdata',array(' ')), 766 array('unformatted',array('Row 0 Col 2 | Row 0 Col 3')), 767 array('cdata',array(' ')), 768 array('tablecell_close',array()), 769 array('tablecell_open',array(1,null,1)), 770 array('cdata',array('')), 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(155)), 785 array('p_open',array()), 786 array('cdata',array('def')), 787 array('p_close',array()), 788 array('document_end',array()), 789 ); 790 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 791 } 792 793 function testTableLinebreak() { 794 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 795 $this->P->addMode('linebreak',new Doku_Parser_Mode_Linebreak()); 796 $this->P->parse(' 797abc 798| Row 0\\\\ Col 1 | Row 0 Col 2 | Row 0 Col 3 | 799| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 | 800def'); 801 $calls = array ( 802 array('document_start',array()), 803 array('p_open',array()), 804 array('cdata',array("\n\nabc")), 805 array('p_close',array()), 806 array('table_open',array(3, 2, 6)), 807 array('tablerow_open',array()), 808 array('tablecell_open',array(1,'left',1)), 809 array('cdata',array(' Row 0')), 810 array('linebreak',array()), 811 array('cdata',array('Col 1 ')), 812 array('tablecell_close',array()), 813 array('tablecell_open',array(1,'left',1)), 814 array('cdata',array(' Row 0 Col 2 ')), 815 array('tablecell_close',array()), 816 array('tablecell_open',array(1,'left',1)), 817 array('cdata',array(' Row 0 Col 3 ')), 818 array('tablecell_close',array()), 819 array('tablerow_close',array()), 820 array('tablerow_open',array()), 821 array('tablecell_open',array(1,'left',1)), 822 array('cdata',array(' Row 1 Col 1 ')), 823 array('tablecell_close',array()), 824 array('tablecell_open',array(1,'left',1)), 825 array('cdata',array(' Row 1 Col 2 ')), 826 array('tablecell_close',array()), 827 array('tablecell_open',array(1,'left',1)), 828 array('cdata',array(' Row 1 Col 3 ')), 829 array('tablecell_close',array()), 830 array('tablerow_close',array()), 831 array('table_close',array(123)), 832 array('p_open',array()), 833 array('cdata',array('def')), 834 array('p_close',array()), 835 array('document_end',array()), 836 ); 837 838 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 839 } 840 841 // This is really a failing test - footnote able to spread across cols 842 // Problem is fixing it would mean a major rewrite of table handling 843 function testTableFootnote() { 844 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 845 $this->P->addMode('footnote',new Doku_Parser_Mode_Footnote()); 846 $this->P->parse(' 847abc 848| ((Row 0 Col 1)) | ((Row 0 Col 2 | Row 0 Col 3)) | 849| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 | 850def'); 851 $calls = array ( 852 array('document_start',array()), 853 array('p_open',array()), 854 array('cdata',array("\n\nabc")), 855 array('p_close',array()), 856 array('table_open',array(3, 2, 6)), 857 array('tablerow_open',array()), 858 array('tablecell_open',array(1,'left',1)), 859 array('cdata',array(' ')), 860 array('nest', array ( array ( 861 array('footnote_open',array()), 862 array('cdata',array('Row 0 Col 1')), 863 array('footnote_close',array()), 864 ))), 865 array('cdata',array(' ')), 866 array('tablecell_close',array()), 867 array('tablecell_open',array(1,'left',1)), 868 array('cdata',array(' ')), 869 array('nest', array ( array ( 870 array('footnote_open',array()), 871 array('cdata',array('Row 0 Col 2 | Row 0 Col 3')), 872 array('footnote_close',array()), 873 ))), 874 array('cdata',array(' ')), 875 array('tablecell_close',array()), 876 array('tablecell_open',array(1,null,1)), 877 array('cdata',array('')), 878 array('tablecell_close',array()), 879 array('tablerow_close',array()), 880 array('tablerow_open',array()), 881 array('tablecell_open',array(1,'left',1)), 882 array('cdata',array(' Row 1 Col 1 ')), 883 array('tablecell_close',array()), 884 array('tablecell_open',array(1,'left',1)), 885 array('cdata',array(' Row 1 Col 2 ')), 886 array('tablecell_close',array()), 887 array('tablecell_open',array(1,'left',1)), 888 array('cdata',array(' Row 1 Col 3 ')), 889 array('tablecell_close',array()), 890 array('tablerow_close',array()), 891 array('table_close',array(129)), 892 array('p_open',array()), 893 array('cdata',array('def')), 894 array('p_close',array()), 895 array('document_end',array()), 896 ); 897 $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls)); 898 } 899 900 function testTable_FS1833() { 901 $syntax = " \n| Row 0 Col 1 |\n"; 902 $this->P->addMode('table',new Doku_Parser_Mode_Table()); 903 $this->P->parse($syntax); 904 $calls = array ( 905 array('document_start',array()), 906 array('table_open',array(1, 1, 2)), 907 array('tablerow_open',array()), 908 array('tablecell_open',array(1,'left',1)), 909 array('cdata',array(' Row 0 Col 1 ')), 910 array('tablecell_close',array()), 911 array('tablerow_close',array()), 912 array('table_close',array(strlen($syntax))), 913 array('document_end',array()), 914 ); 915 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 916 } 917 918} 919