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