1<?php 2require_once 'parser.inc.php'; 3 4class TestOfDoku_Parser_Links extends TestOfDoku_Parser { 5 6 function testExternalLinkSimple() { 7 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 8 $this->P->parse("Foo http://www.google.com Bar"); 9 $calls = array ( 10 array('document_start',array()), 11 array('p_open',array()), 12 array('cdata',array("\n".'Foo ')), 13 array('externallink',array('http://www.google.com', NULL)), 14 array('cdata',array(' Bar')), 15 array('p_close',array()), 16 array('document_end',array()), 17 ); 18 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 19 } 20 21 function testExternalLinkCase() { 22 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 23 $this->P->parse("Foo HTTP://WWW.GOOGLE.COM Bar"); 24 $calls = array ( 25 array('document_start',array()), 26 array('p_open',array()), 27 array('cdata',array("\n".'Foo ')), 28 array('externallink',array('HTTP://WWW.GOOGLE.COM', NULL)), 29 array('cdata',array(' Bar')), 30 array('p_close',array()), 31 array('document_end',array()), 32 ); 33 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 34 } 35 36 function testExternalIPv4() { 37 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 38 $this->P->parse("Foo http://123.123.3.21/foo Bar"); 39 $calls = array ( 40 array('document_start',array()), 41 array('p_open',array()), 42 array('cdata',array("\n".'Foo ')), 43 array('externallink',array('http://123.123.3.21/foo', NULL)), 44 array('cdata',array(' Bar')), 45 array('p_close',array()), 46 array('document_end',array()), 47 ); 48 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 49 } 50 51 function testExternalIPv6() { 52 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 53 $this->P->parse("Foo http://[3ffe:2a00:100:7031::1]/foo Bar"); 54 $calls = array ( 55 array('document_start',array()), 56 array('p_open',array()), 57 array('cdata',array("\n".'Foo ')), 58 array('externallink',array('http://[3ffe:2a00:100:7031::1]/foo', NULL)), 59 array('cdata',array(' Bar')), 60 array('p_close',array()), 61 array('document_end',array()), 62 ); 63 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 64 } 65 66 function testExternalMulti(){ 67 $this->teardown(); 68 69 $links = array( 70 'http://www.google.com', 71 'HTTP://WWW.GOOGLE.COM', 72 'http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html', 73 'http://[1080:0:0:0:8:800:200C:417A]/index.html', 74 'http://[3ffe:2a00:100:7031::1]', 75 'http://[1080::8:800:200C:417A]/foo', 76 'http://[::192.9.5.5]/ipng', 77 'http://[::FFFF:129.144.52.38]:80/index.html', 78 'http://[2010:836B:4179::836B:4179]', 79 ); 80 $titles = array(false,null,'foo bar'); 81 foreach($links as $link){ 82 foreach($titles as $title){ 83 if($title === false){ 84 $source = $link; 85 $name = null; 86 }elseif($title === null){ 87 $source = "[[$link]]"; 88 $name = null; 89 }else{ 90 $source = "[[$link|$title]]"; 91 $name = $title; 92 } 93 $this->setup(); 94 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 95 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 96 $this->P->parse("Foo $source Bar"); 97 $calls = array ( 98 array('document_start',array()), 99 array('p_open',array()), 100 array('cdata',array("\n".'Foo ')), 101 array('externallink',array($link, $name)), 102 array('cdata',array(' Bar')), 103 array('p_close',array()), 104 array('document_end',array()), 105 ); 106 $this->assertEquals(array_map('stripByteIndex',$this->H->calls), $calls, $source); 107 $this->teardown(); 108 } 109 } 110 111 $this->setup(); 112 } 113 114 function testExternalLinkJavascript() { 115 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 116 $this->P->parse("Foo javascript:alert('XSS'); Bar"); 117 $calls = array ( 118 array('document_start',array()), 119 array('p_open',array()), 120 array('cdata',array("\nFoo javascript:alert('XSS'); Bar")), 121 array('p_close',array()), 122 array('document_end',array()), 123 ); 124 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 125 } 126 127 function testExternalWWWLink() { 128 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 129 $this->P->parse("Foo www.google.com Bar"); 130 $calls = array ( 131 array('document_start',array()), 132 array('p_open',array()), 133 array('cdata',array("\n".'Foo ')), 134 array('externallink',array('http://www.google.com', 'www.google.com')), 135 array('cdata',array(' Bar')), 136 array('p_close',array()), 137 array('document_end',array()), 138 ); 139 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 140 } 141 142 function testExternalFTPLink() { 143 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 144 $this->P->parse("Foo ftp.sunsite.com Bar"); 145 $calls = array ( 146 array('document_start',array()), 147 array('p_open',array()), 148 array('cdata',array("\n".'Foo ')), 149 array('externallink',array('ftp://ftp.sunsite.com', 'ftp.sunsite.com')), 150 array('cdata',array(' Bar')), 151 array('p_close',array()), 152 array('document_end',array()), 153 ); 154 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 155 } 156 function testEmail() { 157 $this->P->addMode('emaillink',new Doku_Parser_Mode_Emaillink()); 158 $this->P->parse("Foo <bugs@php.net> Bar"); 159 $calls = array ( 160 array('document_start',array()), 161 array('p_open',array()), 162 array('cdata',array("\n".'Foo ')), 163 array('emaillink',array('bugs@php.net', NULL)), 164 array('cdata',array(' Bar')), 165 array('p_close',array()), 166 array('document_end',array()), 167 ); 168 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 169 } 170 171 function testEmailRFC2822() { 172 $this->P->addMode('emaillink',new Doku_Parser_Mode_Emaillink()); 173 $this->P->parse("Foo <~fix+bug's.for/ev{e}r@php.net> Bar"); 174 $calls = array ( 175 array('document_start',array()), 176 array('p_open',array()), 177 array('cdata',array("\n".'Foo ')), 178 array('emaillink',array("~fix+bug's.for/ev{e}r@php.net", NULL)), 179 array('cdata',array(' 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 testEmailCase() { 187 $this->P->addMode('emaillink',new Doku_Parser_Mode_Emaillink()); 188 $this->P->parse("Foo <bugs@pHp.net> Bar"); 189 $calls = array ( 190 array('document_start',array()), 191 array('p_open',array()), 192 array('cdata',array("\n".'Foo ')), 193 array('emaillink',array('bugs@pHp.net', NULL)), 194 array('cdata',array(' Bar')), 195 array('p_close',array()), 196 array('document_end',array()), 197 ); 198 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 199 } 200 201 202 function testInternalLinkOneChar() { 203 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 204 $this->P->parse("Foo [[l]] Bar"); 205 $calls = array ( 206 array('document_start',array()), 207 array('p_open',array()), 208 array('cdata',array("\n".'Foo ')), 209 array('internallink',array('l',NULL)), 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 function testInternalLinkNoChar() { 218 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 219 $this->P->parse("Foo [[]] Bar"); 220 $calls = array ( 221 array('document_start',array()), 222 array('p_open',array()), 223 array('cdata',array("\n".'Foo ')), 224 array('internallink',array('',NULL)), 225 array('cdata',array(' Bar')), 226 array('p_close',array()), 227 array('document_end',array()), 228 ); 229 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 230 } 231 232 function testInternalLinkNamespaceNoTitle() { 233 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 234 $this->P->parse("Foo [[foo:bar]] Bar"); 235 $calls = array ( 236 array('document_start',array()), 237 array('p_open',array()), 238 array('cdata',array("\n".'Foo ')), 239 array('internallink',array('foo:bar',NULL)), 240 array('cdata',array(' Bar')), 241 array('p_close',array()), 242 array('document_end',array()), 243 ); 244 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 245 } 246 247 function testInternalLinkNamespace() { 248 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 249 $this->P->parse("Foo [[x:1:y:foo_bar:z|Test]] Bar"); 250 $calls = array ( 251 array('document_start',array()), 252 array('p_open',array()), 253 array('cdata',array("\n".'Foo ')), 254 array('internallink',array('x:1:y:foo_bar:z','Test')), 255 array('cdata',array(' Bar')), 256 array('p_close',array()), 257 array('document_end',array()), 258 ); 259 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 260 } 261 262 function testInternalLinkSectionRef() { 263 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 264 $this->P->parse("Foo [[wiki:syntax#internal|Syntax]] Bar"); 265 $calls = array ( 266 array('document_start',array()), 267 array('p_open',array()), 268 array('cdata',array("\n".'Foo ')), 269 array('internallink',array('wiki:syntax#internal','Syntax')), 270 array('cdata',array(' Bar')), 271 array('p_close',array()), 272 array('document_end',array()), 273 ); 274 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 275 } 276 277 function testExternalInInternalLink() { 278 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 279 $this->P->parse("Foo [[http://www.google.com|Google]] Bar"); 280 $calls = array ( 281 array('document_start',array()), 282 array('p_open',array()), 283 array('cdata',array("\n".'Foo ')), 284 array('externallink',array('http://www.google.com','Google')), 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 testInterwikiLink() { 293 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 294 $this->P->parse("Foo [[iw>somepage|Some Page]] Bar"); 295 $calls = array ( 296 array('document_start',array()), 297 array('p_open',array()), 298 array('cdata',array("\n".'Foo ')), 299 array('interwikilink',array('iw>somepage','Some Page','iw','somepage')), 300 array('cdata',array(' Bar')), 301 array('p_close',array()), 302 array('document_end',array()), 303 ); 304 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 305 } 306 307 function testInterwikiLinkCase() { 308 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 309 $this->P->parse("Foo [[IW>somepage|Some Page]] Bar"); 310 $calls = array ( 311 array('document_start',array()), 312 array('p_open',array()), 313 array('cdata',array("\n".'Foo ')), 314 array('interwikilink',array('IW>somepage','Some Page','iw','somepage')), 315 array('cdata',array(' Bar')), 316 array('p_close',array()), 317 array('document_end',array()), 318 ); 319 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 320 } 321 322 function testInterwikiPedia() { 323 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 324 $this->P->parse("Foo [[wp>Callback_(computer_science)|callbacks]] Bar"); 325 $calls = array ( 326 array('document_start',array()), 327 array('p_open',array()), 328 array('cdata',array("\n".'Foo ')), 329 array('interwikilink',array('wp>Callback_(computer_science)','callbacks','wp','Callback_(computer_science)')), 330 array('cdata',array(' Bar')), 331 array('p_close',array()), 332 array('document_end',array()), 333 ); 334 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 335 } 336 337 function testCamelCase() { 338 $this->P->addMode('camelcaselink',new Doku_Parser_Mode_CamelCaseLink()); 339 $this->P->parse("Foo FooBar Bar"); 340 $calls = array ( 341 array('document_start',array()), 342 array('p_open',array()), 343 array('cdata',array("\n".'Foo ')), 344 array('camelcaselink',array('FooBar')), 345 array('cdata',array(' Bar')), 346 array('p_close',array()), 347 array('document_end',array()), 348 ); 349 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 350 } 351 352 function testFileLink() { 353 $this->P->addMode('filelink',new Doku_Parser_Mode_FileLink()); 354 $this->P->parse('Foo file://temp/file.txt Bar'); 355 $calls = array ( 356 array('document_start',array()), 357 array('p_open',array()), 358 array('cdata',array("\n".'Foo ')), 359 array('filelink',array('file://temp/file.txt ',NULL)), 360 array('cdata',array('Bar')), 361 array('p_close',array()), 362 array('document_end',array()), 363 ); 364 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 365 } 366 367 function testFileLinkInternal() { 368 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 369 $this->P->parse('Foo [[file://temp/file.txt|Some File]] Bar'); 370 $calls = array ( 371 array('document_start',array()), 372 array('p_open',array()), 373 array('cdata',array("\n".'Foo ')), 374 array('externallink',array('file://temp/file.txt','Some File')), 375 array('cdata',array(' Bar')), 376 array('p_close',array()), 377 array('document_end',array()), 378 ); 379 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 380 } 381 382 function testWindowsShareLink() { 383 $this->P->addMode('windowssharelink',new Doku_Parser_Mode_WindowsShareLink()); 384 $this->P->parse('Foo \\\server\share Bar'); 385 $calls = array ( 386 array('document_start',array()), 387 array('p_open',array()), 388 array('cdata',array("\n".'Foo ')), 389 array('windowssharelink',array('\\\server\share',NULL)), 390 array('cdata',array(' Bar')), 391 array('p_close',array()), 392 array('document_end',array()), 393 ); 394 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 395 } 396 397 function testWindowsShareLinkHyphen() { 398 $this->P->addMode('windowssharelink',new Doku_Parser_Mode_WindowsShareLink()); 399 $this->P->parse('Foo \\\server\share-hyphen Bar'); 400 $calls = array ( 401 array('document_start',array()), 402 array('p_open',array()), 403 array('cdata',array("\n".'Foo ')), 404 array('windowssharelink',array('\\\server\share-hyphen',NULL)), 405 array('cdata',array(' Bar')), 406 array('p_close',array()), 407 array('document_end',array()), 408 ); 409 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 410 } 411 412 function testWindowsShareLinkInternal() { 413 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 414 $this->P->parse('Foo [[\\\server\share|My Documents]] Bar'); 415 $calls = array ( 416 array('document_start',array()), 417 array('p_open',array()), 418 array('cdata',array("\n".'Foo ')), 419 array('windowssharelink',array('\\\server\share','My Documents')), 420 array('cdata',array(' Bar')), 421 array('p_close',array()), 422 array('document_end',array()), 423 ); 424 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 425 } 426 427 function testMediaInternal() { 428 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 429 $this->P->parse('Foo {{img.gif}} Bar'); 430 $calls = array ( 431 array('document_start',array()), 432 array('p_open',array()), 433 array('cdata',array("\n".'Foo ')), 434 array('internalmedia',array('img.gif',NULL,NULL,NULL,NULL,'cache','details')), 435 array('cdata',array(' Bar')), 436 array('p_close',array()), 437 array('document_end',array()), 438 ); 439 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 440 } 441 442 function testMediaInternalLinkOnly() { 443 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 444 $this->P->parse('Foo {{img.gif?linkonly}} Bar'); 445 $calls = array ( 446 array('document_start',array()), 447 array('p_open',array()), 448 array('cdata',array("\n".'Foo ')), 449 array('internalmedia',array('img.gif',NULL,NULL,NULL,NULL,'cache','linkonly')), 450 array('cdata',array(' Bar')), 451 array('p_close',array()), 452 array('document_end',array()), 453 ); 454 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 455 } 456 457 function testMediaNotImage() { 458 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 459 $this->P->parse('Foo {{foo.txt?10x10|Some File}} Bar'); 460 $calls = array ( 461 array('document_start',array()), 462 array('p_open',array()), 463 array('cdata',array("\n".'Foo ')), 464 array('internalmedia',array('foo.txt','Some File',null,10,10,'cache','details')), 465 array('cdata',array(' Bar')), 466 array('p_close',array()), 467 array('document_end',array()), 468 ); 469 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 470 } 471 472 function testMediaInternalLAlign() { 473 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 474 $this->P->parse('Foo {{img.gif }} Bar'); 475 $calls = array ( 476 array('document_start',array()), 477 array('p_open',array()), 478 array('cdata',array("\n".'Foo ')), 479 array('internalmedia',array('img.gif',NULL,'left',NULL,NULL,'cache','details')), 480 array('cdata',array(' Bar')), 481 array('p_close',array()), 482 array('document_end',array()), 483 ); 484 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 485 } 486 487 function testMediaInternalRAlign() { 488 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 489 $this->P->parse('Foo {{ img.gif}} Bar'); 490 $calls = array ( 491 array('document_start',array()), 492 array('p_open',array()), 493 array('cdata',array("\n".'Foo ')), 494 array('internalmedia',array('img.gif',NULL,'right',NULL,NULL,'cache','details')), 495 array('cdata',array(' Bar')), 496 array('p_close',array()), 497 array('document_end',array()), 498 ); 499 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 500 } 501 502 function testMediaInternalCenter() { 503 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 504 $this->P->parse('Foo {{ img.gif }} Bar'); 505 $calls = array ( 506 array('document_start',array()), 507 array('p_open',array()), 508 array('cdata',array("\n".'Foo ')), 509 array('internalmedia',array('img.gif',NULL,'center',NULL,NULL,'cache','details')), 510 array('cdata',array(' Bar')), 511 array('p_close',array()), 512 array('document_end',array()), 513 ); 514 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 515 } 516 517 function testMediaInternalParams() { 518 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 519 $this->P->parse('Foo {{img.gif?50x100nocache}} Bar'); 520 $calls = array ( 521 array('document_start',array()), 522 array('p_open',array()), 523 array('cdata',array("\n".'Foo ')), 524 array('internalmedia',array('img.gif',NULL,NULL,'50','100','nocache','details')), 525 array('cdata',array(' Bar')), 526 array('p_close',array()), 527 array('document_end',array()), 528 ); 529 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 530 } 531 532 function testMediaInternalTitle() { 533 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 534 $this->P->parse('Foo {{img.gif?50x100|Some Image}} Bar'); 535 $calls = array ( 536 array('document_start',array()), 537 array('p_open',array()), 538 array('cdata',array("\n".'Foo ')), 539 array('internalmedia',array('img.gif','Some Image',NULL,'50','100','cache','details')), 540 array('cdata',array(' Bar')), 541 array('p_close',array()), 542 array('document_end',array()), 543 ); 544 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 545 } 546 547 function testMediaExternal() { 548 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 549 $this->P->parse('Foo {{http://www.google.com/img.gif}} Bar'); 550 $calls = array ( 551 array('document_start',array()), 552 array('p_open',array()), 553 array('cdata',array("\n".'Foo ')), 554 array('externalmedia',array('http://www.google.com/img.gif',NULL,NULL,NULL,NULL,'cache','details')), 555 array('cdata',array(' Bar')), 556 array('p_close',array()), 557 array('document_end',array()), 558 ); 559 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 560 } 561 562 function testMediaExternalParams() { 563 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 564 $this->P->parse('Foo {{http://www.google.com/img.gif?50x100nocache}} Bar'); 565 $calls = array ( 566 array('document_start',array()), 567 array('p_open',array()), 568 array('cdata',array("\n".'Foo ')), 569 array('externalmedia',array('http://www.google.com/img.gif',NULL,NULL,'50','100','nocache','details')), 570 array('cdata',array(' Bar')), 571 array('p_close',array()), 572 array('document_end',array()), 573 ); 574 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 575 } 576 577 function testMediaExternalTitle() { 578 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 579 $this->P->parse('Foo {{http://www.google.com/img.gif?50x100|Some Image}} Bar'); 580 $calls = array ( 581 array('document_start',array()), 582 array('p_open',array()), 583 array('cdata',array("\n".'Foo ')), 584 array('externalmedia', 585 array('http://www.google.com/img.gif','Some Image',NULL,'50','100','cache','details')), 586 array('cdata',array(' Bar')), 587 array('p_close',array()), 588 array('document_end',array()), 589 ); 590 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 591 } 592 593 function testMediaInInternalLink() { 594 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 595 $this->P->parse("Foo [[x:1:y:foo_bar:z|{{img.gif?10x20nocache|Some Image}}]] Bar"); 596 597 $image = array( 598 'type'=>'internalmedia', 599 'src'=>'img.gif', 600 'title'=>'Some Image', 601 'align'=>NULL, 602 'width'=>10, 603 'height'=>20, 604 'cache'=>'nocache', 605 'linking'=>'details', 606 ); 607 608 $calls = array ( 609 array('document_start',array()), 610 array('p_open',array()), 611 array('cdata',array("\n".'Foo ')), 612 array('internallink',array('x:1:y:foo_bar:z',$image)), 613 array('cdata',array(' Bar')), 614 array('p_close',array()), 615 array('document_end',array()), 616 ); 617 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 618 } 619 620 function testMediaNoImageInInternalLink() { 621 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 622 $this->P->parse("Foo [[x:1:y:foo_bar:z|{{foo.txt?10x20nocache|Some Image}}]] Bar"); 623 624 $image = array( 625 'type'=>'internalmedia', 626 'src'=>'foo.txt', 627 'title'=>'Some Image', 628 'align'=>NULL, 629 'width'=>10, 630 'height'=>20, 631 'cache'=>'nocache', 632 'linking'=>'details', 633 ); 634 635 $calls = array ( 636 array('document_start',array()), 637 array('p_open',array()), 638 array('cdata',array("\n".'Foo ')), 639 array('internallink',array('x:1:y:foo_bar:z',$image)), 640 array('cdata',array(' Bar')), 641 array('p_close',array()), 642 array('document_end',array()), 643 ); 644 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 645 } 646 647 function testMediaInEmailLink() { 648 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 649 $this->P->parse("Foo [[foo@example.com|{{img.gif?10x20nocache|Some Image}}]] Bar"); 650 651 $image = array( 652 'type'=>'internalmedia', 653 'src'=>'img.gif', 654 'title'=>'Some Image', 655 'align'=>NULL, 656 'width'=>10, 657 'height'=>20, 658 'cache'=>'nocache', 659 'linking'=>'details', 660 ); 661 662 $calls = array ( 663 array('document_start',array()), 664 array('p_open',array()), 665 array('cdata',array("\n".'Foo ')), 666 array('emaillink',array('foo@example.com',$image)), 667 array('cdata',array(' Bar')), 668 array('p_close',array()), 669 array('document_end',array()), 670 ); 671 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 672 } 673 674 function testNestedMedia() { 675 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 676 $this->P->parse('Foo {{img.gif|{{foo.gif|{{bar.gif|Bar}}}}}} Bar'); 677 $calls = array ( 678 array('document_start',array()), 679 array('p_open',array()), 680 array('cdata',array("\n".'Foo ')), 681 array('internalmedia', 682 array('img.gif','{{foo.gif|{{bar.gif|Bar',NULL,NULL,NULL,'cache','details')), 683 array('cdata',array('}}}} Bar')), 684 array('p_close',array()), 685 array('document_end',array()), 686 ); 687 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 688 } 689 690} 691 692