1<?php 2require_once 'parser.inc.php'; 3 4class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser { 5 6 function testSingleAcronym() { 7 $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOOBAR'))); 8 $this->P->parse('abc FOOBAR xyz'); 9 10 $calls = array ( 11 array('document_start',array()), 12 array('p_open',array()), 13 array('cdata',array("\n".'abc ')), 14 array('acronym',array('FOOBAR')), 15 array('cdata',array(' xyz')), 16 array('p_close',array()), 17 array('document_end',array()), 18 ); 19 20 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 21 } 22 23 function testAlmostAnAcronym() { 24 $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOOBAR'))); 25 $this->P->parse('abcFOOBARxyz'); 26 27 $calls = array ( 28 array('document_start',array()), 29 array('p_open',array()), 30 array('cdata',array("\n".'abcFOOBARxyz')), 31 array('p_close',array()), 32 array('document_end',array()), 33 ); 34 35 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 36 } 37 38 function testPickAcronymCorrectly() { 39 $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOO'))); 40 $this->P->parse('FOOBAR FOO'); 41 42 $calls = array ( 43 array('document_start',array()), 44 array('p_open',array()), 45 array('cdata',array("\n".'FOOBAR ')), 46 array('acronym',array('FOO')), 47 array('cdata',array('')), 48 array('p_close',array()), 49 array('document_end',array()), 50 ); 51 52 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 53 } 54 55 function testMultipleAcronyms() { 56 $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOO','BAR'))); 57 $this->P->parse('abc FOO def BAR xyz'); 58 59 $calls = array ( 60 array('document_start',array()), 61 array('p_open',array()), 62 array('cdata',array("\n".'abc ')), 63 array('acronym',array('FOO')), 64 array('cdata',array(' def ')), 65 array('acronym',array('BAR')), 66 array('cdata',array(' xyz')), 67 array('p_close',array()), 68 array('document_end',array()), 69 ); 70 71 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 72 73 } 74 75 function testMultipleAcronymsWithSubset1() { 76 $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOO','A.FOO','FOO.1','A.FOO.1'))); 77 $this->P->parse('FOO A.FOO FOO.1 A.FOO.1'); 78 79 $calls = array ( 80 array('document_start',array()), 81 array('p_open',array()), 82 array('cdata',array("\n")), 83 array('acronym',array('FOO')), 84 array('cdata',array(" ")), 85 array('acronym',array('A.FOO')), 86 array('cdata',array(" ")), 87 array('acronym',array('FOO.1')), 88 array('cdata',array(" ")), 89 array('acronym',array('A.FOO.1')), 90 array('cdata',array('')), 91 array('p_close',array()), 92 array('document_end',array()), 93 ); 94 95 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 96 } 97 98 function testMultipleAcronymsWithSubset2() { 99 $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('A.FOO.1','FOO.1','A.FOO','FOO'))); 100 $this->P->parse('FOO A.FOO FOO.1 A.FOO.1'); 101 102 $calls = array ( 103 array('document_start',array()), 104 array('p_open',array()), 105 array('cdata',array("\n")), 106 array('acronym',array('FOO')), 107 array('cdata',array(" ")), 108 array('acronym',array('A.FOO')), 109 array('cdata',array(" ")), 110 array('acronym',array('FOO.1')), 111 array('cdata',array(" ")), 112 array('acronym',array('A.FOO.1')), 113 array('cdata',array('')), 114 array('p_close',array()), 115 array('document_end',array()), 116 ); 117 118 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 119 } 120 121 function testSingleSmileyFail() { 122 $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)'))); 123 $this->P->parse('abc:-)xyz'); 124 125 $calls = array ( 126 array('document_start',array()), 127 array('p_open',array()), 128 array('cdata',array("\nabc:-)xyz")), 129 array('p_close',array()), 130 array('document_end',array()), 131 ); 132 133 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 134 } 135 136 function testSingleSmiley() { 137 $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)'))); 138 $this->P->parse('abc :-) xyz'); 139 140 $calls = array ( 141 array('document_start',array()), 142 array('p_open',array()), 143 array('cdata',array("\n".'abc ')), 144 array('smiley',array(':-)')), 145 array('cdata',array(' xyz')), 146 array('p_close',array()), 147 array('document_end',array()), 148 ); 149 150 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 151 } 152 153 function testMultipleSmileysFail() { 154 $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)','^_^'))); 155 $this->P->parse('abc:-)x^_^yz'); 156 157 $calls = array ( 158 array('document_start',array()), 159 array('p_open',array()), 160 array('cdata',array("\nabc:-)x^_^yz")), 161 array('p_close',array()), 162 array('document_end',array()), 163 ); 164 165 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 166 } 167 168 function testMultipleSmileys() { 169 $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)','^_^'))); 170 $this->P->parse('abc :-) x ^_^ yz'); 171 172 $calls = array ( 173 array('document_start',array()), 174 array('p_open',array()), 175 array('cdata',array("\n".'abc ')), 176 array('smiley',array(':-)')), 177 array('cdata',array(' x ')), 178 array('smiley',array('^_^')), 179 array('cdata',array(' yz')), 180 array('p_close',array()), 181 array('document_end',array()), 182 ); 183 184 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 185 } 186 187 function testBackslashSmileyFail() { 188 // This smiley is really :-\\ but escaping makes like interesting 189 $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-\\\\'))); 190 $this->P->parse('abc:-\\\xyz'); 191 192 $calls = array ( 193 array('document_start',array()), 194 array('p_open',array()), 195 array('cdata',array("\nabc".':-\\\\'."xyz")), 196 array('p_close',array()), 197 array('document_end',array()), 198 ); 199 200 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 201 } 202 203 function testBackslashSmiley() { 204 // This smiley is really :-\\ but escaping makes like interesting 205 $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-\\\\'))); 206 $this->P->parse('abc :-\\\ xyz'); 207 208 $calls = array ( 209 array('document_start',array()), 210 array('p_open',array()), 211 array('cdata',array("\n".'abc ')), 212 array('smiley',array(':-\\\\')), 213 array('cdata',array(' xyz')), 214 array('p_close',array()), 215 array('document_end',array()), 216 ); 217 218 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 219 } 220 221 function testSingleWordblock() { 222 $this->P->addMode('wordblock',new Doku_Parser_Mode_Wordblock(array('CAT'))); 223 $this->P->parse('abc CAT xyz'); 224 225 $calls = array ( 226 array('document_start',array()), 227 array('p_open',array()), 228 array('cdata',array("\n".'abc ')), 229 array('wordblock',array('CAT')), 230 array('cdata',array(' xyz')), 231 array('p_close',array()), 232 array('document_end',array()), 233 ); 234 235 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 236 } 237 238 function testWordblockCase() { 239 $this->P->addMode('wordblock',new Doku_Parser_Mode_Wordblock(array('CAT'))); 240 $this->P->parse('abc cat xyz'); 241 242 $calls = array ( 243 array('document_start',array()), 244 array('p_open',array()), 245 array('cdata',array("\n".'abc ')), 246 array('wordblock',array('cat')), 247 array('cdata',array(' xyz')), 248 array('p_close',array()), 249 array('document_end',array()), 250 ); 251 252 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 253 } 254 255 function testMultipleWordblock() { 256 $this->P->addMode('wordblock',new Doku_Parser_Mode_Wordblock(array('CAT','dog'))); 257 $this->P->parse('abc cat x DOG yz'); 258 259 $calls = array ( 260 array('document_start',array()), 261 array('p_open',array()), 262 array('cdata',array("\n".'abc ')), 263 array('wordblock',array('cat')), 264 array('cdata',array(' x ')), 265 array('wordblock',array('DOG')), 266 array('cdata',array(' yz')), 267 array('p_close',array()), 268 array('document_end',array()), 269 ); 270 271 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 272 } 273 274 function testSingleEntity() { 275 $this->P->addMode('entity',new Doku_Parser_Mode_Entity(array('->'))); 276 $this->P->parse('x -> y'); 277 278 $calls = array ( 279 array('document_start',array()), 280 array('p_open',array()), 281 array('cdata',array("\n".'x ')), 282 array('entity',array('->')), 283 array('cdata',array(' y')), 284 array('p_close',array()), 285 array('document_end',array()), 286 ); 287 288 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 289 } 290 291 function testMultipleEntities() { 292 $this->P->addMode('entity',new Doku_Parser_Mode_Entity(array('->','<-'))); 293 $this->P->parse('x -> y <- z'); 294 295 $calls = array ( 296 array('document_start',array()), 297 array('p_open',array()), 298 array('cdata',array("\n".'x ')), 299 array('entity',array('->')), 300 array('cdata',array(' y ')), 301 array('entity',array('<-')), 302 array('cdata',array(' z')), 303 array('p_close',array()), 304 array('document_end',array()), 305 ); 306 307 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 308 } 309 310 function testMultiplyEntity() { 311 $this->P->addMode('multiplyentity',new Doku_Parser_Mode_MultiplyEntity()); 312 $this->P->parse('Foo 10x20 Bar'); 313 314 $calls = array ( 315 array('document_start',array()), 316 array('p_open',array()), 317 array('cdata',array("\n".'Foo ')), 318 array('multiplyentity',array(10,20)), 319 array('cdata',array(' Bar')), 320 array('p_close',array()), 321 array('document_end',array()), 322 ); 323 324 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 325 } 326 327 function testMultiplyEntityHex() { 328 // the multiply entity pattern should not match hex numbers, eg. 0x123 329 $this->P->addMode('multiplyentity',new Doku_Parser_Mode_MultiplyEntity()); 330 $this->P->parse('Foo 0x123 Bar'); 331 332 $calls = array ( 333 array('document_start',array()), 334 array('p_open',array()), 335 array('cdata',array("\n".'Foo 0x123 Bar')), 336 array('p_close',array()), 337 array('document_end',array()), 338 ); 339 340 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 341 } 342 343 function testHR() { 344 $this->P->addMode('hr',new Doku_Parser_Mode_HR()); 345 $this->P->parse("Foo \n ---- \n Bar"); 346 347 $calls = array ( 348 array('document_start',array()), 349 array('p_open',array()), 350 array('cdata',array("\n".'Foo ')), 351 array('p_close',array()), 352 array('hr',array()), 353 array('p_open',array()), 354 array('cdata',array("\n Bar")), 355 array('p_close',array()), 356 array('document_end',array()), 357 ); 358 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 359 } 360 361 function testHREol() { 362 $this->P->addMode('hr',new Doku_Parser_Mode_HR()); 363 $this->P->parse("Foo \n----\n Bar"); 364 365 $calls = array ( 366 array('document_start',array()), 367 array('p_open',array()), 368 array('cdata',array("\n".'Foo ')), 369 array('p_close',array()), 370 array('hr',array()), 371 array('p_open',array()), 372 array('cdata',array("\n Bar")), 373 array('p_close',array()), 374 array('document_end',array()), 375 ); 376 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 377 } 378} 379 380