1<?php 2 3namespace dokuwiki\test\Parsing\ParserMode; 4 5use dokuwiki\Parsing\ParserMode\Acronym; 6use dokuwiki\Parsing\ParserMode\Entity; 7use dokuwiki\Parsing\ParserMode\Multiplyentity; 8use dokuwiki\Parsing\ParserMode\Smiley; 9use dokuwiki\Parsing\ParserMode\Wordblock; 10 11class ReplacementsTest extends ParserTestBase 12{ 13 14 function testSingleAcronym() { 15 $this->P->addMode('acronym',new Acronym(['FOOBAR'])); 16 $this->P->parse('abc FOOBAR xyz'); 17 $calls = [ 18 ['document_start',[]], 19 ['p_open',[]], 20 ['cdata',["\n".'abc ']], 21 ['acronym',['FOOBAR']], 22 ['cdata',[' xyz']], 23 ['p_close',[]], 24 ['document_end',[]], 25 ]; 26 $this->assertCalls($calls, $this->H->calls); 27 } 28 29 function testAlmostAnAcronym() { 30 $this->P->addMode('acronym',new Acronym(['FOOBAR'])); 31 $this->P->parse('abcFOOBARxyz'); 32 $calls = [ 33 ['document_start',[]], 34 ['p_open',[]], 35 ['cdata',["\n".'abcFOOBARxyz']], 36 ['p_close',[]], 37 ['document_end',[]], 38 ]; 39 $this->assertCalls($calls, $this->H->calls); 40 } 41 42 function testPickAcronymCorrectly() { 43 $this->P->addMode('acronym',new Acronym(['FOO'])); 44 $this->P->parse('FOOBAR FOO'); 45 $calls = [ 46 ['document_start',[]], 47 ['p_open',[]], 48 ['cdata',["\n".'FOOBAR ']], 49 ['acronym',['FOO']], 50 ['cdata',['']], 51 ['p_close',[]], 52 ['document_end',[]], 53 ]; 54 $this->assertCalls($calls, $this->H->calls); 55 } 56 57 function testMultipleAcronyms() { 58 $this->P->addMode('acronym',new Acronym(['FOO','BAR'])); 59 $this->P->parse('abc FOO def BAR xyz'); 60 $calls = [ 61 ['document_start',[]], 62 ['p_open',[]], 63 ['cdata',["\n".'abc ']], 64 ['acronym',['FOO']], 65 ['cdata',[' def ']], 66 ['acronym',['BAR']], 67 ['cdata',[' xyz']], 68 ['p_close',[]], 69 ['document_end',[]], 70 ]; 71 $this->assertCalls($calls, $this->H->calls); 72 } 73 74 function testMultipleAcronymsWithSubset1() { 75 $this->P->addMode('acronym',new Acronym(['FOO','A.FOO','FOO.1','A.FOO.1'])); 76 $this->P->parse('FOO A.FOO FOO.1 A.FOO.1'); 77 $calls = [ 78 ['document_start',[]], 79 ['p_open',[]], 80 ['cdata',["\n"]], 81 ['acronym',['FOO']], 82 ['cdata',[" "]], 83 ['acronym',['A.FOO']], 84 ['cdata',[" "]], 85 ['acronym',['FOO.1']], 86 ['cdata',[" "]], 87 ['acronym',['A.FOO.1']], 88 ['cdata',['']], 89 ['p_close',[]], 90 ['document_end',[]], 91 ]; 92 $this->assertCalls($calls, $this->H->calls); 93 } 94 95 function testMultipleAcronymsWithSubset2() { 96 $this->P->addMode('acronym',new Acronym(['A.FOO.1','FOO.1','A.FOO','FOO'])); 97 $this->P->parse('FOO A.FOO FOO.1 A.FOO.1'); 98 $calls = [ 99 ['document_start',[]], 100 ['p_open',[]], 101 ['cdata',["\n"]], 102 ['acronym',['FOO']], 103 ['cdata',[" "]], 104 ['acronym',['A.FOO']], 105 ['cdata',[" "]], 106 ['acronym',['FOO.1']], 107 ['cdata',[" "]], 108 ['acronym',['A.FOO.1']], 109 ['cdata',['']], 110 ['p_close',[]], 111 ['document_end',[]], 112 ]; 113 $this->assertCalls($calls, $this->H->calls); 114 } 115 116 function testSingleSmileyFail() { 117 $this->P->addMode('smiley',new Smiley([':-)'])); 118 $this->P->parse('abc:-)xyz'); 119 $calls = [ 120 ['document_start',[]], 121 ['p_open',[]], 122 ['cdata',["\nabc:-)xyz"]], 123 ['p_close',[]], 124 ['document_end',[]], 125 ]; 126 $this->assertCalls($calls, $this->H->calls); 127 } 128 129 function testSingleSmiley() { 130 $this->P->addMode('smiley',new Smiley([':-)'])); 131 $this->P->parse('abc :-) xyz'); 132 $calls = [ 133 ['document_start',[]], 134 ['p_open',[]], 135 ['cdata',["\n".'abc ']], 136 ['smiley',[':-)']], 137 ['cdata',[' xyz']], 138 ['p_close',[]], 139 ['document_end',[]], 140 ]; 141 $this->assertCalls($calls, $this->H->calls); 142 } 143 144 function testMultipleSmileysFail() { 145 $this->P->addMode('smiley',new Smiley([':-)','^_^'])); 146 $this->P->parse('abc:-)x^_^yz'); 147 $calls = [ 148 ['document_start',[]], 149 ['p_open',[]], 150 ['cdata',["\nabc:-)x^_^yz"]], 151 ['p_close',[]], 152 ['document_end',[]], 153 ]; 154 $this->assertCalls($calls, $this->H->calls); 155 } 156 157 function testMultipleSmileys() { 158 $this->P->addMode('smiley',new Smiley([':-)','^_^'])); 159 $this->P->parse('abc :-) x ^_^ yz'); 160 $calls = [ 161 ['document_start',[]], 162 ['p_open',[]], 163 ['cdata',["\n".'abc ']], 164 ['smiley',[':-)']], 165 ['cdata',[' x ']], 166 ['smiley',['^_^']], 167 ['cdata',[' yz']], 168 ['p_close',[]], 169 ['document_end',[]], 170 ]; 171 $this->assertCalls($calls, $this->H->calls); 172 } 173 174 function testBackslashSmileyFail() { 175 $this->P->addMode('smiley',new Smiley([':-\\\\'])); 176 $this->P->parse('abc:-\\\xyz'); 177 $calls = [ 178 ['document_start',[]], 179 ['p_open',[]], 180 ['cdata',["\nabc".':-\\\\'."xyz"]], 181 ['p_close',[]], 182 ['document_end',[]], 183 ]; 184 $this->assertCalls($calls, $this->H->calls); 185 } 186 187 function testBackslashSmiley() { 188 $this->P->addMode('smiley',new Smiley([':-\\\\'])); 189 $this->P->parse('abc :-\\\ xyz'); 190 $calls = [ 191 ['document_start',[]], 192 ['p_open',[]], 193 ['cdata',["\n".'abc ']], 194 ['smiley',[':-\\\\']], 195 ['cdata',[' xyz']], 196 ['p_close',[]], 197 ['document_end',[]], 198 ]; 199 $this->assertCalls($calls, $this->H->calls); 200 } 201 202 function testSingleWordblock() { 203 $this->P->addMode('wordblock',new Wordblock(['CAT'])); 204 $this->P->parse('abc CAT xyz'); 205 $calls = [ 206 ['document_start',[]], 207 ['p_open',[]], 208 ['cdata',["\n".'abc ']], 209 ['wordblock',['CAT']], 210 ['cdata',[' xyz']], 211 ['p_close',[]], 212 ['document_end',[]], 213 ]; 214 $this->assertCalls($calls, $this->H->calls); 215 } 216 217 function testWordblockCase() { 218 $this->P->addMode('wordblock',new Wordblock(['CAT'])); 219 $this->P->parse('abc cat xyz'); 220 $calls = [ 221 ['document_start',[]], 222 ['p_open',[]], 223 ['cdata',["\n".'abc ']], 224 ['wordblock',['cat']], 225 ['cdata',[' xyz']], 226 ['p_close',[]], 227 ['document_end',[]], 228 ]; 229 $this->assertCalls($calls, $this->H->calls); 230 } 231 232 function testMultipleWordblock() { 233 $this->P->addMode('wordblock',new Wordblock(['CAT','dog'])); 234 $this->P->parse('abc cat x DOG yz'); 235 $calls = [ 236 ['document_start',[]], 237 ['p_open',[]], 238 ['cdata',["\n".'abc ']], 239 ['wordblock',['cat']], 240 ['cdata',[' x ']], 241 ['wordblock',['DOG']], 242 ['cdata',[' yz']], 243 ['p_close',[]], 244 ['document_end',[]], 245 ]; 246 $this->assertCalls($calls, $this->H->calls); 247 } 248 249 function testSingleEntity() { 250 $this->P->addMode('entity',new Entity(['->'])); 251 $this->P->parse('x -> y'); 252 $calls = [ 253 ['document_start',[]], 254 ['p_open',[]], 255 ['cdata',["\n".'x ']], 256 ['entity',['->']], 257 ['cdata',[' y']], 258 ['p_close',[]], 259 ['document_end',[]], 260 ]; 261 $this->assertCalls($calls, $this->H->calls); 262 } 263 264 function testMultipleEntities() { 265 $this->P->addMode('entity',new Entity(['->','<-'])); 266 $this->P->parse('x -> y <- z'); 267 $calls = [ 268 ['document_start',[]], 269 ['p_open',[]], 270 ['cdata',["\n".'x ']], 271 ['entity',['->']], 272 ['cdata',[' y ']], 273 ['entity',['<-']], 274 ['cdata',[' z']], 275 ['p_close',[]], 276 ['document_end',[]], 277 ]; 278 $this->assertCalls($calls, $this->H->calls); 279 } 280 281 function testMultiplyEntity() { 282 $this->P->addMode('multiplyentity',new Multiplyentity()); 283 $this->P->parse('Foo 10x20 Bar'); 284 $calls = [ 285 ['document_start',[]], 286 ['p_open',[]], 287 ['cdata',["\n".'Foo ']], 288 ['multiplyentity',[10,20]], 289 ['cdata',[' Bar']], 290 ['p_close',[]], 291 ['document_end',[]], 292 ]; 293 $this->assertCalls($calls, $this->H->calls); 294 } 295 296 function testMultiplyEntityHex() { 297 $this->P->addMode('multiplyentity',new Multiplyentity()); 298 $this->P->parse('Foo 0x123 Bar'); 299 $calls = [ 300 ['document_start',[]], 301 ['p_open',[]], 302 ['cdata',["\n".'Foo 0x123 Bar']], 303 ['p_close',[]], 304 ['document_end',[]], 305 ]; 306 $this->assertCalls($calls, $this->H->calls); 307 } 308 309} 310