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