1f8369d7dSTobias Sarnowski<?php 236dc94bbSAndreas Gohr 3be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Camelcaselink; 4be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Emaillink; 5be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Externallink; 6be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Filelink; 7be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Internallink; 8be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Media; 9be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Windowssharelink; 1036dc94bbSAndreas Gohr 11f8369d7dSTobias Sarnowskirequire_once 'parser.inc.php'; 12f8369d7dSTobias Sarnowski 139bda387aSLarsDW223/** 149bda387aSLarsDW223 * Tests for the implementation of link syntax 159bda387aSLarsDW223 * 169bda387aSLarsDW223 * @group parser_links 179bda387aSLarsDW223*/ 18f8369d7dSTobias Sarnowskiclass TestOfDoku_Parser_Links extends TestOfDoku_Parser { 19f8369d7dSTobias Sarnowski 20f8369d7dSTobias Sarnowski function testExternalLinkSimple() { 2136dc94bbSAndreas Gohr $this->P->addMode('externallink',new Externallink()); 22f8369d7dSTobias Sarnowski $this->P->parse("Foo http://www.google.com Bar"); 23f8369d7dSTobias Sarnowski $calls = array ( 24f8369d7dSTobias Sarnowski array('document_start',array()), 25f8369d7dSTobias Sarnowski array('p_open',array()), 26f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 27f8369d7dSTobias Sarnowski array('externallink',array('http://www.google.com', NULL)), 28f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 29f8369d7dSTobias Sarnowski array('p_close',array()), 30f8369d7dSTobias Sarnowski array('document_end',array()), 31f8369d7dSTobias Sarnowski ); 32f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 33f8369d7dSTobias Sarnowski } 34f8369d7dSTobias Sarnowski 35f8369d7dSTobias Sarnowski function testExternalLinkCase() { 3636dc94bbSAndreas Gohr $this->P->addMode('externallink',new Externallink()); 37f8369d7dSTobias Sarnowski $this->P->parse("Foo HTTP://WWW.GOOGLE.COM Bar"); 38f8369d7dSTobias Sarnowski $calls = array ( 39f8369d7dSTobias Sarnowski array('document_start',array()), 40f8369d7dSTobias Sarnowski array('p_open',array()), 41f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 42f8369d7dSTobias Sarnowski array('externallink',array('HTTP://WWW.GOOGLE.COM', NULL)), 43f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 44f8369d7dSTobias Sarnowski array('p_close',array()), 45f8369d7dSTobias Sarnowski array('document_end',array()), 46f8369d7dSTobias Sarnowski ); 47f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 48f8369d7dSTobias Sarnowski } 49f8369d7dSTobias Sarnowski 50f8369d7dSTobias Sarnowski function testExternalIPv4() { 5136dc94bbSAndreas Gohr $this->P->addMode('externallink',new Externallink()); 52f8369d7dSTobias Sarnowski $this->P->parse("Foo http://123.123.3.21/foo Bar"); 53f8369d7dSTobias Sarnowski $calls = array ( 54f8369d7dSTobias Sarnowski array('document_start',array()), 55f8369d7dSTobias Sarnowski array('p_open',array()), 56f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 57f8369d7dSTobias Sarnowski array('externallink',array('http://123.123.3.21/foo', NULL)), 58f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 59f8369d7dSTobias Sarnowski array('p_close',array()), 60f8369d7dSTobias Sarnowski array('document_end',array()), 61f8369d7dSTobias Sarnowski ); 62f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 63f8369d7dSTobias Sarnowski } 64f8369d7dSTobias Sarnowski 65f8369d7dSTobias Sarnowski function testExternalIPv6() { 6636dc94bbSAndreas Gohr $this->P->addMode('externallink',new Externallink()); 67f8369d7dSTobias Sarnowski $this->P->parse("Foo http://[3ffe:2a00:100:7031::1]/foo Bar"); 68f8369d7dSTobias Sarnowski $calls = array ( 69f8369d7dSTobias Sarnowski array('document_start',array()), 70f8369d7dSTobias Sarnowski array('p_open',array()), 71f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 72f8369d7dSTobias Sarnowski array('externallink',array('http://[3ffe:2a00:100:7031::1]/foo', NULL)), 73f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 74f8369d7dSTobias Sarnowski array('p_close',array()), 75f8369d7dSTobias Sarnowski array('document_end',array()), 76f8369d7dSTobias Sarnowski ); 77f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 78f8369d7dSTobias Sarnowski } 79f8369d7dSTobias Sarnowski 80f8369d7dSTobias Sarnowski function testExternalMulti(){ 81f8369d7dSTobias Sarnowski $this->teardown(); 82f8369d7dSTobias Sarnowski 83f8369d7dSTobias Sarnowski $links = array( 84f8369d7dSTobias Sarnowski 'http://www.google.com', 85f8369d7dSTobias Sarnowski 'HTTP://WWW.GOOGLE.COM', 86f8369d7dSTobias Sarnowski 'http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html', 87f8369d7dSTobias Sarnowski 'http://[1080:0:0:0:8:800:200C:417A]/index.html', 88f8369d7dSTobias Sarnowski 'http://[3ffe:2a00:100:7031::1]', 89f8369d7dSTobias Sarnowski 'http://[1080::8:800:200C:417A]/foo', 90f8369d7dSTobias Sarnowski 'http://[::192.9.5.5]/ipng', 91f8369d7dSTobias Sarnowski 'http://[::FFFF:129.144.52.38]:80/index.html', 92f8369d7dSTobias Sarnowski 'http://[2010:836B:4179::836B:4179]', 93f8369d7dSTobias Sarnowski ); 94f8369d7dSTobias Sarnowski $titles = array(false,null,'foo bar'); 95f8369d7dSTobias Sarnowski foreach($links as $link){ 96f8369d7dSTobias Sarnowski foreach($titles as $title){ 97f8369d7dSTobias Sarnowski if($title === false){ 98f8369d7dSTobias Sarnowski $source = $link; 99f8369d7dSTobias Sarnowski $name = null; 100f8369d7dSTobias Sarnowski }elseif($title === null){ 101f8369d7dSTobias Sarnowski $source = "[[$link]]"; 102f8369d7dSTobias Sarnowski $name = null; 103f8369d7dSTobias Sarnowski }else{ 104f8369d7dSTobias Sarnowski $source = "[[$link|$title]]"; 105f8369d7dSTobias Sarnowski $name = $title; 106f8369d7dSTobias Sarnowski } 107f8369d7dSTobias Sarnowski $this->setup(); 10836dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 10936dc94bbSAndreas Gohr $this->P->addMode('externallink',new Externallink()); 110f8369d7dSTobias Sarnowski $this->P->parse("Foo $source Bar"); 111f8369d7dSTobias Sarnowski $calls = array ( 112f8369d7dSTobias Sarnowski array('document_start',array()), 113f8369d7dSTobias Sarnowski array('p_open',array()), 114f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 115f8369d7dSTobias Sarnowski array('externallink',array($link, $name)), 116f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 117f8369d7dSTobias Sarnowski array('p_close',array()), 118f8369d7dSTobias Sarnowski array('document_end',array()), 119f8369d7dSTobias Sarnowski ); 120f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls), $calls, $source); 121f8369d7dSTobias Sarnowski $this->teardown(); 122f8369d7dSTobias Sarnowski } 123f8369d7dSTobias Sarnowski } 124f8369d7dSTobias Sarnowski 125f8369d7dSTobias Sarnowski $this->setup(); 126f8369d7dSTobias Sarnowski } 127f8369d7dSTobias Sarnowski 128f8369d7dSTobias Sarnowski function testExternalLinkJavascript() { 12936dc94bbSAndreas Gohr $this->P->addMode('externallink',new Externallink()); 130f8369d7dSTobias Sarnowski $this->P->parse("Foo javascript:alert('XSS'); Bar"); 131f8369d7dSTobias Sarnowski $calls = array ( 132f8369d7dSTobias Sarnowski array('document_start',array()), 133f8369d7dSTobias Sarnowski array('p_open',array()), 134f8369d7dSTobias Sarnowski array('cdata',array("\nFoo javascript:alert('XSS'); Bar")), 135f8369d7dSTobias Sarnowski array('p_close',array()), 136f8369d7dSTobias Sarnowski array('document_end',array()), 137f8369d7dSTobias Sarnowski ); 138f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 139f8369d7dSTobias Sarnowski } 140f8369d7dSTobias Sarnowski 141f8369d7dSTobias Sarnowski function testExternalWWWLink() { 14236dc94bbSAndreas Gohr $this->P->addMode('externallink',new Externallink()); 143f8369d7dSTobias Sarnowski $this->P->parse("Foo www.google.com Bar"); 144f8369d7dSTobias Sarnowski $calls = array ( 145f8369d7dSTobias Sarnowski array('document_start',array()), 146f8369d7dSTobias Sarnowski array('p_open',array()), 147f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 148f8369d7dSTobias Sarnowski array('externallink',array('http://www.google.com', 'www.google.com')), 149f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 150f8369d7dSTobias Sarnowski array('p_close',array()), 151f8369d7dSTobias Sarnowski array('document_end',array()), 152f8369d7dSTobias Sarnowski ); 153f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 154f8369d7dSTobias Sarnowski } 155f8369d7dSTobias Sarnowski 156f216edaeSLars Paulsen function testExternalWWWLinkStartOfLine() { 157f216edaeSLars Paulsen // Regression test for issue #2399 158f216edaeSLars Paulsen $calls = array ( 159f216edaeSLars Paulsen array('document_start',array()), 160f216edaeSLars Paulsen array('p_open',array()), 161f216edaeSLars Paulsen array('externallink',array('http://www.google.com', 'www.google.com')), 162f216edaeSLars Paulsen array('cdata',array(' Bar')), 163f216edaeSLars Paulsen array('p_close',array()), 164f216edaeSLars Paulsen array('document_end',array()), 165f216edaeSLars Paulsen ); 166f216edaeSLars Paulsen $instructions = p_get_instructions("www.google.com Bar"); 167f216edaeSLars Paulsen $this->assertEquals(array_map('stripByteIndex',$instructions),$calls); 168f216edaeSLars Paulsen } 169f216edaeSLars Paulsen 170f216edaeSLars Paulsen function testExternalWWWLinkInRoundBrackets() { 17136c8a75cSPhy $this->P->addMode('externallink',new ExternalLink()); 172f216edaeSLars Paulsen $this->P->parse("Foo (www.google.com) Bar"); 173f216edaeSLars Paulsen $calls = array ( 174f216edaeSLars Paulsen array('document_start',array()), 175f216edaeSLars Paulsen array('p_open',array()), 176f216edaeSLars Paulsen array('cdata',array("\n".'Foo (')), 177f216edaeSLars Paulsen array('externallink',array('http://www.google.com', 'www.google.com')), 178f216edaeSLars Paulsen array('cdata',array(') Bar')), 179f216edaeSLars Paulsen array('p_close',array()), 180f216edaeSLars Paulsen array('document_end',array()), 181f216edaeSLars Paulsen ); 182f216edaeSLars Paulsen $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 183f216edaeSLars Paulsen } 184f216edaeSLars Paulsen 1855e964d2bSLarsDW223 function testExternalWWWLinkInPath() { 18636dc94bbSAndreas Gohr $this->P->addMode('externallink',new Externallink()); 1875e964d2bSLarsDW223 // See issue #936. Should NOT generate a link! 1885e964d2bSLarsDW223 $this->P->parse("Foo /home/subdir/www/www.something.de/somedir/ Bar"); 1895e964d2bSLarsDW223 $calls = array ( 1905e964d2bSLarsDW223 array('document_start',array()), 1915e964d2bSLarsDW223 array('p_open',array()), 1925e964d2bSLarsDW223 array('cdata',array("\n".'Foo /home/subdir/www/www.something.de/somedir/ Bar')), 1935e964d2bSLarsDW223 array('p_close',array()), 1945e964d2bSLarsDW223 array('document_end',array()), 1955e964d2bSLarsDW223 ); 1965e964d2bSLarsDW223 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 1975e964d2bSLarsDW223 } 1985e964d2bSLarsDW223 1995e964d2bSLarsDW223 function testExternalWWWLinkFollowingPath() { 20036dc94bbSAndreas Gohr $this->P->addMode('externallink',new Externallink()); 2015e964d2bSLarsDW223 $this->P->parse("Foo /home/subdir/www/ www.something.de/somedir/ Bar"); 2025e964d2bSLarsDW223 $calls = array ( 2035e964d2bSLarsDW223 array('document_start',array()), 2045e964d2bSLarsDW223 array('p_open',array()), 2055e964d2bSLarsDW223 array('cdata',array("\n".'Foo /home/subdir/www/ ')), 2065e964d2bSLarsDW223 array('externallink',array('http://www.something.de/somedir/', 'www.something.de/somedir/')), 2075e964d2bSLarsDW223 array('cdata',array(' Bar')), 2085e964d2bSLarsDW223 array('p_close',array()), 2095e964d2bSLarsDW223 array('document_end',array()), 2105e964d2bSLarsDW223 ); 2115e964d2bSLarsDW223 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 2125e964d2bSLarsDW223 } 2135e964d2bSLarsDW223 214f8369d7dSTobias Sarnowski function testExternalFTPLink() { 21536dc94bbSAndreas Gohr $this->P->addMode('externallink',new Externallink()); 216f8369d7dSTobias Sarnowski $this->P->parse("Foo ftp.sunsite.com Bar"); 217f8369d7dSTobias Sarnowski $calls = array ( 218f8369d7dSTobias Sarnowski array('document_start',array()), 219f8369d7dSTobias Sarnowski array('p_open',array()), 220f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 221f8369d7dSTobias Sarnowski array('externallink',array('ftp://ftp.sunsite.com', 'ftp.sunsite.com')), 222f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 223f8369d7dSTobias Sarnowski array('p_close',array()), 224f8369d7dSTobias Sarnowski array('document_end',array()), 225f8369d7dSTobias Sarnowski ); 226f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 227f8369d7dSTobias Sarnowski } 2285e964d2bSLarsDW223 2295e964d2bSLarsDW223 function testExternalFTPLinkInPath() { 23036dc94bbSAndreas Gohr $this->P->addMode('externallink',new Externallink()); 2315e964d2bSLarsDW223 // See issue #936. Should NOT generate a link! 2325e964d2bSLarsDW223 $this->P->parse("Foo /home/subdir/www/ftp.something.de/somedir/ Bar"); 2335e964d2bSLarsDW223 $calls = array ( 2345e964d2bSLarsDW223 array('document_start',array()), 2355e964d2bSLarsDW223 array('p_open',array()), 2365e964d2bSLarsDW223 array('cdata',array("\n".'Foo /home/subdir/www/ftp.something.de/somedir/ Bar')), 2375e964d2bSLarsDW223 array('p_close',array()), 2385e964d2bSLarsDW223 array('document_end',array()), 2395e964d2bSLarsDW223 ); 2405e964d2bSLarsDW223 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 2415e964d2bSLarsDW223 } 2425e964d2bSLarsDW223 2435e964d2bSLarsDW223 function testExternalFTPLinkFollowingPath() { 24436dc94bbSAndreas Gohr $this->P->addMode('externallink',new Externallink()); 2455e964d2bSLarsDW223 $this->P->parse("Foo /home/subdir/www/ ftp.something.de/somedir/ Bar"); 2465e964d2bSLarsDW223 $calls = array ( 2475e964d2bSLarsDW223 array('document_start',array()), 2485e964d2bSLarsDW223 array('p_open',array()), 2495e964d2bSLarsDW223 array('cdata',array("\n".'Foo /home/subdir/www/ ')), 2505e964d2bSLarsDW223 array('externallink',array('ftp://ftp.something.de/somedir/', 'ftp.something.de/somedir/')), 2515e964d2bSLarsDW223 array('cdata',array(' Bar')), 2525e964d2bSLarsDW223 array('p_close',array()), 2535e964d2bSLarsDW223 array('document_end',array()), 2545e964d2bSLarsDW223 ); 2555e964d2bSLarsDW223 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 2565e964d2bSLarsDW223 } 2575e964d2bSLarsDW223 258f8369d7dSTobias Sarnowski function testEmail() { 25936dc94bbSAndreas Gohr $this->P->addMode('emaillink',new Emaillink()); 260f8369d7dSTobias Sarnowski $this->P->parse("Foo <bugs@php.net> Bar"); 261f8369d7dSTobias Sarnowski $calls = array ( 262f8369d7dSTobias Sarnowski array('document_start',array()), 263f8369d7dSTobias Sarnowski array('p_open',array()), 264f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 265f8369d7dSTobias Sarnowski array('emaillink',array('bugs@php.net', NULL)), 266f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 267f8369d7dSTobias Sarnowski array('p_close',array()), 268f8369d7dSTobias Sarnowski array('document_end',array()), 269f8369d7dSTobias Sarnowski ); 270f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 271f8369d7dSTobias Sarnowski } 272f8369d7dSTobias Sarnowski 273f8369d7dSTobias Sarnowski function testEmailRFC2822() { 27436dc94bbSAndreas Gohr $this->P->addMode('emaillink',new Emaillink()); 275f8369d7dSTobias Sarnowski $this->P->parse("Foo <~fix+bug's.for/ev{e}r@php.net> Bar"); 276f8369d7dSTobias Sarnowski $calls = array ( 277f8369d7dSTobias Sarnowski array('document_start',array()), 278f8369d7dSTobias Sarnowski array('p_open',array()), 279f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 280f8369d7dSTobias Sarnowski array('emaillink',array("~fix+bug's.for/ev{e}r@php.net", NULL)), 281f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 282f8369d7dSTobias Sarnowski array('p_close',array()), 283f8369d7dSTobias Sarnowski array('document_end',array()), 284f8369d7dSTobias Sarnowski ); 285f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 286f8369d7dSTobias Sarnowski } 287f8369d7dSTobias Sarnowski 288f8369d7dSTobias Sarnowski function testEmailCase() { 28936dc94bbSAndreas Gohr $this->P->addMode('emaillink',new Emaillink()); 290f8369d7dSTobias Sarnowski $this->P->parse("Foo <bugs@pHp.net> Bar"); 291f8369d7dSTobias Sarnowski $calls = array ( 292f8369d7dSTobias Sarnowski array('document_start',array()), 293f8369d7dSTobias Sarnowski array('p_open',array()), 294f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 295f8369d7dSTobias Sarnowski array('emaillink',array('bugs@pHp.net', NULL)), 296f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 297f8369d7dSTobias Sarnowski array('p_close',array()), 298f8369d7dSTobias Sarnowski array('document_end',array()), 299f8369d7dSTobias Sarnowski ); 300f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 301f8369d7dSTobias Sarnowski } 302f8369d7dSTobias Sarnowski 303f8369d7dSTobias Sarnowski 304f8369d7dSTobias Sarnowski function testInternalLinkOneChar() { 30536dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 306f8369d7dSTobias Sarnowski $this->P->parse("Foo [[l]] Bar"); 307f8369d7dSTobias Sarnowski $calls = array ( 308f8369d7dSTobias Sarnowski array('document_start',array()), 309f8369d7dSTobias Sarnowski array('p_open',array()), 310f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 311f8369d7dSTobias Sarnowski array('internallink',array('l',NULL)), 312f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 313f8369d7dSTobias Sarnowski array('p_close',array()), 314f8369d7dSTobias Sarnowski array('document_end',array()), 315f8369d7dSTobias Sarnowski ); 316f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 317f8369d7dSTobias Sarnowski } 318f8369d7dSTobias Sarnowski 319f8369d7dSTobias Sarnowski function testInternalLinkNoChar() { 32036dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 321f8369d7dSTobias Sarnowski $this->P->parse("Foo [[]] Bar"); 322f8369d7dSTobias Sarnowski $calls = array ( 323f8369d7dSTobias Sarnowski array('document_start',array()), 324f8369d7dSTobias Sarnowski array('p_open',array()), 325f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 326f8369d7dSTobias Sarnowski array('internallink',array('',NULL)), 327f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 328f8369d7dSTobias Sarnowski array('p_close',array()), 329f8369d7dSTobias Sarnowski array('document_end',array()), 330f8369d7dSTobias Sarnowski ); 331f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 332f8369d7dSTobias Sarnowski } 333f8369d7dSTobias Sarnowski 334f8369d7dSTobias Sarnowski function testInternalLinkNamespaceNoTitle() { 33536dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 336f8369d7dSTobias Sarnowski $this->P->parse("Foo [[foo:bar]] Bar"); 337f8369d7dSTobias Sarnowski $calls = array ( 338f8369d7dSTobias Sarnowski array('document_start',array()), 339f8369d7dSTobias Sarnowski array('p_open',array()), 340f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 341f8369d7dSTobias Sarnowski array('internallink',array('foo:bar',NULL)), 342f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 343f8369d7dSTobias Sarnowski array('p_close',array()), 344f8369d7dSTobias Sarnowski array('document_end',array()), 345f8369d7dSTobias Sarnowski ); 346f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 347f8369d7dSTobias Sarnowski } 348f8369d7dSTobias Sarnowski 349f8369d7dSTobias Sarnowski function testInternalLinkNamespace() { 35036dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 351f8369d7dSTobias Sarnowski $this->P->parse("Foo [[x:1:y:foo_bar:z|Test]] Bar"); 352f8369d7dSTobias Sarnowski $calls = array ( 353f8369d7dSTobias Sarnowski array('document_start',array()), 354f8369d7dSTobias Sarnowski array('p_open',array()), 355f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 356f8369d7dSTobias Sarnowski array('internallink',array('x:1:y:foo_bar:z','Test')), 357f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 358f8369d7dSTobias Sarnowski array('p_close',array()), 359f8369d7dSTobias Sarnowski array('document_end',array()), 360f8369d7dSTobias Sarnowski ); 361f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 362f8369d7dSTobias Sarnowski } 363f8369d7dSTobias Sarnowski 364f8369d7dSTobias Sarnowski function testInternalLinkSectionRef() { 36536dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 366f8369d7dSTobias Sarnowski $this->P->parse("Foo [[wiki:syntax#internal|Syntax]] Bar"); 367f8369d7dSTobias Sarnowski $calls = array ( 368f8369d7dSTobias Sarnowski array('document_start',array()), 369f8369d7dSTobias Sarnowski array('p_open',array()), 370f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 371f8369d7dSTobias Sarnowski array('internallink',array('wiki:syntax#internal','Syntax')), 372f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 373f8369d7dSTobias Sarnowski array('p_close',array()), 374f8369d7dSTobias Sarnowski array('document_end',array()), 375f8369d7dSTobias Sarnowski ); 376f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 377f8369d7dSTobias Sarnowski } 378f8369d7dSTobias Sarnowski 3799bda387aSLarsDW223 function testInternalLinkCodeFollows() { 38036dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 3819bda387aSLarsDW223 $this->P->parse("Foo [[wiki:internal:link|Test]] Bar <code>command [arg1 [arg2 [arg3]]]</code>"); 3829bda387aSLarsDW223 $calls = array ( 3839bda387aSLarsDW223 array('document_start',array()), 3849bda387aSLarsDW223 array('p_open',array()), 3859bda387aSLarsDW223 array('cdata',array("\n".'Foo ')), 3869bda387aSLarsDW223 array('internallink',array('wiki:internal:link','Test')), 3879bda387aSLarsDW223 array('cdata',array(' Bar <code>command [arg1 [arg2 [arg3]]]</code>')), 3889bda387aSLarsDW223 array('p_close',array()), 3899bda387aSLarsDW223 array('document_end',array()), 3909bda387aSLarsDW223 ); 3919bda387aSLarsDW223 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 3929bda387aSLarsDW223 } 3939bda387aSLarsDW223 3949bda387aSLarsDW223 function testInternalLinkCodeFollows2() { 39536dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 3969bda387aSLarsDW223 $this->P->parse("Foo [[wiki:internal:link|[Square brackets in title] Test]] Bar <code>command [arg1 [arg2 [arg3]]]</code>"); 3979bda387aSLarsDW223 $calls = array ( 3989bda387aSLarsDW223 array('document_start',array()), 3999bda387aSLarsDW223 array('p_open',array()), 4009bda387aSLarsDW223 array('cdata',array("\n".'Foo ')), 4019bda387aSLarsDW223 array('internallink',array('wiki:internal:link','[Square brackets in title] Test')), 4029bda387aSLarsDW223 array('cdata',array(' Bar <code>command [arg1 [arg2 [arg3]]]</code>')), 4039bda387aSLarsDW223 array('p_close',array()), 4049bda387aSLarsDW223 array('document_end',array()), 4059bda387aSLarsDW223 ); 4069bda387aSLarsDW223 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 4079bda387aSLarsDW223 } 4089bda387aSLarsDW223 409f8369d7dSTobias Sarnowski function testExternalInInternalLink() { 41036dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 411f8369d7dSTobias Sarnowski $this->P->parse("Foo [[http://www.google.com|Google]] Bar"); 412f8369d7dSTobias Sarnowski $calls = array ( 413f8369d7dSTobias Sarnowski array('document_start',array()), 414f8369d7dSTobias Sarnowski array('p_open',array()), 415f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 416f8369d7dSTobias Sarnowski array('externallink',array('http://www.google.com','Google')), 417f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 418f8369d7dSTobias Sarnowski array('p_close',array()), 419f8369d7dSTobias Sarnowski array('document_end',array()), 420f8369d7dSTobias Sarnowski ); 421f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 422f8369d7dSTobias Sarnowski } 423f8369d7dSTobias Sarnowski 4249bda387aSLarsDW223 function testExternalInInternalLink2() { 42536dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 4269bda387aSLarsDW223 $this->P->parse("Foo [[http://www.google.com?test[]=squarebracketsinurl|Google]] Bar"); 4279bda387aSLarsDW223 $calls = array ( 4289bda387aSLarsDW223 array('document_start',array()), 4299bda387aSLarsDW223 array('p_open',array()), 4309bda387aSLarsDW223 array('cdata',array("\n".'Foo ')), 4319bda387aSLarsDW223 array('externallink',array('http://www.google.com?test[]=squarebracketsinurl','Google')), 4329bda387aSLarsDW223 array('cdata',array(' Bar')), 4339bda387aSLarsDW223 array('p_close',array()), 4349bda387aSLarsDW223 array('document_end',array()), 4359bda387aSLarsDW223 ); 4369bda387aSLarsDW223 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 4379bda387aSLarsDW223 } 4389bda387aSLarsDW223 4399bda387aSLarsDW223 function testExternalInInternalLink2CodeFollows() { 44036dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 4419bda387aSLarsDW223 $this->P->parse("Foo [[http://www.google.com?test[]=squarebracketsinurl|Google]] Bar <code>command [arg1 [arg2 [arg3]]]</code>"); 4429bda387aSLarsDW223 $calls = array ( 4439bda387aSLarsDW223 array('document_start',array()), 4449bda387aSLarsDW223 array('p_open',array()), 4459bda387aSLarsDW223 array('cdata',array("\n".'Foo ')), 4469bda387aSLarsDW223 array('externallink',array('http://www.google.com?test[]=squarebracketsinurl','Google')), 4479bda387aSLarsDW223 array('cdata',array(' Bar <code>command [arg1 [arg2 [arg3]]]</code>')), 4489bda387aSLarsDW223 array('p_close',array()), 4499bda387aSLarsDW223 array('document_end',array()), 4509bda387aSLarsDW223 ); 4519bda387aSLarsDW223 $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 4529bda387aSLarsDW223 } 4539bda387aSLarsDW223 4542e3f2c78SAndreas Gohr function testTwoInternalLinks() { 45536dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 4562e3f2c78SAndreas Gohr $this->P->parse("Foo [[foo:bar|one]] and [[bar:foo|two]] Bar"); 4572e3f2c78SAndreas Gohr $calls = array ( 4582e3f2c78SAndreas Gohr array('document_start',array()), 4592e3f2c78SAndreas Gohr array('p_open',array()), 4602e3f2c78SAndreas Gohr array('cdata',array("\n".'Foo ')), 4612e3f2c78SAndreas Gohr array('internallink',array('foo:bar','one')), 4622e3f2c78SAndreas Gohr array('cdata',array(' and ')), 4632e3f2c78SAndreas Gohr array('internallink',array('bar:foo','two')), 4642e3f2c78SAndreas Gohr array('cdata',array(' Bar')), 4652e3f2c78SAndreas Gohr array('p_close',array()), 4662e3f2c78SAndreas Gohr array('document_end',array()), 4672e3f2c78SAndreas Gohr ); 4682e3f2c78SAndreas Gohr $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 4692e3f2c78SAndreas Gohr } 4702e3f2c78SAndreas Gohr 4712e3f2c78SAndreas Gohr 472f8369d7dSTobias Sarnowski function testInterwikiLink() { 47336dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 474f8369d7dSTobias Sarnowski $this->P->parse("Foo [[iw>somepage|Some Page]] Bar"); 475f8369d7dSTobias Sarnowski $calls = array ( 476f8369d7dSTobias Sarnowski array('document_start',array()), 477f8369d7dSTobias Sarnowski array('p_open',array()), 478f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 479f8369d7dSTobias Sarnowski array('interwikilink',array('iw>somepage','Some Page','iw','somepage')), 480f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 481f8369d7dSTobias Sarnowski array('p_close',array()), 482f8369d7dSTobias Sarnowski array('document_end',array()), 483f8369d7dSTobias Sarnowski ); 484f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 485f8369d7dSTobias Sarnowski } 486f8369d7dSTobias Sarnowski 487f8369d7dSTobias Sarnowski function testInterwikiLinkCase() { 48836dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 489f8369d7dSTobias Sarnowski $this->P->parse("Foo [[IW>somepage|Some Page]] Bar"); 490f8369d7dSTobias Sarnowski $calls = array ( 491f8369d7dSTobias Sarnowski array('document_start',array()), 492f8369d7dSTobias Sarnowski array('p_open',array()), 493f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 494f8369d7dSTobias Sarnowski array('interwikilink',array('IW>somepage','Some Page','iw','somepage')), 495f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 496f8369d7dSTobias Sarnowski array('p_close',array()), 497f8369d7dSTobias Sarnowski array('document_end',array()), 498f8369d7dSTobias Sarnowski ); 499f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 500f8369d7dSTobias Sarnowski } 501f8369d7dSTobias Sarnowski 502f8369d7dSTobias Sarnowski function testInterwikiPedia() { 50336dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 504f8369d7dSTobias Sarnowski $this->P->parse("Foo [[wp>Callback_(computer_science)|callbacks]] Bar"); 505f8369d7dSTobias Sarnowski $calls = array ( 506f8369d7dSTobias Sarnowski array('document_start',array()), 507f8369d7dSTobias Sarnowski array('p_open',array()), 508f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 509f8369d7dSTobias Sarnowski array('interwikilink',array('wp>Callback_(computer_science)','callbacks','wp','Callback_(computer_science)')), 510f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 511f8369d7dSTobias Sarnowski array('p_close',array()), 512f8369d7dSTobias Sarnowski array('document_end',array()), 513f8369d7dSTobias Sarnowski ); 514f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 515f8369d7dSTobias Sarnowski } 516f8369d7dSTobias Sarnowski 517f8369d7dSTobias Sarnowski function testCamelCase() { 51836dc94bbSAndreas Gohr $this->P->addMode('camelcaselink',new Camelcaselink()); 519f8369d7dSTobias Sarnowski $this->P->parse("Foo FooBar Bar"); 520f8369d7dSTobias Sarnowski $calls = array ( 521f8369d7dSTobias Sarnowski array('document_start',array()), 522f8369d7dSTobias Sarnowski array('p_open',array()), 523f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 524f8369d7dSTobias Sarnowski array('camelcaselink',array('FooBar')), 525f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 526f8369d7dSTobias Sarnowski array('p_close',array()), 527f8369d7dSTobias Sarnowski array('document_end',array()), 528f8369d7dSTobias Sarnowski ); 529f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 530f8369d7dSTobias Sarnowski } 531f8369d7dSTobias Sarnowski 532f8369d7dSTobias Sarnowski function testFileLink() { 53336dc94bbSAndreas Gohr $this->P->addMode('filelink',new FileLink()); 534f8369d7dSTobias Sarnowski $this->P->parse('Foo file://temp/file.txt Bar'); 535f8369d7dSTobias Sarnowski $calls = array ( 536f8369d7dSTobias Sarnowski array('document_start',array()), 537f8369d7dSTobias Sarnowski array('p_open',array()), 538f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 539f8369d7dSTobias Sarnowski array('filelink',array('file://temp/file.txt ',NULL)), 540f8369d7dSTobias Sarnowski array('cdata',array('Bar')), 541f8369d7dSTobias Sarnowski array('p_close',array()), 542f8369d7dSTobias Sarnowski array('document_end',array()), 543f8369d7dSTobias Sarnowski ); 544f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 545f8369d7dSTobias Sarnowski } 546f8369d7dSTobias Sarnowski 547f8369d7dSTobias Sarnowski function testFileLinkInternal() { 54836dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 549f8369d7dSTobias Sarnowski $this->P->parse('Foo [[file://temp/file.txt|Some File]] Bar'); 550f8369d7dSTobias Sarnowski $calls = array ( 551f8369d7dSTobias Sarnowski array('document_start',array()), 552f8369d7dSTobias Sarnowski array('p_open',array()), 553f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 554f8369d7dSTobias Sarnowski array('externallink',array('file://temp/file.txt','Some File')), 555f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 556f8369d7dSTobias Sarnowski array('p_close',array()), 557f8369d7dSTobias Sarnowski array('document_end',array()), 558f8369d7dSTobias Sarnowski ); 559f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 560f8369d7dSTobias Sarnowski } 561f8369d7dSTobias Sarnowski 562f8369d7dSTobias Sarnowski function testWindowsShareLink() { 56336dc94bbSAndreas Gohr $this->P->addMode('windowssharelink',new Windowssharelink()); 564f8369d7dSTobias Sarnowski $this->P->parse('Foo \\\server\share Bar'); 565f8369d7dSTobias Sarnowski $calls = array ( 566f8369d7dSTobias Sarnowski array('document_start',array()), 567f8369d7dSTobias Sarnowski array('p_open',array()), 568f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 569f8369d7dSTobias Sarnowski array('windowssharelink',array('\\\server\share',NULL)), 570f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 571f8369d7dSTobias Sarnowski array('p_close',array()), 572f8369d7dSTobias Sarnowski array('document_end',array()), 573f8369d7dSTobias Sarnowski ); 574f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 575f8369d7dSTobias Sarnowski } 576f8369d7dSTobias Sarnowski 577f8369d7dSTobias Sarnowski function testWindowsShareLinkHyphen() { 57836dc94bbSAndreas Gohr $this->P->addMode('windowssharelink',new Windowssharelink()); 579f8369d7dSTobias Sarnowski $this->P->parse('Foo \\\server\share-hyphen Bar'); 580f8369d7dSTobias Sarnowski $calls = array ( 581f8369d7dSTobias Sarnowski array('document_start',array()), 582f8369d7dSTobias Sarnowski array('p_open',array()), 583f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 584f8369d7dSTobias Sarnowski array('windowssharelink',array('\\\server\share-hyphen',NULL)), 585f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 586f8369d7dSTobias Sarnowski array('p_close',array()), 587f8369d7dSTobias Sarnowski array('document_end',array()), 588f8369d7dSTobias Sarnowski ); 589f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 590f8369d7dSTobias Sarnowski } 591f8369d7dSTobias Sarnowski 592f8369d7dSTobias Sarnowski function testWindowsShareLinkInternal() { 59336dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 594f8369d7dSTobias Sarnowski $this->P->parse('Foo [[\\\server\share|My Documents]] Bar'); 595f8369d7dSTobias Sarnowski $calls = array ( 596f8369d7dSTobias Sarnowski array('document_start',array()), 597f8369d7dSTobias Sarnowski array('p_open',array()), 598f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 599f8369d7dSTobias Sarnowski array('windowssharelink',array('\\\server\share','My Documents')), 600f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 601f8369d7dSTobias Sarnowski array('p_close',array()), 602f8369d7dSTobias Sarnowski array('document_end',array()), 603f8369d7dSTobias Sarnowski ); 604f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 605f8369d7dSTobias Sarnowski } 606f8369d7dSTobias Sarnowski 607f8369d7dSTobias Sarnowski function testMediaInternal() { 60836dc94bbSAndreas Gohr $this->P->addMode('media',new Media()); 609f8369d7dSTobias Sarnowski $this->P->parse('Foo {{img.gif}} Bar'); 610f8369d7dSTobias Sarnowski $calls = array ( 611f8369d7dSTobias Sarnowski array('document_start',array()), 612f8369d7dSTobias Sarnowski array('p_open',array()), 613f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 614*d8ab8746SAndreas Gohr array('internalmedia',array('img.gif',NULL,NULL,NULL,NULL,'cache','details')), 615f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 616f8369d7dSTobias Sarnowski array('p_close',array()), 617f8369d7dSTobias Sarnowski array('document_end',array()), 618f8369d7dSTobias Sarnowski ); 619f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 620f8369d7dSTobias Sarnowski } 621f8369d7dSTobias Sarnowski 622f8369d7dSTobias Sarnowski function testMediaInternalLinkOnly() { 62336dc94bbSAndreas Gohr $this->P->addMode('media',new Media()); 624f8369d7dSTobias Sarnowski $this->P->parse('Foo {{img.gif?linkonly}} Bar'); 625f8369d7dSTobias Sarnowski $calls = array ( 626f8369d7dSTobias Sarnowski array('document_start',array()), 627f8369d7dSTobias Sarnowski array('p_open',array()), 628f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 629*d8ab8746SAndreas Gohr array('internalmedia',array('img.gif',NULL,NULL,NULL,NULL,'cache','linkonly')), 630f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 631f8369d7dSTobias Sarnowski array('p_close',array()), 632f8369d7dSTobias Sarnowski array('document_end',array()), 633f8369d7dSTobias Sarnowski ); 634f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 635f8369d7dSTobias Sarnowski } 636f8369d7dSTobias Sarnowski 637f8369d7dSTobias Sarnowski function testMediaNotImage() { 63836dc94bbSAndreas Gohr $this->P->addMode('media',new Media()); 639f8369d7dSTobias Sarnowski $this->P->parse('Foo {{foo.txt?10x10|Some File}} Bar'); 640f8369d7dSTobias Sarnowski $calls = array ( 641f8369d7dSTobias Sarnowski array('document_start',array()), 642f8369d7dSTobias Sarnowski array('p_open',array()), 643f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 644*d8ab8746SAndreas Gohr array('internalmedia',array('foo.txt','Some File',null,10,10,'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 testMediaInternalLAlign() { 65336dc94bbSAndreas Gohr $this->P->addMode('media',new Media()); 654f8369d7dSTobias Sarnowski $this->P->parse('Foo {{img.gif }} Bar'); 655f8369d7dSTobias Sarnowski $calls = array ( 656f8369d7dSTobias Sarnowski array('document_start',array()), 657f8369d7dSTobias Sarnowski array('p_open',array()), 658f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 659*d8ab8746SAndreas Gohr array('internalmedia',array('img.gif',NULL,'left',NULL,NULL,'cache','details')), 660f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 661f8369d7dSTobias Sarnowski array('p_close',array()), 662f8369d7dSTobias Sarnowski array('document_end',array()), 663f8369d7dSTobias Sarnowski ); 664f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 665f8369d7dSTobias Sarnowski } 666f8369d7dSTobias Sarnowski 667f8369d7dSTobias Sarnowski function testMediaInternalRAlign() { 66836dc94bbSAndreas Gohr $this->P->addMode('media',new Media()); 669f8369d7dSTobias Sarnowski $this->P->parse('Foo {{ img.gif}} Bar'); 670f8369d7dSTobias Sarnowski $calls = array ( 671f8369d7dSTobias Sarnowski array('document_start',array()), 672f8369d7dSTobias Sarnowski array('p_open',array()), 673f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 674*d8ab8746SAndreas Gohr array('internalmedia',array('img.gif',NULL,'right',NULL,NULL,'cache','details')), 675f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 676f8369d7dSTobias Sarnowski array('p_close',array()), 677f8369d7dSTobias Sarnowski array('document_end',array()), 678f8369d7dSTobias Sarnowski ); 679f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 680f8369d7dSTobias Sarnowski } 681f8369d7dSTobias Sarnowski 682f8369d7dSTobias Sarnowski function testMediaInternalCenter() { 68336dc94bbSAndreas Gohr $this->P->addMode('media',new Media()); 684f8369d7dSTobias Sarnowski $this->P->parse('Foo {{ img.gif }} Bar'); 685f8369d7dSTobias Sarnowski $calls = array ( 686f8369d7dSTobias Sarnowski array('document_start',array()), 687f8369d7dSTobias Sarnowski array('p_open',array()), 688f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 689*d8ab8746SAndreas Gohr array('internalmedia',array('img.gif',NULL,'center',NULL,NULL,'cache','details')), 690f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 691f8369d7dSTobias Sarnowski array('p_close',array()), 692f8369d7dSTobias Sarnowski array('document_end',array()), 693f8369d7dSTobias Sarnowski ); 694f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 695f8369d7dSTobias Sarnowski } 696f8369d7dSTobias Sarnowski 697f8369d7dSTobias Sarnowski function testMediaInternalParams() { 69836dc94bbSAndreas Gohr $this->P->addMode('media',new Media()); 699f8369d7dSTobias Sarnowski $this->P->parse('Foo {{img.gif?50x100nocache}} Bar'); 700f8369d7dSTobias Sarnowski $calls = array ( 701f8369d7dSTobias Sarnowski array('document_start',array()), 702f8369d7dSTobias Sarnowski array('p_open',array()), 703f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 704*d8ab8746SAndreas Gohr array('internalmedia',array('img.gif',NULL,NULL,'50','100','nocache','details')), 705f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 706f8369d7dSTobias Sarnowski array('p_close',array()), 707f8369d7dSTobias Sarnowski array('document_end',array()), 708f8369d7dSTobias Sarnowski ); 709f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 710f8369d7dSTobias Sarnowski } 711f8369d7dSTobias Sarnowski 712f8369d7dSTobias Sarnowski function testMediaInternalTitle() { 71336dc94bbSAndreas Gohr $this->P->addMode('media',new Media()); 714f8369d7dSTobias Sarnowski $this->P->parse('Foo {{img.gif?50x100|Some Image}} Bar'); 715f8369d7dSTobias Sarnowski $calls = array ( 716f8369d7dSTobias Sarnowski array('document_start',array()), 717f8369d7dSTobias Sarnowski array('p_open',array()), 718f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 719*d8ab8746SAndreas Gohr array('internalmedia',array('img.gif','Some Image',NULL,'50','100','cache','details')), 720f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 721f8369d7dSTobias Sarnowski array('p_close',array()), 722f8369d7dSTobias Sarnowski array('document_end',array()), 723f8369d7dSTobias Sarnowski ); 724f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 725f8369d7dSTobias Sarnowski } 726f8369d7dSTobias Sarnowski 727f8369d7dSTobias Sarnowski function testMediaExternal() { 72836dc94bbSAndreas Gohr $this->P->addMode('media',new Media()); 729f8369d7dSTobias Sarnowski $this->P->parse('Foo {{http://www.google.com/img.gif}} Bar'); 730f8369d7dSTobias Sarnowski $calls = array ( 731f8369d7dSTobias Sarnowski array('document_start',array()), 732f8369d7dSTobias Sarnowski array('p_open',array()), 733f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 734*d8ab8746SAndreas Gohr array('externalmedia',array('http://www.google.com/img.gif',NULL,NULL,NULL,NULL,'cache','details')), 735f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 736f8369d7dSTobias Sarnowski array('p_close',array()), 737f8369d7dSTobias Sarnowski array('document_end',array()), 738f8369d7dSTobias Sarnowski ); 739f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 740f8369d7dSTobias Sarnowski } 741f8369d7dSTobias Sarnowski 742f8369d7dSTobias Sarnowski function testMediaExternalParams() { 74336dc94bbSAndreas Gohr $this->P->addMode('media',new Media()); 744f8369d7dSTobias Sarnowski $this->P->parse('Foo {{http://www.google.com/img.gif?50x100nocache}} Bar'); 745f8369d7dSTobias Sarnowski $calls = array ( 746f8369d7dSTobias Sarnowski array('document_start',array()), 747f8369d7dSTobias Sarnowski array('p_open',array()), 748f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 749*d8ab8746SAndreas Gohr array('externalmedia',array('http://www.google.com/img.gif',NULL,NULL,'50','100','nocache','details')), 750f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 751f8369d7dSTobias Sarnowski array('p_close',array()), 752f8369d7dSTobias Sarnowski array('document_end',array()), 753f8369d7dSTobias Sarnowski ); 754f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 755f8369d7dSTobias Sarnowski } 756f8369d7dSTobias Sarnowski 757f8369d7dSTobias Sarnowski function testMediaExternalTitle() { 75836dc94bbSAndreas Gohr $this->P->addMode('media',new Media()); 759f8369d7dSTobias Sarnowski $this->P->parse('Foo {{http://www.google.com/img.gif?50x100|Some Image}} Bar'); 760f8369d7dSTobias Sarnowski $calls = array ( 761f8369d7dSTobias Sarnowski array('document_start',array()), 762f8369d7dSTobias Sarnowski array('p_open',array()), 763f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 764f8369d7dSTobias Sarnowski array('externalmedia', 765*d8ab8746SAndreas Gohr array('http://www.google.com/img.gif','Some Image',NULL,'50','100','cache','details')), 766f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 767f8369d7dSTobias Sarnowski array('p_close',array()), 768f8369d7dSTobias Sarnowski array('document_end',array()), 769f8369d7dSTobias Sarnowski ); 770f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 771f8369d7dSTobias Sarnowski } 772f8369d7dSTobias Sarnowski 773f8369d7dSTobias Sarnowski function testMediaInInternalLink() { 77436dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 775f8369d7dSTobias Sarnowski $this->P->parse("Foo [[x:1:y:foo_bar:z|{{img.gif?10x20nocache|Some Image}}]] Bar"); 776f8369d7dSTobias Sarnowski 777f8369d7dSTobias Sarnowski $image = array( 778f8369d7dSTobias Sarnowski 'type'=>'internalmedia', 779f8369d7dSTobias Sarnowski 'src'=>'img.gif', 780f8369d7dSTobias Sarnowski 'title'=>'Some Image', 781f8369d7dSTobias Sarnowski 'align'=>NULL, 782f8369d7dSTobias Sarnowski 'width'=>10, 783f8369d7dSTobias Sarnowski 'height'=>20, 784f8369d7dSTobias Sarnowski 'cache'=>'nocache', 785*d8ab8746SAndreas Gohr 'linking'=>'details', 786f8369d7dSTobias Sarnowski ); 787f8369d7dSTobias Sarnowski 788f8369d7dSTobias Sarnowski $calls = array ( 789f8369d7dSTobias Sarnowski array('document_start',array()), 790f8369d7dSTobias Sarnowski array('p_open',array()), 791f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 792f8369d7dSTobias Sarnowski array('internallink',array('x:1:y:foo_bar:z',$image)), 793f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 794f8369d7dSTobias Sarnowski array('p_close',array()), 795f8369d7dSTobias Sarnowski array('document_end',array()), 796f8369d7dSTobias Sarnowski ); 797f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 798f8369d7dSTobias Sarnowski } 799f8369d7dSTobias Sarnowski 800f8369d7dSTobias Sarnowski function testMediaNoImageInInternalLink() { 80136dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 802f8369d7dSTobias Sarnowski $this->P->parse("Foo [[x:1:y:foo_bar:z|{{foo.txt?10x20nocache|Some Image}}]] Bar"); 803f8369d7dSTobias Sarnowski 804f8369d7dSTobias Sarnowski $image = array( 805f8369d7dSTobias Sarnowski 'type'=>'internalmedia', 806f8369d7dSTobias Sarnowski 'src'=>'foo.txt', 807f8369d7dSTobias Sarnowski 'title'=>'Some Image', 808f8369d7dSTobias Sarnowski 'align'=>NULL, 809f8369d7dSTobias Sarnowski 'width'=>10, 810f8369d7dSTobias Sarnowski 'height'=>20, 811f8369d7dSTobias Sarnowski 'cache'=>'nocache', 812*d8ab8746SAndreas Gohr 'linking'=>'details', 813f8369d7dSTobias Sarnowski ); 814f8369d7dSTobias Sarnowski 815f8369d7dSTobias Sarnowski $calls = array ( 816f8369d7dSTobias Sarnowski array('document_start',array()), 817f8369d7dSTobias Sarnowski array('p_open',array()), 818f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 819f8369d7dSTobias Sarnowski array('internallink',array('x:1:y:foo_bar:z',$image)), 820f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 821f8369d7dSTobias Sarnowski array('p_close',array()), 822f8369d7dSTobias Sarnowski array('document_end',array()), 823f8369d7dSTobias Sarnowski ); 824f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 825f8369d7dSTobias Sarnowski } 826f8369d7dSTobias Sarnowski 827f8369d7dSTobias Sarnowski function testMediaInEmailLink() { 82836dc94bbSAndreas Gohr $this->P->addMode('internallink',new Internallink()); 829f8369d7dSTobias Sarnowski $this->P->parse("Foo [[foo@example.com|{{img.gif?10x20nocache|Some Image}}]] Bar"); 830f8369d7dSTobias Sarnowski 831f8369d7dSTobias Sarnowski $image = array( 832f8369d7dSTobias Sarnowski 'type'=>'internalmedia', 833f8369d7dSTobias Sarnowski 'src'=>'img.gif', 834f8369d7dSTobias Sarnowski 'title'=>'Some Image', 835f8369d7dSTobias Sarnowski 'align'=>NULL, 836f8369d7dSTobias Sarnowski 'width'=>10, 837f8369d7dSTobias Sarnowski 'height'=>20, 838f8369d7dSTobias Sarnowski 'cache'=>'nocache', 839*d8ab8746SAndreas Gohr 'linking'=>'details', 840f8369d7dSTobias Sarnowski ); 841f8369d7dSTobias Sarnowski 842f8369d7dSTobias Sarnowski $calls = array ( 843f8369d7dSTobias Sarnowski array('document_start',array()), 844f8369d7dSTobias Sarnowski array('p_open',array()), 845f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 846f8369d7dSTobias Sarnowski array('emaillink',array('foo@example.com',$image)), 847f8369d7dSTobias Sarnowski array('cdata',array(' Bar')), 848f8369d7dSTobias Sarnowski array('p_close',array()), 849f8369d7dSTobias Sarnowski array('document_end',array()), 850f8369d7dSTobias Sarnowski ); 851f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 852f8369d7dSTobias Sarnowski } 853f8369d7dSTobias Sarnowski 854f8369d7dSTobias Sarnowski function testNestedMedia() { 85536dc94bbSAndreas Gohr $this->P->addMode('media',new Media()); 856f8369d7dSTobias Sarnowski $this->P->parse('Foo {{img.gif|{{foo.gif|{{bar.gif|Bar}}}}}} Bar'); 857f8369d7dSTobias Sarnowski $calls = array ( 858f8369d7dSTobias Sarnowski array('document_start',array()), 859f8369d7dSTobias Sarnowski array('p_open',array()), 860f8369d7dSTobias Sarnowski array('cdata',array("\n".'Foo ')), 861f8369d7dSTobias Sarnowski array('internalmedia', 862*d8ab8746SAndreas Gohr array('img.gif','{{foo.gif|{{bar.gif|Bar',NULL,NULL,NULL,'cache','details')), 863f8369d7dSTobias Sarnowski array('cdata',array('}}}} Bar')), 864f8369d7dSTobias Sarnowski array('p_close',array()), 865f8369d7dSTobias Sarnowski array('document_end',array()), 866f8369d7dSTobias Sarnowski ); 867f8369d7dSTobias Sarnowski $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls); 868f8369d7dSTobias Sarnowski } 869f8369d7dSTobias Sarnowski 870f8369d7dSTobias Sarnowski} 871f8369d7dSTobias Sarnowski 872