[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/_test/tests/inc/parser/ -> parser_table.test.php (source)

   1  <?php
   2  
   3  use dokuwiki\Parsing\ParserMode\Eol;
   4  use dokuwiki\Parsing\ParserMode\Footnote;
   5  use dokuwiki\Parsing\ParserMode\Formatting;
   6  use dokuwiki\Parsing\ParserMode\Linebreak;
   7  use dokuwiki\Parsing\ParserMode\Table;
   8  use dokuwiki\Parsing\ParserMode\Unformatted;
   9  
  10  require_once  'parser.inc.php';
  11  
  12  class TestOfDoku_Parser_Table extends TestOfDoku_Parser {
  13  
  14      function testTable() {
  15          $this->P->addMode('table',new Table());
  16          $this->P->parse('
  17  abc
  18  | Row 0 Col 1    | Row 0 Col 2     | Row 0 Col 3        |
  19  | Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
  20  def');
  21          $calls = array (
  22              array('document_start',array()),
  23              array('p_open',array()),
  24              array('cdata',array("\n\nabc")),
  25              array('p_close',array()),
  26              array('table_open',array(3, 2, 6)),
  27              array('tablerow_open',array()),
  28              array('tablecell_open',array(1,'left',1)),
  29              array('cdata',array(' Row 0 Col 1    ')),
  30              array('tablecell_close',array()),
  31              array('tablecell_open',array(1,'left',1)),
  32              array('cdata',array(' Row 0 Col 2     ')),
  33              array('tablecell_close',array()),
  34              array('tablecell_open',array(1,'left',1)),
  35              array('cdata',array(' Row 0 Col 3        ')),
  36              array('tablecell_close',array()),
  37              array('tablerow_close',array()),
  38              array('tablerow_open',array()),
  39              array('tablecell_open',array(1,'left',1)),
  40              array('cdata',array(' Row 1 Col 1    ')),
  41              array('tablecell_close',array()),
  42              array('tablecell_open',array(1,'left',1)),
  43              array('cdata',array(' Row 1 Col 2     ')),
  44              array('tablecell_close',array()),
  45              array('tablecell_open',array(1,'left',1)),
  46              array('cdata',array(' Row 1 Col 3        ')),
  47              array('tablecell_close',array()),
  48              array('tablerow_close',array()),
  49              array('table_close',array(121)),
  50              array('p_open',array()),
  51              array('cdata',array('def')),
  52              array('p_close',array()),
  53              array('document_end',array()),
  54          );
  55          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
  56      }
  57  
  58      function testTableWinEOL() {
  59          $this->P->addMode('table',new Table());
  60          $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");
  61          $calls = array (
  62              array('document_start',array()),
  63              array('p_open',array()),
  64              array('cdata',array("\n\nabc")),
  65              array('p_close',array()),
  66              array('table_open',array(3, 2, 6)),
  67              array('tablerow_open',array()),
  68              array('tablecell_open',array(1,'left',1)),
  69              array('cdata',array(' Row 0 Col 1    ')),
  70              array('tablecell_close',array()),
  71              array('tablecell_open',array(1,'left',1)),
  72              array('cdata',array(' Row 0 Col 2     ')),
  73              array('tablecell_close',array()),
  74              array('tablecell_open',array(1,'left',1)),
  75              array('cdata',array(' Row 0 Col 3        ')),
  76              array('tablecell_close',array()),
  77              array('tablerow_close',array()),
  78              array('tablerow_open',array()),
  79              array('tablecell_open',array(1,'left',1)),
  80              array('cdata',array(' Row 1 Col 1    ')),
  81              array('tablecell_close',array()),
  82              array('tablecell_open',array(1,'left',1)),
  83              array('cdata',array(' Row 1 Col 2     ')),
  84              array('tablecell_close',array()),
  85              array('tablecell_open',array(1,'left',1)),
  86              array('cdata',array(' Row 1 Col 3        ')),
  87              array('tablecell_close',array()),
  88              array('tablerow_close',array()),
  89              array('table_close',array(121)),
  90              array('p_open',array()),
  91              array('cdata',array('def')),
  92              array('p_close',array()),
  93              array('document_end',array()),
  94          );
  95          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
  96      }
  97  
  98      function testEmptyTable() {
  99          $this->P->addMode('table',new Table());
 100          $this->P->parse('
 101  abc
 102  |
 103  def');
 104  
 105          $calls = array (
 106              array('document_start',array()),
 107              array('p_open',array()),
 108              array('cdata',array("\n\nabc")),
 109              array('p_close',array()),
 110              array('table_open',array(0, 1, 6)),
 111              array('tablerow_open',array()),
 112              array('tablerow_close',array()),
 113              array('table_close',array(7)),
 114              array('p_open',array()),
 115              array('cdata',array('def')),
 116              array('p_close',array()),
 117              array('document_end',array()),
 118          );
 119  
 120          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 121      }
 122  
 123      function testTableHeaders() {
 124          $this->P->addMode('table',new Table());
 125          $this->P->parse('
 126  abc
 127  ^ X | Y ^ Z |
 128  def');
 129  
 130          $calls = array (
 131              array('document_start',array()),
 132              array('p_open',array()),
 133              array('cdata',array("\n\nabc")),
 134              array('p_close',array()),
 135              array('table_open',array(3, 1, 6)),
 136              array('tablerow_open',array()),
 137              array('tableheader_open',array(1,NULL,1)),
 138              array('cdata',array(' X ')),
 139              array('tableheader_close',array()),
 140              array('tablecell_open',array(1,NULL,1)),
 141              array('cdata',array(' Y ')),
 142              array('tablecell_close',array()),
 143              array('tableheader_open',array(1,NULL,1)),
 144              array('cdata',array(' Z ')),
 145              array('tableheader_close',array()),
 146              array('tablerow_close',array()),
 147              array('table_close',array(19)),
 148              array('p_open',array()),
 149              array('cdata',array('def')),
 150              array('p_close',array()),
 151              array('document_end',array()),
 152          );
 153  
 154          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 155  
 156      }
 157  
 158      function testTableHead() {
 159          $this->P->addMode('table',new Table());
 160          $this->P->parse('
 161  abc
 162  ^ X ^ Y ^ Z ^
 163  | x | y | z |
 164  def');
 165  
 166          $calls = array (
 167              array('document_start',array()),
 168              array('p_open',array()),
 169              array('cdata',array("\n\nabc")),
 170              array('p_close',array()),
 171              array('table_open',array(3, 2, 6)),
 172              array('tablethead_open',array()),
 173              array('tablerow_open',array()),
 174              array('tableheader_open',array(1,NULL,1)),
 175              array('cdata',array(' X ')),
 176              array('tableheader_close',array()),
 177              array('tableheader_open',array(1,NULL,1)),
 178              array('cdata',array(' Y ')),
 179              array('tableheader_close',array()),
 180              array('tableheader_open',array(1,NULL,1)),
 181              array('cdata',array(' Z ')),
 182              array('tableheader_close',array()),
 183              array('tablerow_close',array()),
 184              array('tablethead_close',array()),
 185              array('tablerow_open',array()),
 186              array('tablecell_open',array(1,NULL,1)),
 187              array('cdata',array(' x ')),
 188              array('tablecell_close',array()),
 189              array('tablecell_open',array(1,NULL,1)),
 190              array('cdata',array(' y ')),
 191              array('tablecell_close',array()),
 192              array('tablecell_open',array(1,NULL,1)),
 193              array('cdata',array(' z ')),
 194              array('tablecell_close',array()),
 195              array('tablerow_close',array()),
 196              array('table_close',array(33)),
 197              array('p_open',array()),
 198              array('cdata',array('def')),
 199              array('p_close',array()),
 200              array('document_end',array()),
 201          );
 202  
 203          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 204  
 205      }
 206  
 207      function testTableHeadOneRowTable() {
 208          $this->P->addMode('table',new Table());
 209          $this->P->parse('
 210  abc
 211  ^ X ^ Y ^ Z ^
 212  def');
 213  
 214          $calls = array (
 215              array('document_start',array()),
 216              array('p_open',array()),
 217              array('cdata',array("\n\nabc")),
 218              array('p_close',array()),
 219              array('table_open',array(3, 1, 6)),
 220              array('tablerow_open',array()),
 221              array('tableheader_open',array(1,NULL,1)),
 222              array('cdata',array(' X ')),
 223              array('tableheader_close',array()),
 224              array('tableheader_open',array(1,NULL,1)),
 225              array('cdata',array(' Y ')),
 226              array('tableheader_close',array()),
 227              array('tableheader_open',array(1,NULL,1)),
 228              array('cdata',array(' Z ')),
 229              array('tableheader_close',array()),
 230              array('tablerow_close',array()),
 231              array('table_close',array(19)),
 232              array('p_open',array()),
 233              array('cdata',array('def')),
 234              array('p_close',array()),
 235              array('document_end',array()),
 236          );
 237  
 238          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 239  
 240      }
 241  
 242      function testTableHeadMultiline() {
 243          $this->P->addMode('table',new Table());
 244          $this->P->parse('
 245  abc
 246  ^ X1 ^ Y1 ^ Z1 ^
 247  ^ X2 ^ Y2 ^ Z2 ^
 248  | A | B | C |
 249  def');
 250  
 251          $calls = array (
 252              array('document_start',array()),
 253              array('p_open',array()),
 254              array('cdata',array("\n\nabc")),
 255              array('p_close',array()),
 256              array('table_open',array(3, 3, 6)),
 257              array('tablethead_open',array()),
 258              array('tablerow_open',array()),
 259              array('tableheader_open',array(1,NULL,1)),
 260              array('cdata',array(' X1 ')),
 261              array('tableheader_close',array()),
 262              array('tableheader_open',array(1,NULL,1)),
 263              array('cdata',array(' Y1 ')),
 264              array('tableheader_close',array()),
 265              array('tableheader_open',array(1,NULL,1)),
 266              array('cdata',array(' Z1 ')),
 267              array('tableheader_close',array()),
 268              array('tablerow_close',array()),
 269              array('tablerow_open',array()),
 270              array('tableheader_open',array(1,NULL,1)),
 271              array('cdata',array(' X2 ')),
 272              array('tableheader_close',array()),
 273              array('tableheader_open',array(1,NULL,1)),
 274              array('cdata',array(' Y2 ')),
 275              array('tableheader_close',array()),
 276              array('tableheader_open',array(1,NULL,1)),
 277              array('cdata',array(' Z2 ')),
 278              array('tableheader_close',array()),
 279              array('tablerow_close',array()),
 280              array('tablethead_close',array()),
 281              array('tablerow_open',array()),
 282              array('tablecell_open',array(1,NULL,1)),
 283              array('cdata',array(' A ')),
 284              array('tablecell_close',array()),
 285              array('tablecell_open',array(1,NULL,1)),
 286              array('cdata',array(' B ')),
 287              array('tablecell_close',array()),
 288              array('tablecell_open',array(1,NULL,1)),
 289              array('cdata',array(' C ')),
 290              array('tablecell_close',array()),
 291              array('tablerow_close',array()),
 292              array('table_close',array(53)),
 293              array('p_open',array()),
 294              array('cdata',array('def')),
 295              array('p_close',array()),
 296              array('document_end',array()),
 297          );
 298  
 299          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 300  
 301      }
 302  
 303      function testCellAlignment() {
 304          $this->P->addMode('table',new Table());
 305          $this->P->parse('
 306  abc
 307  |  X | Y  ^  Z  |
 308  def');
 309  
 310          $calls = array (
 311              array('document_start',array()),
 312              array('p_open',array()),
 313              array('cdata',array("\n\nabc")),
 314              array('p_close',array()),
 315              array('table_open',array(3, 1, 6)),
 316              array('tablerow_open',array()),
 317              array('tablecell_open',array(1,'right',1)),
 318              array('cdata',array('  X ')),
 319              array('tablecell_close',array()),
 320              array('tablecell_open',array(1,'left',1)),
 321              array('cdata',array(' Y  ')),
 322              array('tablecell_close',array()),
 323              array('tableheader_open',array(1,'center',1)),
 324              array('cdata',array('  Z  ')),
 325              array('tableheader_close',array()),
 326              array('tablerow_close',array()),
 327              array('table_close',array(23)),
 328              array('p_open',array()),
 329              array('cdata',array('def')),
 330              array('p_close',array()),
 331              array('document_end',array()),
 332          );
 333  
 334          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 335      }
 336  
 337      function testCellSpan() {
 338          $this->P->addMode('table',new Table());
 339          $this->P->parse('
 340  abc
 341  |  d || e |
 342  | f ^ ^|
 343  ||||
 344  def');
 345  
 346          $calls = array (
 347              array('document_start',array()),
 348              array('p_open',array()),
 349              array('cdata',array("\n\nabc")),
 350              array('p_close',array()),
 351              array('table_open',array(3, 3, 6)),
 352              array('tablerow_open',array()),
 353              array('tablecell_open',array(2,'right',1)),
 354              array('cdata',array('  d ')),
 355              array('tablecell_close',array()),
 356              array('tablecell_open',array(1,NULL,1)),
 357              array('cdata',array(' e ')),
 358              array('tablecell_close',array()),
 359              array('tablerow_close',array()),
 360              array('tablerow_open',array()),
 361              array('tablecell_open',array(1,NULL,1)),
 362              array('cdata',array(' f ')),
 363              array('tablecell_close',array()),
 364              array('tableheader_open',array(2,NULL,1)),
 365              array('cdata',array(' ')),
 366              array('tableheader_close',array()),
 367              array('tablerow_close',array()),
 368              array('tablerow_open',array()),
 369              array('tablerow_close',array()),
 370              array('table_close',array(31)),
 371              array('p_open',array()),
 372              array('cdata',array('def')),
 373              array('p_close',array()),
 374              array('document_end',array()),
 375          );
 376          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 377      }
 378  
 379      function testCellRowSpan() {
 380          $this->P->addMode('table',new Table());
 381          $this->P->parse('
 382  abc
 383  | a |  c:::||
 384  |:::^ d  | e|
 385  |b  ^  ::: |:::f|
 386  def');
 387  
 388          $calls = array (
 389              array('document_start',array()),
 390              array('p_open',array()),
 391              array('cdata',array("\n\nabc")),
 392              array('p_close',array()),
 393              array('table_open',array(3, 3, 6)),
 394              array('tablerow_open',array()),
 395              array('tablecell_open',array(1,NULL,2)),
 396              array('cdata',array(' a ')),
 397              array('tablecell_close',array()),
 398              array('tablecell_open',array(2,'right',1)),
 399              array('cdata',array('  c:::')),
 400              array('tablecell_close',array()),
 401              array('tablerow_close',array()),
 402              array('tablerow_open',array()),
 403              array('tableheader_open',array(1,'left',2)),
 404              array('cdata',array(' d  ')),
 405              array('tableheader_close',array()),
 406              array('tablecell_open',array(1,NULL,1)),
 407              array('cdata',array(' e')),
 408              array('tablecell_close',array()),
 409              array('tablerow_close',array()),
 410              array('tablerow_open',array()),
 411              array('tablecell_open',array(1,'left',1)),
 412              array('cdata',array('b  ')),
 413              array('tablecell_close',array()),
 414              array('tablecell_open',array(1,NULL,1)),
 415              array('cdata',array(':::f')),
 416              array('tablecell_close',array()),
 417              array('tablerow_close',array()),
 418              array('table_close',array(51)),
 419              array('p_open',array()),
 420              array('cdata',array('def')),
 421              array('p_close',array()),
 422              array('document_end',array()),
 423          );
 424          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 425      }
 426  
 427      function testCellRowSpanFirstRow() {
 428          $this->P->addMode('table',new Table());
 429          $this->P->parse('
 430  abc
 431  |::: ^  d:::^:::|  :::  |
 432  | b ^ e  | | ::: |
 433  |c  ^  ::: | |:::|
 434  def');
 435  
 436          $calls = array (
 437              array('document_start',array()),
 438              array('p_open',array()),
 439              array('cdata',array("\n\nabc")),
 440              array('p_close',array()),
 441              array('table_open',array(4, 3, 6)),
 442              array('tablerow_open',array()),
 443              array('tablecell_open',array(1,NULL,1)),
 444              array('cdata',array('')),
 445              array('tablecell_close',array()),
 446              array('tableheader_open',array(1,'right',1)),
 447              array('cdata',array('  d:::')),
 448              array('tableheader_close',array()),
 449              array('tableheader_open',array(1,NULL,1)),
 450              array('cdata',array('')),
 451              array('tableheader_close',array()),
 452              array('tablecell_open',array(1,NULL,3)),
 453              array('cdata',array('')),
 454              array('tablecell_close',array()),
 455              array('tablerow_close',array()),
 456              array('tablerow_open',array()),
 457              array('tablecell_open',array(1,NULL,1)),
 458              array('cdata',array(' b ')),
 459              array('tablecell_close',array()),
 460              array('tableheader_open',array(1,'left',2)),
 461              array('cdata',array(' e  ')),
 462              array('tableheader_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              array('tablerow_open',array()),
 468              array('tablecell_open',array(1,'left',1)),
 469              array('cdata',array('c  ')),
 470              array('tablecell_close',array()),
 471              array('tablecell_open',array(1,NULL,1)),
 472              array('cdata',array(' ')),
 473              array('tablecell_close',array()),
 474              array('tablerow_close',array()),
 475  
 476              array('table_close',array(69)),
 477              array('p_open',array()),
 478              array('cdata',array('def')),
 479              array('p_close',array()),
 480              array('document_end',array()),
 481          );
 482          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 483      }
 484  
 485      function testRowSpanTableHead() {
 486          $this->P->addMode('table',new Table());
 487          $this->P->parse('
 488  abc
 489  ^ X1 ^ Y1 ^ Z1 ^
 490  ^ X2 ^ ::: ^ Z2 ^
 491  | A3 | B3 | C3 |
 492  def');
 493  
 494          $calls = array (
 495              array('document_start',array()),
 496              array('p_open',array()),
 497              array('cdata',array("\n\nabc")),
 498              array('p_close',array()),
 499              array('table_open',array(3, 3, 6)),
 500              array('tablethead_open',array()),
 501              array('tablerow_open',array()),
 502              array('tableheader_open',array(1,NULL,1)),
 503              array('cdata',array(' X1 ')),
 504              array('tableheader_close',array()),
 505              array('tableheader_open',array(1,NULL,2)),
 506              array('cdata',array(' Y1 ')),
 507              array('tableheader_close',array()),
 508              array('tableheader_open',array(1,NULL,1)),
 509              array('cdata',array(' Z1 ')),
 510              array('tableheader_close',array()),
 511              array('tablerow_close',array()),
 512              array('tablerow_open',array()),
 513              array('tableheader_open',array(1,NULL,1)),
 514              array('cdata',array(' X2 ')),
 515              array('tableheader_close',array()),
 516              array('tableheader_open',array(1,NULL,1)),
 517              array('cdata',array(' Z2 ')),
 518              array('tableheader_close',array()),
 519              array('tablerow_close',array()),
 520              array('tablethead_close',array()),
 521              array('tablerow_open',array()),
 522              array('tablecell_open',array(1,NULL,1)),
 523              array('cdata',array(' A3 ')),
 524              array('tablecell_close',array()),
 525              array('tablecell_open',array(1,NULL,1)),
 526              array('cdata',array(' B3 ')),
 527              array('tablecell_close',array()),
 528              array('tablecell_open',array(1,NULL,1)),
 529              array('cdata',array(' C3 ')),
 530              array('tablecell_close',array()),
 531              array('tablerow_close',array()),
 532              array('table_close',array(57)),
 533              array('p_open',array()),
 534              array('cdata',array('def')),
 535              array('p_close',array()),
 536              array('document_end',array()),
 537          );
 538  
 539          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 540  
 541      }
 542  
 543      function testRowSpanAcrossTableHeadBoundary() {
 544          $this->P->addMode('table',new Table());
 545          $this->P->parse('
 546  abc
 547  ^ X1 ^ Y1 ^ Z1 ^
 548  ^ X2 ^ ::: ^ Z2 ^
 549  | A3 | ::: | C3 |
 550  | A4 | ::: | C4 |
 551  def');
 552  
 553          $calls = array (
 554              array('document_start',array()),
 555              array('p_open',array()),
 556              array('cdata',array("\n\nabc")),
 557              array('p_close',array()),
 558              array('table_open',array(3, 4, 6)),
 559              array('tablethead_open',array()),
 560              array('tablerow_open',array()),
 561              array('tableheader_open',array(1,NULL,1)),
 562              array('cdata',array(' X1 ')),
 563              array('tableheader_close',array()),
 564              array('tableheader_open',array(1,NULL,2)),
 565              array('cdata',array(' Y1 ')),
 566              array('tableheader_close',array()),
 567              array('tableheader_open',array(1,NULL,1)),
 568              array('cdata',array(' Z1 ')),
 569              array('tableheader_close',array()),
 570              array('tablerow_close',array()),
 571              array('tablerow_open',array()),
 572              array('tableheader_open',array(1,NULL,1)),
 573              array('cdata',array(' X2 ')),
 574              array('tableheader_close',array()),
 575              array('tableheader_open',array(1,NULL,1)),
 576              array('cdata',array(' Z2 ')),
 577              array('tableheader_close',array()),
 578              array('tablerow_close',array()),
 579              array('tablethead_close',array()),
 580              array('tablerow_open',array()),
 581              array('tablecell_open',array(1,NULL,1)),
 582              array('cdata',array(' A3 ')),
 583              array('tablecell_close',array()),
 584              array('tablecell_open',array(1,NULL,2)),
 585              array('cdata',array('')),
 586              array('tablecell_close',array()),
 587              array('tablecell_open',array(1,NULL,1)),
 588              array('cdata',array(' C3 ')),
 589              array('tablecell_close',array()),
 590              array('tablerow_close',array()),
 591              array('tablerow_open',array()),
 592              array('tablecell_open',array(1,NULL,1)),
 593              array('cdata',array(' A4 ')),
 594              array('tablecell_close',array()),
 595              array('tablecell_open',array(1,NULL,1)),
 596              array('cdata',array(' C4 ')),
 597              array('tablecell_close',array()),
 598              array('tablerow_close',array()),
 599              array('table_close',array(76)),
 600              array('p_open',array()),
 601              array('cdata',array('def')),
 602              array('p_close',array()),
 603              array('document_end',array()),
 604          );
 605  
 606          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 607  
 608      }
 609  
 610      function testCellAlignmentFormatting() {
 611          $this->P->addMode('table',new Table());
 612          $this->P->addMode('strong',new Formatting('strong'));
 613          $this->P->parse('
 614  abc
 615  |  **X** | Y  ^  Z  |
 616  def');
 617  
 618          $calls = array (
 619              array('document_start',array()),
 620              array('p_open',array()),
 621              array('cdata',array("\n\nabc")),
 622              array('p_close',array()),
 623              array('table_open',array(3, 1, 6)),
 624              array('tablerow_open',array()),
 625              array('tablecell_open',array(1,'right',1)),
 626              array('cdata',array('  ')),
 627              array('strong_open',array()),
 628              array('cdata',array('X')),
 629              array('strong_close',array()),
 630              array('cdata',array(' ')),
 631              array('tablecell_close',array()),
 632              array('tablecell_open',array(1,'left',1)),
 633              array('cdata',array(' Y  ')),
 634              array('tablecell_close',array()),
 635              array('tableheader_open',array(1,'center',1)),
 636              array('cdata',array('  Z  ')),
 637              array('tableheader_close',array()),
 638              array('tablerow_close',array()),
 639              array('table_close',array(27)),
 640              array('p_open',array()),
 641              array('cdata',array('def')),
 642              array('p_close',array()),
 643              array('document_end',array()),
 644          );
 645  
 646          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 647  
 648      }
 649  
 650      function testTableEol() {
 651          $this->P->addMode('table',new Table());
 652          $this->P->addMode('eol',new Eol());
 653          $this->P->parse('
 654  abc
 655  | Row 0 Col 1    | Row 0 Col 2     | Row 0 Col 3        |
 656  | Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
 657  def');
 658          $calls = array (
 659              array('document_start',array()),
 660              array('p_open',array()),
 661              array('cdata',array("abc")),
 662              array('p_close',array()),
 663              array('table_open',array(3, 2, 6)),
 664              array('tablerow_open',array()),
 665              array('tablecell_open',array(1,'left',1)),
 666              array('cdata',array(' Row 0 Col 1    ')),
 667              array('tablecell_close',array()),
 668              array('tablecell_open',array(1,'left',1)),
 669              array('cdata',array(' Row 0 Col 2     ')),
 670              array('tablecell_close',array()),
 671              array('tablecell_open',array(1,'left',1)),
 672              array('cdata',array(' Row 0 Col 3        ')),
 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(121)),
 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 - formatting able to spread across cols
 696      // Problem is fixing it would mean a major rewrite of table handling
 697      function testTableStrong() {
 698          $this->P->addMode('table',new Table());
 699          $this->P->addMode('strong',new Formatting('strong'));
 700          $this->P->parse('
 701  abc
 702  | **Row 0 Col 1**    | **Row 0 Col 2     | Row 0 Col 3**        |
 703  | Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
 704  def');
 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('strong_open',array()),
 715              array('cdata',array('Row 0 Col 1')),
 716              array('strong_close',array()),
 717              array('cdata',array('    ')),
 718              array('tablecell_close',array()),
 719              array('tablecell_open',array(1,'left',1)),
 720              array('cdata',array(' ')),
 721              array('strong_open',array()),
 722              array('cdata',array('Row 0 Col 2     | Row 0 Col 3')),
 723              array('strong_close',array()),
 724              array('cdata',array('        ')),
 725              array('tablecell_close',array()),
 726              array('tablecell_open',array(1,null,1)),
 727              array('cdata',array('')),
 728              array('tablecell_close',array()),
 729              array('tablerow_close',array()),
 730              array('tablerow_open',array()),
 731              array('tablecell_open',array(1,'left',1)),
 732              array('cdata',array(' Row 1 Col 1    ')),
 733              array('tablecell_close',array()),
 734              array('tablecell_open',array(1,'left',1)),
 735              array('cdata',array(' Row 1 Col 2     ')),
 736              array('tablecell_close',array()),
 737              array('tablecell_open',array(1,'left',1)),
 738              array('cdata',array(' Row 1 Col 3        ')),
 739              array('tablecell_close',array()),
 740              array('tablerow_close',array()),
 741              array('table_close',array(129)),
 742              array('p_open',array()),
 743              array('cdata',array('def')),
 744              array('p_close',array()),
 745              array('document_end',array()),
 746          );
 747          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 748      }
 749  
 750      // This is really a failing test - unformatted able to spread across cols
 751      // Problem is fixing it would mean a major rewrite of table handling
 752      function testTableUnformatted() {
 753          $this->P->addMode('table',new Table());
 754          $this->P->addMode('unformatted',new Unformatted());
 755          $this->P->parse('
 756  abc
 757  | <nowiki>Row 0 Col 1</nowiki>    | <nowiki>Row 0 Col 2     | Row 0 Col 3</nowiki>        |
 758  | Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
 759  def');
 760          $calls = array (
 761              array('document_start',array()),
 762              array('p_open',array()),
 763              array('cdata',array("\n\nabc")),
 764              array('p_close',array()),
 765              array('table_open',array(3, 2, 6)),
 766              array('tablerow_open',array()),
 767              array('tablecell_open',array(1,'left',1)),
 768              array('cdata',array(' ')),
 769              array('unformatted',array('Row 0 Col 1')),
 770              array('cdata',array('    ')),
 771              array('tablecell_close',array()),
 772              array('tablecell_open',array(1,'left',1)),
 773              array('cdata',array(' ')),
 774              array('unformatted',array('Row 0 Col 2     | Row 0 Col 3')),
 775              array('cdata',array('        ')),
 776              array('tablecell_close',array()),
 777              array('tablecell_open',array(1,null,1)),
 778              array('cdata',array('')),
 779              array('tablecell_close',array()),
 780              array('tablerow_close',array()),
 781              array('tablerow_open',array()),
 782              array('tablecell_open',array(1,'left',1)),
 783              array('cdata',array(' Row 1 Col 1    ')),
 784              array('tablecell_close',array()),
 785              array('tablecell_open',array(1,'left',1)),
 786              array('cdata',array(' Row 1 Col 2     ')),
 787              array('tablecell_close',array()),
 788              array('tablecell_open',array(1,'left',1)),
 789              array('cdata',array(' Row 1 Col 3        ')),
 790              array('tablecell_close',array()),
 791              array('tablerow_close',array()),
 792              array('table_close',array(155)),
 793              array('p_open',array()),
 794              array('cdata',array('def')),
 795              array('p_close',array()),
 796              array('document_end',array()),
 797          );
 798          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 799      }
 800  
 801      function testTableLinebreak() {
 802          $this->P->addMode('table',new Table());
 803          $this->P->addMode('linebreak',new Linebreak());
 804          $this->P->parse('
 805  abc
 806  | Row 0\\\\ Col 1    | Row 0 Col 2     | Row 0 Col 3        |
 807  | Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
 808  def');
 809          $calls = array (
 810              array('document_start',array()),
 811              array('p_open',array()),
 812              array('cdata',array("\n\nabc")),
 813              array('p_close',array()),
 814              array('table_open',array(3, 2, 6)),
 815              array('tablerow_open',array()),
 816              array('tablecell_open',array(1,'left',1)),
 817              array('cdata',array(' Row 0')),
 818              array('linebreak',array()),
 819              array('cdata',array('Col 1    ')),
 820              array('tablecell_close',array()),
 821              array('tablecell_open',array(1,'left',1)),
 822              array('cdata',array(' Row 0 Col 2     ')),
 823              array('tablecell_close',array()),
 824              array('tablecell_open',array(1,'left',1)),
 825              array('cdata',array(' Row 0 Col 3        ')),
 826              array('tablecell_close',array()),
 827              array('tablerow_close',array()),
 828              array('tablerow_open',array()),
 829              array('tablecell_open',array(1,'left',1)),
 830              array('cdata',array(' Row 1 Col 1    ')),
 831              array('tablecell_close',array()),
 832              array('tablecell_open',array(1,'left',1)),
 833              array('cdata',array(' Row 1 Col 2     ')),
 834              array('tablecell_close',array()),
 835              array('tablecell_open',array(1,'left',1)),
 836              array('cdata',array(' Row 1 Col 3        ')),
 837              array('tablecell_close',array()),
 838              array('tablerow_close',array()),
 839              array('table_close',array(123)),
 840              array('p_open',array()),
 841              array('cdata',array('def')),
 842              array('p_close',array()),
 843              array('document_end',array()),
 844          );
 845  
 846          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 847      }
 848  
 849      // This is really a failing test - footnote able to spread across cols
 850      // Problem is fixing it would mean a major rewrite of table handling
 851      function testTableFootnote() {
 852          $this->P->addMode('table',new Table());
 853          $this->P->addMode('footnote',new Footnote());
 854          $this->P->parse('
 855  abc
 856  | ((Row 0 Col 1))    | ((Row 0 Col 2     | Row 0 Col 3))        |
 857  | Row 1 Col 1    | Row 1 Col 2     | Row 1 Col 3        |
 858  def');
 859          $calls = array (
 860              array('document_start',array()),
 861              array('p_open',array()),
 862              array('cdata',array("\n\nabc")),
 863              array('p_close',array()),
 864              array('table_open',array(3, 2, 6)),
 865              array('tablerow_open',array()),
 866              array('tablecell_open',array(1,'left',1)),
 867              array('cdata',array(' ')),
 868              array('nest', array ( array (
 869                array('footnote_open',array()),
 870                array('cdata',array('Row 0 Col 1')),
 871                array('footnote_close',array()),
 872              ))),
 873              array('cdata',array('    ')),
 874              array('tablecell_close',array()),
 875              array('tablecell_open',array(1,'left',1)),
 876              array('cdata',array(' ')),
 877              array('nest', array ( array (
 878                array('footnote_open',array()),
 879                array('cdata',array('Row 0 Col 2     | Row 0 Col 3')),
 880                array('footnote_close',array()),
 881              ))),
 882              array('cdata',array('        ')),
 883              array('tablecell_close',array()),
 884              array('tablecell_open',array(1,null,1)),
 885              array('cdata',array('')),
 886              array('tablecell_close',array()),
 887              array('tablerow_close',array()),
 888              array('tablerow_open',array()),
 889              array('tablecell_open',array(1,'left',1)),
 890              array('cdata',array(' Row 1 Col 1    ')),
 891              array('tablecell_close',array()),
 892              array('tablecell_open',array(1,'left',1)),
 893              array('cdata',array(' Row 1 Col 2     ')),
 894              array('tablecell_close',array()),
 895              array('tablecell_open',array(1,'left',1)),
 896              array('cdata',array(' Row 1 Col 3        ')),
 897              array('tablecell_close',array()),
 898              array('tablerow_close',array()),
 899              array('table_close',array(129)),
 900              array('p_open',array()),
 901              array('cdata',array('def')),
 902              array('p_close',array()),
 903              array('document_end',array()),
 904          );
 905          $this->assertEquals($calls,array_map('stripbyteindex',$this->H->calls));
 906      }
 907  
 908      function testTable_FS1833() {
 909          $syntax = " \n| Row 0 Col 1    |\n";
 910          $this->P->addMode('table',new Table());
 911          $this->P->parse($syntax);
 912          $calls = array (
 913              array('document_start',array()),
 914              array('table_open',array(1, 1, 2)),
 915              array('tablerow_open',array()),
 916              array('tablecell_open',array(1,'left',1)),
 917              array('cdata',array(' Row 0 Col 1    ')),
 918              array('tablecell_close',array()),
 919              array('tablerow_close',array()),
 920              array('table_close',array(strlen($syntax))),
 921              array('document_end',array()),
 922          );
 923          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
 924      }
 925  
 926      /**
 927       * missing cells in one row get filled up...
 928       */
 929      function testTable_CellFix() {
 930          $syntax = "\n| r1c1 | r1c2 | r1c3 |\n| r2c1 |\n";
 931          $this->P->addMode('table',new Table());
 932          $this->P->parse($syntax);
 933          $calls = array (
 934              array('document_start',array()),
 935              array('table_open',array(3, 2, 2)),
 936  
 937              array('tablerow_open',array()),
 938              array('tablecell_open',array(1,null,1)),
 939              array('cdata',array(' r1c1 ')),
 940              array('tablecell_close',array()),
 941              array('tablecell_open',array(1,null,1)),
 942              array('cdata',array(' r1c2 ')),
 943              array('tablecell_close',array()),
 944              array('tablecell_open',array(1,null,1)),
 945              array('cdata',array(' r1c3 ')),
 946              array('tablecell_close',array()),
 947              array('tablerow_close',array()),
 948  
 949              array('tablerow_open',array()),
 950              array('tablecell_open',array(1,null,1)),
 951              array('cdata',array(' r2c1 ')),
 952              array('tablecell_close',array()),
 953              array('tablecell_open',array(1,null,1)),
 954              array('cdata',array('')),
 955              array('tablecell_close',array()),
 956              array('tablecell_open',array(1,null,1)),
 957              array('cdata',array('')),
 958              array('tablecell_close',array()),
 959              array('tablerow_close',array()),
 960  
 961              array('table_close',array(strlen($syntax))),
 962              array('document_end',array()),
 963          );
 964          $this->assertEquals($calls, array_map('stripbyteindex',$this->H->calls));
 965      }
 966  
 967      /**
 968       * ... even if the longer row comes later
 969       */
 970      function testTable_CellFix2() {
 971          $syntax = "\n| r1c1 |\n| r2c1 | r2c2 | r2c3 |\n";
 972          $this->P->addMode('table',new Table());
 973          $this->P->parse($syntax);
 974          $calls = array (
 975              array('document_start',array()),
 976              array('table_open',array(3, 2, 2)),
 977  
 978              array('tablerow_open',array()),
 979              array('tablecell_open',array(1,null,1)),
 980              array('cdata',array(' r1c1 ')),
 981              array('tablecell_close',array()),
 982              array('tablecell_open',array(1,null,1)),
 983              array('cdata',array('')),
 984              array('tablecell_close',array()),
 985              array('tablecell_open',array(1,null,1)),
 986              array('cdata',array('')),
 987              array('tablecell_close',array()),
 988              array('tablerow_close',array()),
 989  
 990              array('tablerow_open',array()),
 991              array('tablecell_open',array(1,null,1)),
 992              array('cdata',array(' r2c1 ')),
 993              array('tablecell_close',array()),
 994              array('tablecell_open',array(1,null,1)),
 995              array('cdata',array(' r2c2 ')),
 996              array('tablecell_close',array()),
 997              array('tablecell_open',array(1,null,1)),
 998              array('cdata',array(' r2c3 ')),
 999              array('tablecell_close',array()),
1000              array('tablerow_close',array()),
1001  
1002              array('table_close',array(strlen($syntax))),
1003              array('document_end',array()),
1004          );
1005          $this->assertEquals($calls, array_map('stripbyteindex',$this->H->calls));
1006      }
1007  }