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