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