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 testExternalWWWLinkInPath() { 143 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 144 // See issue #936. Should NOT generate a link! 145 $this->P->parse("Foo /home/subdir/www/www.something.de/somedir/ Bar"); 146 $calls = array ( 147 array('document_start',array()), 148 array('p_open',array()), 149 array('cdata',array("\n".'Foo /home/subdir/www/www.something.de/somedir/ Bar')), 150 array('p_close',array()), 151 array('document_end',array()), 152 ); 153 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 154 } 155 156 function testExternalWWWLinkFollowingPath() { 157 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 158 $this->P->parse("Foo /home/subdir/www/ www.something.de/somedir/ Bar"); 159 $calls = array ( 160 array('document_start',array()), 161 array('p_open',array()), 162 array('cdata',array("\n".'Foo /home/subdir/www/ ')), 163 array('externallink',array('http://www.something.de/somedir/', 'www.something.de/somedir/')), 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 testExternalFTPLink() { 172 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 173 $this->P->parse("Foo ftp.sunsite.com Bar"); 174 $calls = array ( 175 array('document_start',array()), 176 array('p_open',array()), 177 array('cdata',array("\n".'Foo ')), 178 array('externallink',array('ftp://ftp.sunsite.com', 'ftp.sunsite.com')), 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 testExternalFTPLinkInPath() { 187 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 188 // See issue #936. Should NOT generate a link! 189 $this->P->parse("Foo /home/subdir/www/ftp.something.de/somedir/ Bar"); 190 $calls = array ( 191 array('document_start',array()), 192 array('p_open',array()), 193 array('cdata',array("\n".'Foo /home/subdir/www/ftp.something.de/somedir/ Bar')), 194 array('p_close',array()), 195 array('document_end',array()), 196 ); 197 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 198 } 199 200 function testExternalFTPLinkFollowingPath() { 201 $this->P->addMode('externallink',new Doku_Parser_Mode_ExternalLink()); 202 $this->P->parse("Foo /home/subdir/www/ ftp.something.de/somedir/ Bar"); 203 $calls = array ( 204 array('document_start',array()), 205 array('p_open',array()), 206 array('cdata',array("\n".'Foo /home/subdir/www/ ')), 207 array('externallink',array('ftp://ftp.something.de/somedir/', 'ftp.something.de/somedir/')), 208 array('cdata',array(' Bar')), 209 array('p_close',array()), 210 array('document_end',array()), 211 ); 212 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 213 } 214 215 function testEmail() { 216 $this->P->addMode('emaillink',new Doku_Parser_Mode_Emaillink()); 217 $this->P->parse("Foo <bugs@php.net> Bar"); 218 $calls = array ( 219 array('document_start',array()), 220 array('p_open',array()), 221 array('cdata',array("\n".'Foo ')), 222 array('emaillink',array('bugs@php.net', NULL)), 223 array('cdata',array(' Bar')), 224 array('p_close',array()), 225 array('document_end',array()), 226 ); 227 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 228 } 229 230 function testEmailRFC2822() { 231 $this->P->addMode('emaillink',new Doku_Parser_Mode_Emaillink()); 232 $this->P->parse("Foo <~fix+bug's.for/ev{e}r@php.net> Bar"); 233 $calls = array ( 234 array('document_start',array()), 235 array('p_open',array()), 236 array('cdata',array("\n".'Foo ')), 237 array('emaillink',array("~fix+bug's.for/ev{e}r@php.net", NULL)), 238 array('cdata',array(' Bar')), 239 array('p_close',array()), 240 array('document_end',array()), 241 ); 242 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 243 } 244 245 function testEmailCase() { 246 $this->P->addMode('emaillink',new Doku_Parser_Mode_Emaillink()); 247 $this->P->parse("Foo <bugs@pHp.net> Bar"); 248 $calls = array ( 249 array('document_start',array()), 250 array('p_open',array()), 251 array('cdata',array("\n".'Foo ')), 252 array('emaillink',array('bugs@pHp.net', NULL)), 253 array('cdata',array(' Bar')), 254 array('p_close',array()), 255 array('document_end',array()), 256 ); 257 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 258 } 259 260 261 function testInternalLinkOneChar() { 262 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 263 $this->P->parse("Foo [[l]] Bar"); 264 $calls = array ( 265 array('document_start',array()), 266 array('p_open',array()), 267 array('cdata',array("\n".'Foo ')), 268 array('internallink',array('l',NULL)), 269 array('cdata',array(' Bar')), 270 array('p_close',array()), 271 array('document_end',array()), 272 ); 273 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 274 } 275 276 function testInternalLinkNoChar() { 277 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 278 $this->P->parse("Foo [[]] Bar"); 279 $calls = array ( 280 array('document_start',array()), 281 array('p_open',array()), 282 array('cdata',array("\n".'Foo ')), 283 array('internallink',array('',NULL)), 284 array('cdata',array(' Bar')), 285 array('p_close',array()), 286 array('document_end',array()), 287 ); 288 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 289 } 290 291 function testInternalLinkNamespaceNoTitle() { 292 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 293 $this->P->parse("Foo [[foo:bar]] Bar"); 294 $calls = array ( 295 array('document_start',array()), 296 array('p_open',array()), 297 array('cdata',array("\n".'Foo ')), 298 array('internallink',array('foo:bar',NULL)), 299 array('cdata',array(' Bar')), 300 array('p_close',array()), 301 array('document_end',array()), 302 ); 303 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 304 } 305 306 function testInternalLinkNamespace() { 307 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 308 $this->P->parse("Foo [[x:1:y:foo_bar:z|Test]] Bar"); 309 $calls = array ( 310 array('document_start',array()), 311 array('p_open',array()), 312 array('cdata',array("\n".'Foo ')), 313 array('internallink',array('x:1:y:foo_bar:z','Test')), 314 array('cdata',array(' Bar')), 315 array('p_close',array()), 316 array('document_end',array()), 317 ); 318 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 319 } 320 321 function testInternalLinkSectionRef() { 322 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 323 $this->P->parse("Foo [[wiki:syntax#internal|Syntax]] Bar"); 324 $calls = array ( 325 array('document_start',array()), 326 array('p_open',array()), 327 array('cdata',array("\n".'Foo ')), 328 array('internallink',array('wiki:syntax#internal','Syntax')), 329 array('cdata',array(' Bar')), 330 array('p_close',array()), 331 array('document_end',array()), 332 ); 333 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 334 } 335 336 function testExternalInInternalLink() { 337 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 338 $this->P->parse("Foo [[http://www.google.com|Google]] Bar"); 339 $calls = array ( 340 array('document_start',array()), 341 array('p_open',array()), 342 array('cdata',array("\n".'Foo ')), 343 array('externallink',array('http://www.google.com','Google')), 344 array('cdata',array(' Bar')), 345 array('p_close',array()), 346 array('document_end',array()), 347 ); 348 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 349 } 350 351 function testInterwikiLink() { 352 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 353 $this->P->parse("Foo [[iw>somepage|Some Page]] Bar"); 354 $calls = array ( 355 array('document_start',array()), 356 array('p_open',array()), 357 array('cdata',array("\n".'Foo ')), 358 array('interwikilink',array('iw>somepage','Some Page','iw','somepage')), 359 array('cdata',array(' Bar')), 360 array('p_close',array()), 361 array('document_end',array()), 362 ); 363 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 364 } 365 366 function testInterwikiLinkCase() { 367 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 368 $this->P->parse("Foo [[IW>somepage|Some Page]] Bar"); 369 $calls = array ( 370 array('document_start',array()), 371 array('p_open',array()), 372 array('cdata',array("\n".'Foo ')), 373 array('interwikilink',array('IW>somepage','Some Page','iw','somepage')), 374 array('cdata',array(' Bar')), 375 array('p_close',array()), 376 array('document_end',array()), 377 ); 378 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 379 } 380 381 function testInterwikiPedia() { 382 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 383 $this->P->parse("Foo [[wp>Callback_(computer_science)|callbacks]] Bar"); 384 $calls = array ( 385 array('document_start',array()), 386 array('p_open',array()), 387 array('cdata',array("\n".'Foo ')), 388 array('interwikilink',array('wp>Callback_(computer_science)','callbacks','wp','Callback_(computer_science)')), 389 array('cdata',array(' Bar')), 390 array('p_close',array()), 391 array('document_end',array()), 392 ); 393 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 394 } 395 396 function testCamelCase() { 397 $this->P->addMode('camelcaselink',new Doku_Parser_Mode_CamelCaseLink()); 398 $this->P->parse("Foo FooBar Bar"); 399 $calls = array ( 400 array('document_start',array()), 401 array('p_open',array()), 402 array('cdata',array("\n".'Foo ')), 403 array('camelcaselink',array('FooBar')), 404 array('cdata',array(' Bar')), 405 array('p_close',array()), 406 array('document_end',array()), 407 ); 408 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 409 } 410 411 function testFileLink() { 412 $this->P->addMode('filelink',new Doku_Parser_Mode_FileLink()); 413 $this->P->parse('Foo file://temp/file.txt Bar'); 414 $calls = array ( 415 array('document_start',array()), 416 array('p_open',array()), 417 array('cdata',array("\n".'Foo ')), 418 array('filelink',array('file://temp/file.txt ',NULL)), 419 array('cdata',array('Bar')), 420 array('p_close',array()), 421 array('document_end',array()), 422 ); 423 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 424 } 425 426 function testFileLinkInternal() { 427 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 428 $this->P->parse('Foo [[file://temp/file.txt|Some File]] Bar'); 429 $calls = array ( 430 array('document_start',array()), 431 array('p_open',array()), 432 array('cdata',array("\n".'Foo ')), 433 array('externallink',array('file://temp/file.txt','Some File')), 434 array('cdata',array(' Bar')), 435 array('p_close',array()), 436 array('document_end',array()), 437 ); 438 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 439 } 440 441 function testWindowsShareLink() { 442 $this->P->addMode('windowssharelink',new Doku_Parser_Mode_WindowsShareLink()); 443 $this->P->parse('Foo \\\server\share Bar'); 444 $calls = array ( 445 array('document_start',array()), 446 array('p_open',array()), 447 array('cdata',array("\n".'Foo ')), 448 array('windowssharelink',array('\\\server\share',NULL)), 449 array('cdata',array(' Bar')), 450 array('p_close',array()), 451 array('document_end',array()), 452 ); 453 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 454 } 455 456 function testWindowsShareLinkHyphen() { 457 $this->P->addMode('windowssharelink',new Doku_Parser_Mode_WindowsShareLink()); 458 $this->P->parse('Foo \\\server\share-hyphen Bar'); 459 $calls = array ( 460 array('document_start',array()), 461 array('p_open',array()), 462 array('cdata',array("\n".'Foo ')), 463 array('windowssharelink',array('\\\server\share-hyphen',NULL)), 464 array('cdata',array(' Bar')), 465 array('p_close',array()), 466 array('document_end',array()), 467 ); 468 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 469 } 470 471 function testWindowsShareLinkInternal() { 472 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 473 $this->P->parse('Foo [[\\\server\share|My Documents]] Bar'); 474 $calls = array ( 475 array('document_start',array()), 476 array('p_open',array()), 477 array('cdata',array("\n".'Foo ')), 478 array('windowssharelink',array('\\\server\share','My Documents')), 479 array('cdata',array(' Bar')), 480 array('p_close',array()), 481 array('document_end',array()), 482 ); 483 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 484 } 485 486 function testMediaInternal() { 487 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 488 $this->P->parse('Foo {{img.gif}} Bar'); 489 $calls = array ( 490 array('document_start',array()), 491 array('p_open',array()), 492 array('cdata',array("\n".'Foo ')), 493 array('internalmedia',array('img.gif',NULL,NULL,NULL,NULL,'cache','details')), 494 array('cdata',array(' Bar')), 495 array('p_close',array()), 496 array('document_end',array()), 497 ); 498 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 499 } 500 501 function testMediaInternalLinkOnly() { 502 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 503 $this->P->parse('Foo {{img.gif?linkonly}} Bar'); 504 $calls = array ( 505 array('document_start',array()), 506 array('p_open',array()), 507 array('cdata',array("\n".'Foo ')), 508 array('internalmedia',array('img.gif',NULL,NULL,NULL,NULL,'cache','linkonly')), 509 array('cdata',array(' Bar')), 510 array('p_close',array()), 511 array('document_end',array()), 512 ); 513 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 514 } 515 516 function testMediaNotImage() { 517 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 518 $this->P->parse('Foo {{foo.txt?10x10|Some File}} Bar'); 519 $calls = array ( 520 array('document_start',array()), 521 array('p_open',array()), 522 array('cdata',array("\n".'Foo ')), 523 array('internalmedia',array('foo.txt','Some File',null,10,10,'cache','details')), 524 array('cdata',array(' Bar')), 525 array('p_close',array()), 526 array('document_end',array()), 527 ); 528 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 529 } 530 531 function testMediaInternalLAlign() { 532 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 533 $this->P->parse('Foo {{img.gif }} Bar'); 534 $calls = array ( 535 array('document_start',array()), 536 array('p_open',array()), 537 array('cdata',array("\n".'Foo ')), 538 array('internalmedia',array('img.gif',NULL,'left',NULL,NULL,'cache','details')), 539 array('cdata',array(' Bar')), 540 array('p_close',array()), 541 array('document_end',array()), 542 ); 543 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 544 } 545 546 function testMediaInternalRAlign() { 547 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 548 $this->P->parse('Foo {{ img.gif}} Bar'); 549 $calls = array ( 550 array('document_start',array()), 551 array('p_open',array()), 552 array('cdata',array("\n".'Foo ')), 553 array('internalmedia',array('img.gif',NULL,'right',NULL,NULL,'cache','details')), 554 array('cdata',array(' Bar')), 555 array('p_close',array()), 556 array('document_end',array()), 557 ); 558 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 559 } 560 561 function testMediaInternalCenter() { 562 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 563 $this->P->parse('Foo {{ img.gif }} Bar'); 564 $calls = array ( 565 array('document_start',array()), 566 array('p_open',array()), 567 array('cdata',array("\n".'Foo ')), 568 array('internalmedia',array('img.gif',NULL,'center',NULL,NULL,'cache','details')), 569 array('cdata',array(' Bar')), 570 array('p_close',array()), 571 array('document_end',array()), 572 ); 573 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 574 } 575 576 function testMediaInternalParams() { 577 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 578 $this->P->parse('Foo {{img.gif?50x100nocache}} Bar'); 579 $calls = array ( 580 array('document_start',array()), 581 array('p_open',array()), 582 array('cdata',array("\n".'Foo ')), 583 array('internalmedia',array('img.gif',NULL,NULL,'50','100','nocache','details')), 584 array('cdata',array(' Bar')), 585 array('p_close',array()), 586 array('document_end',array()), 587 ); 588 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 589 } 590 591 function testMediaInternalTitle() { 592 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 593 $this->P->parse('Foo {{img.gif?50x100|Some Image}} Bar'); 594 $calls = array ( 595 array('document_start',array()), 596 array('p_open',array()), 597 array('cdata',array("\n".'Foo ')), 598 array('internalmedia',array('img.gif','Some Image',NULL,'50','100','cache','details')), 599 array('cdata',array(' Bar')), 600 array('p_close',array()), 601 array('document_end',array()), 602 ); 603 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 604 } 605 606 function testMediaExternal() { 607 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 608 $this->P->parse('Foo {{http://www.google.com/img.gif}} Bar'); 609 $calls = array ( 610 array('document_start',array()), 611 array('p_open',array()), 612 array('cdata',array("\n".'Foo ')), 613 array('externalmedia',array('http://www.google.com/img.gif',NULL,NULL,NULL,NULL,'cache','details')), 614 array('cdata',array(' Bar')), 615 array('p_close',array()), 616 array('document_end',array()), 617 ); 618 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 619 } 620 621 function testMediaExternalParams() { 622 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 623 $this->P->parse('Foo {{http://www.google.com/img.gif?50x100nocache}} Bar'); 624 $calls = array ( 625 array('document_start',array()), 626 array('p_open',array()), 627 array('cdata',array("\n".'Foo ')), 628 array('externalmedia',array('http://www.google.com/img.gif',NULL,NULL,'50','100','nocache','details')), 629 array('cdata',array(' Bar')), 630 array('p_close',array()), 631 array('document_end',array()), 632 ); 633 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 634 } 635 636 function testMediaExternalTitle() { 637 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 638 $this->P->parse('Foo {{http://www.google.com/img.gif?50x100|Some Image}} Bar'); 639 $calls = array ( 640 array('document_start',array()), 641 array('p_open',array()), 642 array('cdata',array("\n".'Foo ')), 643 array('externalmedia', 644 array('http://www.google.com/img.gif','Some Image',NULL,'50','100','cache','details')), 645 array('cdata',array(' Bar')), 646 array('p_close',array()), 647 array('document_end',array()), 648 ); 649 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 650 } 651 652 function testMediaInInternalLink() { 653 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 654 $this->P->parse("Foo [[x:1:y:foo_bar:z|{{img.gif?10x20nocache|Some Image}}]] Bar"); 655 656 $image = array( 657 'type'=>'internalmedia', 658 'src'=>'img.gif', 659 'title'=>'Some Image', 660 'align'=>NULL, 661 'width'=>10, 662 'height'=>20, 663 'cache'=>'nocache', 664 'linking'=>'details', 665 ); 666 667 $calls = array ( 668 array('document_start',array()), 669 array('p_open',array()), 670 array('cdata',array("\n".'Foo ')), 671 array('internallink',array('x:1:y:foo_bar:z',$image)), 672 array('cdata',array(' Bar')), 673 array('p_close',array()), 674 array('document_end',array()), 675 ); 676 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 677 } 678 679 function testMediaNoImageInInternalLink() { 680 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 681 $this->P->parse("Foo [[x:1:y:foo_bar:z|{{foo.txt?10x20nocache|Some Image}}]] Bar"); 682 683 $image = array( 684 'type'=>'internalmedia', 685 'src'=>'foo.txt', 686 'title'=>'Some Image', 687 'align'=>NULL, 688 'width'=>10, 689 'height'=>20, 690 'cache'=>'nocache', 691 'linking'=>'details', 692 ); 693 694 $calls = array ( 695 array('document_start',array()), 696 array('p_open',array()), 697 array('cdata',array("\n".'Foo ')), 698 array('internallink',array('x:1:y:foo_bar:z',$image)), 699 array('cdata',array(' Bar')), 700 array('p_close',array()), 701 array('document_end',array()), 702 ); 703 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 704 } 705 706 function testMediaInEmailLink() { 707 $this->P->addMode('internallink',new Doku_Parser_Mode_InternalLink()); 708 $this->P->parse("Foo [[foo@example.com|{{img.gif?10x20nocache|Some Image}}]] Bar"); 709 710 $image = array( 711 'type'=>'internalmedia', 712 'src'=>'img.gif', 713 'title'=>'Some Image', 714 'align'=>NULL, 715 'width'=>10, 716 'height'=>20, 717 'cache'=>'nocache', 718 'linking'=>'details', 719 ); 720 721 $calls = array ( 722 array('document_start',array()), 723 array('p_open',array()), 724 array('cdata',array("\n".'Foo ')), 725 array('emaillink',array('foo@example.com',$image)), 726 array('cdata',array(' Bar')), 727 array('p_close',array()), 728 array('document_end',array()), 729 ); 730 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 731 } 732 733 function testNestedMedia() { 734 $this->P->addMode('media',new Doku_Parser_Mode_Media()); 735 $this->P->parse('Foo {{img.gif|{{foo.gif|{{bar.gif|Bar}}}}}} Bar'); 736 $calls = array ( 737 array('document_start',array()), 738 array('p_open',array()), 739 array('cdata',array("\n".'Foo ')), 740 array('internalmedia', 741 array('img.gif','{{foo.gif|{{bar.gif|Bar',NULL,NULL,NULL,'cache','details')), 742 array('cdata',array('}}}} Bar')), 743 array('p_close',array()), 744 array('document_end',array()), 745 ); 746 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 747 } 748 749} 750 751