[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

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

   1  <?php
   2  
   3  use dokuwiki\Parsing\Handler\Lists;
   4  use dokuwiki\Parsing\ParserMode\Eol;
   5  use dokuwiki\Parsing\ParserMode\Footnote;
   6  use dokuwiki\Parsing\ParserMode\Formatting;
   7  use dokuwiki\Parsing\ParserMode\Linebreak;
   8  use dokuwiki\Parsing\ParserMode\Listblock;
   9  use dokuwiki\Parsing\ParserMode\Unformatted;
  10  
  11  require_once  'parser.inc.php';
  12  
  13  class TestOfDoku_Parser_Lists extends TestOfDoku_Parser {
  14  
  15      function testUnorderedList() {
  16          $this->P->addMode('listblock',new Listblock());
  17          $this->P->parse('
  18    *A
  19      * B
  20    * C
  21  ');
  22          $calls = array (
  23              array('document_start',array()),
  24              array('listu_open',array()),
  25              array('listitem_open',array(1,Lists::NODE)),
  26              array('listcontent_open',array()),
  27              array('cdata',array("A")),
  28              array('listcontent_close',array()),
  29              array('listu_open',array()),
  30              array('listitem_open',array(2)),
  31              array('listcontent_open',array()),
  32              array('cdata',array(' B')),
  33              array('listcontent_close',array()),
  34              array('listitem_close',array()),
  35              array('listu_close',array()),
  36              array('listitem_close',array()),
  37              array('listitem_open',array(1)),
  38              array('listcontent_open',array()),
  39              array('cdata',array(' C')),
  40              array('listcontent_close',array()),
  41              array('listitem_close',array()),
  42              array('listu_close',array()),
  43              array('document_end',array()),
  44          );
  45          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  46      }
  47  
  48      function testOrderedList() {
  49          $this->P->addMode('listblock',new Listblock());
  50          $this->P->parse('
  51    -A
  52      - B
  53    - C
  54  ');
  55          $calls = array (
  56              array('document_start',array()),
  57              array('listo_open',array()),
  58              array('listitem_open',array(1,Lists::NODE)),
  59              array('listcontent_open',array()),
  60              array('cdata',array("A")),
  61              array('listcontent_close',array()),
  62              array('listo_open',array()),
  63              array('listitem_open',array(2)),
  64              array('listcontent_open',array()),
  65              array('cdata',array(' B')),
  66              array('listcontent_close',array()),
  67              array('listitem_close',array()),
  68              array('listo_close',array()),
  69              array('listitem_close',array()),
  70              array('listitem_open',array(1)),
  71              array('listcontent_open',array()),
  72              array('cdata',array(' C')),
  73              array('listcontent_close',array()),
  74              array('listitem_close',array()),
  75              array('listo_close',array()),
  76              array('document_end',array()),
  77          );
  78          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
  79      }
  80  
  81  
  82      function testMixedList() {
  83          $this->P->addMode('listblock',new Listblock());
  84          $this->P->parse('
  85    -A
  86      * B
  87    - C
  88  ');
  89          $calls = array (
  90              array('document_start',array()),
  91              array('listo_open',array()),
  92              array('listitem_open',array(1,Lists::NODE)),
  93              array('listcontent_open',array()),
  94              array('cdata',array("A")),
  95              array('listcontent_close',array()),
  96              array('listu_open',array()),
  97              array('listitem_open',array(2)),
  98              array('listcontent_open',array()),
  99              array('cdata',array(' B')),
 100              array('listcontent_close',array()),
 101              array('listitem_close',array()),
 102              array('listu_close',array()),
 103              array('listitem_close',array()),
 104              array('listitem_open',array(1)),
 105              array('listcontent_open',array()),
 106              array('cdata',array(' C')),
 107              array('listcontent_close',array()),
 108              array('listitem_close',array()),
 109              array('listo_close',array()),
 110              array('document_end',array()),
 111          );
 112          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
 113      }
 114  
 115      function testUnorderedListWinEOL() {
 116          $this->P->addMode('listblock',new Listblock());
 117          $this->P->parse("\r\n  *A\r\n    * B\r\n  * C\r\n");
 118          $calls = array (
 119              array('document_start',array()),
 120              array('listu_open',array()),
 121              array('listitem_open',array(1,Lists::NODE)),
 122              array('listcontent_open',array()),
 123              array('cdata',array("A")),
 124              array('listcontent_close',array()),
 125              array('listu_open',array()),
 126              array('listitem_open',array(2)),
 127              array('listcontent_open',array()),
 128              array('cdata',array(' B')),
 129              array('listcontent_close',array()),
 130              array('listitem_close',array()),
 131              array('listu_close',array()),
 132              array('listitem_close',array()),
 133              array('listitem_open',array(1)),
 134              array('listcontent_open',array()),
 135              array('cdata',array(' C')),
 136              array('listcontent_close',array()),
 137              array('listitem_close',array()),
 138              array('listu_close',array()),
 139              array('document_end',array()),
 140          );
 141          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
 142      }
 143  
 144      function testOrderedListWinEOL() {
 145          $this->P->addMode('listblock',new Listblock());
 146          $this->P->parse("\r\n  -A\r\n    - B\r\n  - C\r\n");
 147          $calls = array (
 148              array('document_start',array()),
 149              array('listo_open',array()),
 150              array('listitem_open',array(1,Lists::NODE)),
 151              array('listcontent_open',array()),
 152              array('cdata',array("A")),
 153              array('listcontent_close',array()),
 154              array('listo_open',array()),
 155              array('listitem_open',array(2)),
 156              array('listcontent_open',array()),
 157              array('cdata',array(' B')),
 158              array('listcontent_close',array()),
 159              array('listitem_close',array()),
 160              array('listo_close',array()),
 161              array('listitem_close',array()),
 162              array('listitem_open',array(1)),
 163              array('listcontent_open',array()),
 164              array('cdata',array(' C')),
 165              array('listcontent_close',array()),
 166              array('listitem_close',array()),
 167              array('listo_close',array()),
 168              array('document_end',array()),
 169          );
 170          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
 171      }
 172  
 173      function testNotAList() {
 174          $this->P->addMode('listblock',new Listblock());
 175          $this->P->parse("Foo  -bar  *foo Bar");
 176          $calls = array (
 177              array('document_start',array()),
 178              array('p_open',array()),
 179              array('cdata',array("\nFoo  -bar  *foo Bar")),
 180              array('p_close',array()),
 181              array('document_end',array()),
 182          );
 183          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
 184      }
 185  
 186      function testUnorderedListParagraph() {
 187          $this->P->addMode('listblock',new Listblock());
 188          $this->P->addMode('eol',new Eol());
 189          $this->P->parse('Foo
 190    *A
 191      * B
 192    * C
 193  Bar');
 194          $calls = array (
 195              array('document_start',array()),
 196              array('p_open',array()),
 197              array('cdata',array("Foo")),
 198              array('p_close',array()),
 199              array('listu_open',array()),
 200              array('listitem_open',array(1,Lists::NODE)),
 201              array('listcontent_open',array()),
 202              array('cdata',array("A")),
 203              array('listcontent_close',array()),
 204              array('listu_open',array()),
 205              array('listitem_open',array(2)),
 206              array('listcontent_open',array()),
 207              array('cdata',array(' B')),
 208              array('listcontent_close',array()),
 209              array('listitem_close',array()),
 210              array('listu_close',array()),
 211              array('listitem_close',array()),
 212              array('listitem_open',array(1)),
 213              array('listcontent_open',array()),
 214              array('cdata',array(' C')),
 215              array('listcontent_close',array()),
 216              array('listitem_close',array()),
 217              array('listu_close',array()),
 218              array('p_open',array()),
 219              array('cdata',array("Bar")),
 220              array('p_close',array()),
 221              array('document_end',array()),
 222          );
 223          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
 224      }
 225  
 226      // This is really a failing test - formatting able to spread across list items
 227      // Problem is fixing it would mean a major rewrite of lists
 228      function testUnorderedListStrong() {
 229          $this->P->addMode('listblock',new Listblock());
 230          $this->P->addMode('strong',new Formatting('strong'));
 231          $this->P->parse('
 232    ***A**
 233      *** B
 234    * C**
 235  ');
 236          $calls = array (
 237              array('document_start',array()),
 238              array('listu_open',array()),
 239              array('listitem_open',array(1,Lists::NODE)),
 240              array('listcontent_open',array()),
 241              array('strong_open',array()),
 242              array('cdata',array("A")),
 243              array('strong_close',array()),
 244              array('listcontent_close',array()),
 245              array('listu_open',array()),
 246              array('listitem_open',array(2)),
 247              array('listcontent_open',array()),
 248              array('strong_open',array()),
 249              array('cdata',array(" B\n  * C")),
 250              array('strong_close',array()),
 251              array('listcontent_close',array()),
 252              array('listitem_close',array()),
 253              array('listu_close',array()),
 254              array('listitem_close',array()),
 255              array('listu_close',array()),
 256              array('document_end',array()),
 257          );
 258          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
 259      }
 260  
 261      // This is really a failing test - unformatted able to spread across list items
 262      // Problem is fixing it would mean a major rewrite of lists
 263      function testUnorderedListUnformatted() {
 264          $this->P->addMode('listblock',new Listblock());
 265          $this->P->addMode('unformatted',new Unformatted());
 266          $this->P->parse('
 267    *%%A%%
 268      *%% B
 269    * C%%
 270  ');
 271          $calls = array (
 272              array('document_start',array()),
 273              array('listu_open',array()),
 274              array('listitem_open',array(1,Lists::NODE)),
 275              array('listcontent_open',array()),
 276              array('unformatted',array("A")),
 277              array('listcontent_close',array()),
 278              array('listu_open',array()),
 279              array('listitem_open',array(2)),
 280              array('listcontent_open',array()),
 281              array('unformatted',array(" B\n  * C")),
 282              array('listcontent_close',array()),
 283              array('listitem_close',array()),
 284              array('listu_close',array()),
 285              array('listitem_close',array()),
 286              array('listu_close',array()),
 287              array('document_end',array()),
 288          );
 289          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
 290      }
 291  
 292      function testUnorderedListLinebreak() {
 293          $this->P->addMode('listblock',new Listblock());
 294          $this->P->addMode('linebreak',new Linebreak());
 295          $this->P->parse('
 296    *A\\\\ D
 297      * B
 298    * C
 299  ');
 300          $calls = array (
 301              array('document_start',array()),
 302              array('listu_open',array()),
 303              array('listitem_open',array(1,Lists::NODE)),
 304              array('listcontent_open',array()),
 305              array('cdata',array("A")),
 306              array('linebreak',array()),
 307              array('cdata',array("D")),
 308              array('listcontent_close',array()),
 309              array('listu_open',array()),
 310              array('listitem_open',array(2)),
 311              array('listcontent_open',array()),
 312              array('cdata',array(' B')),
 313              array('listcontent_close',array()),
 314              array('listitem_close',array()),
 315              array('listu_close',array()),
 316              array('listitem_close',array()),
 317              array('listitem_open',array(1)),
 318              array('listcontent_open',array()),
 319              array('cdata',array(' C')),
 320              array('listcontent_close',array()),
 321              array('listitem_close',array()),
 322              array('listu_close',array()),
 323              array('document_end',array()),
 324          );
 325          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
 326      }
 327  
 328      function testUnorderedListLinebreak2() {
 329          $this->P->addMode('listblock',new Listblock());
 330          $this->P->addMode('linebreak',new Linebreak());
 331          $this->P->parse('
 332    *A\\\\
 333    * B
 334  ');
 335          $calls = array (
 336              array('document_start',array()),
 337              array('listu_open',array()),
 338              array('listitem_open',array(1)),
 339              array('listcontent_open',array()),
 340              array('cdata',array("A")),
 341              array('linebreak',array()),
 342              array('listcontent_close',array()),
 343              array('listitem_close',array()),
 344              array('listitem_open',array(1)),
 345              array('listcontent_open',array()),
 346              array('cdata',array(' B')),
 347              array('listcontent_close',array()),
 348              array('listitem_close',array()),
 349              array('listu_close',array()),
 350              array('document_end',array()),
 351          );
 352          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
 353      }
 354  
 355      function testUnorderedListFootnote() {
 356          $this->P->addMode('listblock',new Listblock());
 357          $this->P->addMode('footnote',new Footnote());
 358          $this->P->parse('
 359    *((A))
 360      *(( B
 361    * C )) 
 362  
 363  ');
 364          $calls = array (
 365              array('document_start',array()),
 366              array('listu_open',array()),
 367              array('listitem_open',array(1,Lists::NODE)),
 368              array('listcontent_open',array()),
 369              array('nest', array( array(
 370                  array('footnote_open',array()),
 371                  array('cdata',array("A")),
 372                  array('footnote_close',array())
 373              ))),
 374              array('listcontent_close',array()),
 375              array('listu_open',array()),
 376              array('listitem_open',array(2)),
 377              array('listcontent_open',array()),
 378              array('nest', array( array(
 379                  array('footnote_open',array()),
 380                  array('cdata',array(" B")),
 381                  array('listu_open',array()),
 382                  array('listitem_open',array(1)),
 383                  array('listcontent_open',array()),
 384                  array('cdata',array(" C )) ")),
 385                  array('listcontent_close',array()),
 386                  array('listitem_close',array()),
 387                  array('listu_close',array()),
 388                  array('cdata',array("\n\n")),
 389                  array('footnote_close',array())
 390              ))),
 391              array('listcontent_close',array()),
 392              array('listitem_close',array()),
 393              array('listu_close',array()),
 394              array('listitem_close',array()),
 395              array('listu_close',array()),
 396              array('document_end',array())
 397          );
 398  
 399          $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
 400      }
 401  }
 402