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