xref: /dokuwiki/_test/tests/inc/parser/parser_links.test.php (revision be906b566b9bdfd92c032ee07c4fd077d820a8d1)
1f8369d7dSTobias Sarnowski<?php
236dc94bbSAndreas Gohr
3*be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Camelcaselink;
4*be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Emaillink;
5*be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Externallink;
6*be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Filelink;
7*be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Internallink;
8*be906b56SAndreas Gohruse dokuwiki\Parsing\ParserMode\Media;
9*be906b56SAndreas 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
1565e964d2bSLarsDW223    function testExternalWWWLinkInPath() {
15736dc94bbSAndreas Gohr        $this->P->addMode('externallink',new Externallink());
1585e964d2bSLarsDW223        // See issue #936. Should NOT generate a link!
1595e964d2bSLarsDW223        $this->P->parse("Foo /home/subdir/www/www.something.de/somedir/ Bar");
1605e964d2bSLarsDW223        $calls = array (
1615e964d2bSLarsDW223            array('document_start',array()),
1625e964d2bSLarsDW223            array('p_open',array()),
1635e964d2bSLarsDW223            array('cdata',array("\n".'Foo /home/subdir/www/www.something.de/somedir/ Bar')),
1645e964d2bSLarsDW223            array('p_close',array()),
1655e964d2bSLarsDW223            array('document_end',array()),
1665e964d2bSLarsDW223        );
1675e964d2bSLarsDW223        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
1685e964d2bSLarsDW223    }
1695e964d2bSLarsDW223
1705e964d2bSLarsDW223    function testExternalWWWLinkFollowingPath() {
17136dc94bbSAndreas Gohr        $this->P->addMode('externallink',new Externallink());
1725e964d2bSLarsDW223        $this->P->parse("Foo /home/subdir/www/ www.something.de/somedir/ Bar");
1735e964d2bSLarsDW223        $calls = array (
1745e964d2bSLarsDW223            array('document_start',array()),
1755e964d2bSLarsDW223            array('p_open',array()),
1765e964d2bSLarsDW223            array('cdata',array("\n".'Foo /home/subdir/www/ ')),
1775e964d2bSLarsDW223            array('externallink',array('http://www.something.de/somedir/', 'www.something.de/somedir/')),
1785e964d2bSLarsDW223            array('cdata',array(' Bar')),
1795e964d2bSLarsDW223            array('p_close',array()),
1805e964d2bSLarsDW223            array('document_end',array()),
1815e964d2bSLarsDW223        );
1825e964d2bSLarsDW223        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
1835e964d2bSLarsDW223    }
1845e964d2bSLarsDW223
185f8369d7dSTobias Sarnowski    function testExternalFTPLink() {
18636dc94bbSAndreas Gohr        $this->P->addMode('externallink',new Externallink());
187f8369d7dSTobias Sarnowski        $this->P->parse("Foo ftp.sunsite.com Bar");
188f8369d7dSTobias Sarnowski        $calls = array (
189f8369d7dSTobias Sarnowski            array('document_start',array()),
190f8369d7dSTobias Sarnowski            array('p_open',array()),
191f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
192f8369d7dSTobias Sarnowski            array('externallink',array('ftp://ftp.sunsite.com', 'ftp.sunsite.com')),
193f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
194f8369d7dSTobias Sarnowski            array('p_close',array()),
195f8369d7dSTobias Sarnowski            array('document_end',array()),
196f8369d7dSTobias Sarnowski        );
197f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
198f8369d7dSTobias Sarnowski    }
1995e964d2bSLarsDW223
2005e964d2bSLarsDW223    function testExternalFTPLinkInPath() {
20136dc94bbSAndreas Gohr        $this->P->addMode('externallink',new Externallink());
2025e964d2bSLarsDW223        // See issue #936. Should NOT generate a link!
2035e964d2bSLarsDW223        $this->P->parse("Foo /home/subdir/www/ftp.something.de/somedir/ Bar");
2045e964d2bSLarsDW223        $calls = array (
2055e964d2bSLarsDW223            array('document_start',array()),
2065e964d2bSLarsDW223            array('p_open',array()),
2075e964d2bSLarsDW223            array('cdata',array("\n".'Foo /home/subdir/www/ftp.something.de/somedir/ Bar')),
2085e964d2bSLarsDW223            array('p_close',array()),
2095e964d2bSLarsDW223            array('document_end',array()),
2105e964d2bSLarsDW223        );
2115e964d2bSLarsDW223        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
2125e964d2bSLarsDW223    }
2135e964d2bSLarsDW223
2145e964d2bSLarsDW223    function testExternalFTPLinkFollowingPath() {
21536dc94bbSAndreas Gohr        $this->P->addMode('externallink',new Externallink());
2165e964d2bSLarsDW223        $this->P->parse("Foo /home/subdir/www/ ftp.something.de/somedir/ Bar");
2175e964d2bSLarsDW223        $calls = array (
2185e964d2bSLarsDW223            array('document_start',array()),
2195e964d2bSLarsDW223            array('p_open',array()),
2205e964d2bSLarsDW223            array('cdata',array("\n".'Foo /home/subdir/www/ ')),
2215e964d2bSLarsDW223            array('externallink',array('ftp://ftp.something.de/somedir/', 'ftp.something.de/somedir/')),
2225e964d2bSLarsDW223            array('cdata',array(' Bar')),
2235e964d2bSLarsDW223            array('p_close',array()),
2245e964d2bSLarsDW223            array('document_end',array()),
2255e964d2bSLarsDW223        );
2265e964d2bSLarsDW223        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
2275e964d2bSLarsDW223    }
2285e964d2bSLarsDW223
229f8369d7dSTobias Sarnowski    function testEmail() {
23036dc94bbSAndreas Gohr        $this->P->addMode('emaillink',new Emaillink());
231f8369d7dSTobias Sarnowski        $this->P->parse("Foo <bugs@php.net> Bar");
232f8369d7dSTobias Sarnowski        $calls = array (
233f8369d7dSTobias Sarnowski            array('document_start',array()),
234f8369d7dSTobias Sarnowski            array('p_open',array()),
235f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
236f8369d7dSTobias Sarnowski            array('emaillink',array('bugs@php.net', NULL)),
237f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
238f8369d7dSTobias Sarnowski            array('p_close',array()),
239f8369d7dSTobias Sarnowski            array('document_end',array()),
240f8369d7dSTobias Sarnowski        );
241f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
242f8369d7dSTobias Sarnowski    }
243f8369d7dSTobias Sarnowski
244f8369d7dSTobias Sarnowski    function testEmailRFC2822() {
24536dc94bbSAndreas Gohr        $this->P->addMode('emaillink',new Emaillink());
246f8369d7dSTobias Sarnowski        $this->P->parse("Foo <~fix+bug's.for/ev{e}r@php.net> Bar");
247f8369d7dSTobias Sarnowski        $calls = array (
248f8369d7dSTobias Sarnowski            array('document_start',array()),
249f8369d7dSTobias Sarnowski            array('p_open',array()),
250f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
251f8369d7dSTobias Sarnowski            array('emaillink',array("~fix+bug's.for/ev{e}r@php.net", NULL)),
252f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
253f8369d7dSTobias Sarnowski            array('p_close',array()),
254f8369d7dSTobias Sarnowski            array('document_end',array()),
255f8369d7dSTobias Sarnowski        );
256f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
257f8369d7dSTobias Sarnowski    }
258f8369d7dSTobias Sarnowski
259f8369d7dSTobias Sarnowski    function testEmailCase() {
26036dc94bbSAndreas Gohr        $this->P->addMode('emaillink',new Emaillink());
261f8369d7dSTobias Sarnowski        $this->P->parse("Foo <bugs@pHp.net> Bar");
262f8369d7dSTobias Sarnowski        $calls = array (
263f8369d7dSTobias Sarnowski            array('document_start',array()),
264f8369d7dSTobias Sarnowski            array('p_open',array()),
265f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
266f8369d7dSTobias Sarnowski            array('emaillink',array('bugs@pHp.net', NULL)),
267f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
268f8369d7dSTobias Sarnowski            array('p_close',array()),
269f8369d7dSTobias Sarnowski            array('document_end',array()),
270f8369d7dSTobias Sarnowski        );
271f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
272f8369d7dSTobias Sarnowski    }
273f8369d7dSTobias Sarnowski
274f8369d7dSTobias Sarnowski
275f8369d7dSTobias Sarnowski    function testInternalLinkOneChar() {
27636dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
277f8369d7dSTobias Sarnowski        $this->P->parse("Foo [[l]] Bar");
278f8369d7dSTobias Sarnowski        $calls = array (
279f8369d7dSTobias Sarnowski            array('document_start',array()),
280f8369d7dSTobias Sarnowski            array('p_open',array()),
281f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
282f8369d7dSTobias Sarnowski            array('internallink',array('l',NULL)),
283f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
284f8369d7dSTobias Sarnowski            array('p_close',array()),
285f8369d7dSTobias Sarnowski            array('document_end',array()),
286f8369d7dSTobias Sarnowski        );
287f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
288f8369d7dSTobias Sarnowski    }
289f8369d7dSTobias Sarnowski
290f8369d7dSTobias Sarnowski    function testInternalLinkNoChar() {
29136dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
292f8369d7dSTobias Sarnowski        $this->P->parse("Foo [[]] Bar");
293f8369d7dSTobias Sarnowski        $calls = array (
294f8369d7dSTobias Sarnowski            array('document_start',array()),
295f8369d7dSTobias Sarnowski            array('p_open',array()),
296f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
297f8369d7dSTobias Sarnowski            array('internallink',array('',NULL)),
298f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
299f8369d7dSTobias Sarnowski            array('p_close',array()),
300f8369d7dSTobias Sarnowski            array('document_end',array()),
301f8369d7dSTobias Sarnowski        );
302f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
303f8369d7dSTobias Sarnowski    }
304f8369d7dSTobias Sarnowski
305f8369d7dSTobias Sarnowski    function testInternalLinkNamespaceNoTitle() {
30636dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
307f8369d7dSTobias Sarnowski        $this->P->parse("Foo [[foo:bar]] Bar");
308f8369d7dSTobias Sarnowski        $calls = array (
309f8369d7dSTobias Sarnowski            array('document_start',array()),
310f8369d7dSTobias Sarnowski            array('p_open',array()),
311f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
312f8369d7dSTobias Sarnowski            array('internallink',array('foo:bar',NULL)),
313f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
314f8369d7dSTobias Sarnowski            array('p_close',array()),
315f8369d7dSTobias Sarnowski            array('document_end',array()),
316f8369d7dSTobias Sarnowski        );
317f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
318f8369d7dSTobias Sarnowski    }
319f8369d7dSTobias Sarnowski
320f8369d7dSTobias Sarnowski    function testInternalLinkNamespace() {
32136dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
322f8369d7dSTobias Sarnowski        $this->P->parse("Foo [[x:1:y:foo_bar:z|Test]] Bar");
323f8369d7dSTobias Sarnowski        $calls = array (
324f8369d7dSTobias Sarnowski            array('document_start',array()),
325f8369d7dSTobias Sarnowski            array('p_open',array()),
326f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
327f8369d7dSTobias Sarnowski            array('internallink',array('x:1:y:foo_bar:z','Test')),
328f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
329f8369d7dSTobias Sarnowski            array('p_close',array()),
330f8369d7dSTobias Sarnowski            array('document_end',array()),
331f8369d7dSTobias Sarnowski        );
332f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
333f8369d7dSTobias Sarnowski    }
334f8369d7dSTobias Sarnowski
335f8369d7dSTobias Sarnowski    function testInternalLinkSectionRef() {
33636dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
337f8369d7dSTobias Sarnowski        $this->P->parse("Foo [[wiki:syntax#internal|Syntax]] Bar");
338f8369d7dSTobias Sarnowski        $calls = array (
339f8369d7dSTobias Sarnowski            array('document_start',array()),
340f8369d7dSTobias Sarnowski            array('p_open',array()),
341f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
342f8369d7dSTobias Sarnowski            array('internallink',array('wiki:syntax#internal','Syntax')),
343f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
344f8369d7dSTobias Sarnowski            array('p_close',array()),
345f8369d7dSTobias Sarnowski            array('document_end',array()),
346f8369d7dSTobias Sarnowski        );
347f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
348f8369d7dSTobias Sarnowski    }
349f8369d7dSTobias Sarnowski
3509bda387aSLarsDW223    function testInternalLinkCodeFollows() {
35136dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
3529bda387aSLarsDW223        $this->P->parse("Foo [[wiki:internal:link|Test]] Bar <code>command [arg1 [arg2 [arg3]]]</code>");
3539bda387aSLarsDW223        $calls = array (
3549bda387aSLarsDW223            array('document_start',array()),
3559bda387aSLarsDW223            array('p_open',array()),
3569bda387aSLarsDW223            array('cdata',array("\n".'Foo ')),
3579bda387aSLarsDW223            array('internallink',array('wiki:internal:link','Test')),
3589bda387aSLarsDW223            array('cdata',array(' Bar <code>command [arg1 [arg2 [arg3]]]</code>')),
3599bda387aSLarsDW223            array('p_close',array()),
3609bda387aSLarsDW223            array('document_end',array()),
3619bda387aSLarsDW223        );
3629bda387aSLarsDW223        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
3639bda387aSLarsDW223    }
3649bda387aSLarsDW223
3659bda387aSLarsDW223    function testInternalLinkCodeFollows2() {
36636dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
3679bda387aSLarsDW223        $this->P->parse("Foo [[wiki:internal:link|[Square brackets in title] Test]] Bar <code>command [arg1 [arg2 [arg3]]]</code>");
3689bda387aSLarsDW223        $calls = array (
3699bda387aSLarsDW223            array('document_start',array()),
3709bda387aSLarsDW223            array('p_open',array()),
3719bda387aSLarsDW223            array('cdata',array("\n".'Foo ')),
3729bda387aSLarsDW223            array('internallink',array('wiki:internal:link','[Square brackets in title] Test')),
3739bda387aSLarsDW223            array('cdata',array(' Bar <code>command [arg1 [arg2 [arg3]]]</code>')),
3749bda387aSLarsDW223            array('p_close',array()),
3759bda387aSLarsDW223            array('document_end',array()),
3769bda387aSLarsDW223        );
3779bda387aSLarsDW223        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
3789bda387aSLarsDW223    }
3799bda387aSLarsDW223
380f8369d7dSTobias Sarnowski    function testExternalInInternalLink() {
38136dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
382f8369d7dSTobias Sarnowski        $this->P->parse("Foo [[http://www.google.com|Google]] Bar");
383f8369d7dSTobias Sarnowski        $calls = array (
384f8369d7dSTobias Sarnowski            array('document_start',array()),
385f8369d7dSTobias Sarnowski            array('p_open',array()),
386f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
387f8369d7dSTobias Sarnowski            array('externallink',array('http://www.google.com','Google')),
388f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
389f8369d7dSTobias Sarnowski            array('p_close',array()),
390f8369d7dSTobias Sarnowski            array('document_end',array()),
391f8369d7dSTobias Sarnowski        );
392f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
393f8369d7dSTobias Sarnowski    }
394f8369d7dSTobias Sarnowski
3959bda387aSLarsDW223    function testExternalInInternalLink2() {
39636dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
3979bda387aSLarsDW223        $this->P->parse("Foo [[http://www.google.com?test[]=squarebracketsinurl|Google]] Bar");
3989bda387aSLarsDW223        $calls = array (
3999bda387aSLarsDW223            array('document_start',array()),
4009bda387aSLarsDW223            array('p_open',array()),
4019bda387aSLarsDW223            array('cdata',array("\n".'Foo ')),
4029bda387aSLarsDW223            array('externallink',array('http://www.google.com?test[]=squarebracketsinurl','Google')),
4039bda387aSLarsDW223            array('cdata',array(' Bar')),
4049bda387aSLarsDW223            array('p_close',array()),
4059bda387aSLarsDW223            array('document_end',array()),
4069bda387aSLarsDW223        );
4079bda387aSLarsDW223        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
4089bda387aSLarsDW223    }
4099bda387aSLarsDW223
4109bda387aSLarsDW223    function testExternalInInternalLink2CodeFollows() {
41136dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
4129bda387aSLarsDW223        $this->P->parse("Foo [[http://www.google.com?test[]=squarebracketsinurl|Google]] Bar <code>command [arg1 [arg2 [arg3]]]</code>");
4139bda387aSLarsDW223        $calls = array (
4149bda387aSLarsDW223            array('document_start',array()),
4159bda387aSLarsDW223            array('p_open',array()),
4169bda387aSLarsDW223            array('cdata',array("\n".'Foo ')),
4179bda387aSLarsDW223            array('externallink',array('http://www.google.com?test[]=squarebracketsinurl','Google')),
4189bda387aSLarsDW223            array('cdata',array(' Bar <code>command [arg1 [arg2 [arg3]]]</code>')),
4199bda387aSLarsDW223            array('p_close',array()),
4209bda387aSLarsDW223            array('document_end',array()),
4219bda387aSLarsDW223        );
4229bda387aSLarsDW223        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
4239bda387aSLarsDW223    }
4249bda387aSLarsDW223
4252e3f2c78SAndreas Gohr    function testTwoInternalLinks() {
42636dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
4272e3f2c78SAndreas Gohr        $this->P->parse("Foo [[foo:bar|one]] and [[bar:foo|two]] Bar");
4282e3f2c78SAndreas Gohr        $calls = array (
4292e3f2c78SAndreas Gohr            array('document_start',array()),
4302e3f2c78SAndreas Gohr            array('p_open',array()),
4312e3f2c78SAndreas Gohr            array('cdata',array("\n".'Foo ')),
4322e3f2c78SAndreas Gohr            array('internallink',array('foo:bar','one')),
4332e3f2c78SAndreas Gohr            array('cdata',array(' and ')),
4342e3f2c78SAndreas Gohr            array('internallink',array('bar:foo','two')),
4352e3f2c78SAndreas Gohr            array('cdata',array(' Bar')),
4362e3f2c78SAndreas Gohr            array('p_close',array()),
4372e3f2c78SAndreas Gohr            array('document_end',array()),
4382e3f2c78SAndreas Gohr        );
4392e3f2c78SAndreas Gohr        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
4402e3f2c78SAndreas Gohr    }
4412e3f2c78SAndreas Gohr
4422e3f2c78SAndreas Gohr
443f8369d7dSTobias Sarnowski    function testInterwikiLink() {
44436dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
445f8369d7dSTobias Sarnowski        $this->P->parse("Foo [[iw>somepage|Some Page]] Bar");
446f8369d7dSTobias Sarnowski        $calls = array (
447f8369d7dSTobias Sarnowski            array('document_start',array()),
448f8369d7dSTobias Sarnowski            array('p_open',array()),
449f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
450f8369d7dSTobias Sarnowski            array('interwikilink',array('iw>somepage','Some Page','iw','somepage')),
451f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
452f8369d7dSTobias Sarnowski            array('p_close',array()),
453f8369d7dSTobias Sarnowski            array('document_end',array()),
454f8369d7dSTobias Sarnowski        );
455f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
456f8369d7dSTobias Sarnowski    }
457f8369d7dSTobias Sarnowski
458f8369d7dSTobias Sarnowski    function testInterwikiLinkCase() {
45936dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
460f8369d7dSTobias Sarnowski        $this->P->parse("Foo [[IW>somepage|Some Page]] Bar");
461f8369d7dSTobias Sarnowski        $calls = array (
462f8369d7dSTobias Sarnowski            array('document_start',array()),
463f8369d7dSTobias Sarnowski            array('p_open',array()),
464f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
465f8369d7dSTobias Sarnowski            array('interwikilink',array('IW>somepage','Some Page','iw','somepage')),
466f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
467f8369d7dSTobias Sarnowski            array('p_close',array()),
468f8369d7dSTobias Sarnowski            array('document_end',array()),
469f8369d7dSTobias Sarnowski        );
470f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
471f8369d7dSTobias Sarnowski    }
472f8369d7dSTobias Sarnowski
473f8369d7dSTobias Sarnowski    function testInterwikiPedia() {
47436dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
475f8369d7dSTobias Sarnowski        $this->P->parse("Foo [[wp>Callback_(computer_science)|callbacks]] Bar");
476f8369d7dSTobias Sarnowski        $calls = array (
477f8369d7dSTobias Sarnowski            array('document_start',array()),
478f8369d7dSTobias Sarnowski            array('p_open',array()),
479f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
480f8369d7dSTobias Sarnowski            array('interwikilink',array('wp>Callback_(computer_science)','callbacks','wp','Callback_(computer_science)')),
481f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
482f8369d7dSTobias Sarnowski            array('p_close',array()),
483f8369d7dSTobias Sarnowski            array('document_end',array()),
484f8369d7dSTobias Sarnowski        );
485f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
486f8369d7dSTobias Sarnowski    }
487f8369d7dSTobias Sarnowski
488f8369d7dSTobias Sarnowski    function testCamelCase() {
48936dc94bbSAndreas Gohr        $this->P->addMode('camelcaselink',new Camelcaselink());
490f8369d7dSTobias Sarnowski        $this->P->parse("Foo FooBar Bar");
491f8369d7dSTobias Sarnowski        $calls = array (
492f8369d7dSTobias Sarnowski            array('document_start',array()),
493f8369d7dSTobias Sarnowski            array('p_open',array()),
494f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
495f8369d7dSTobias Sarnowski            array('camelcaselink',array('FooBar')),
496f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
497f8369d7dSTobias Sarnowski            array('p_close',array()),
498f8369d7dSTobias Sarnowski            array('document_end',array()),
499f8369d7dSTobias Sarnowski        );
500f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
501f8369d7dSTobias Sarnowski    }
502f8369d7dSTobias Sarnowski
503f8369d7dSTobias Sarnowski    function testFileLink() {
50436dc94bbSAndreas Gohr        $this->P->addMode('filelink',new FileLink());
505f8369d7dSTobias Sarnowski        $this->P->parse('Foo file://temp/file.txt Bar');
506f8369d7dSTobias Sarnowski        $calls = array (
507f8369d7dSTobias Sarnowski            array('document_start',array()),
508f8369d7dSTobias Sarnowski            array('p_open',array()),
509f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
510f8369d7dSTobias Sarnowski            array('filelink',array('file://temp/file.txt ',NULL)),
511f8369d7dSTobias Sarnowski            array('cdata',array('Bar')),
512f8369d7dSTobias Sarnowski            array('p_close',array()),
513f8369d7dSTobias Sarnowski            array('document_end',array()),
514f8369d7dSTobias Sarnowski        );
515f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
516f8369d7dSTobias Sarnowski    }
517f8369d7dSTobias Sarnowski
518f8369d7dSTobias Sarnowski    function testFileLinkInternal() {
51936dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
520f8369d7dSTobias Sarnowski        $this->P->parse('Foo [[file://temp/file.txt|Some File]] Bar');
521f8369d7dSTobias Sarnowski        $calls = array (
522f8369d7dSTobias Sarnowski            array('document_start',array()),
523f8369d7dSTobias Sarnowski            array('p_open',array()),
524f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
525f8369d7dSTobias Sarnowski            array('externallink',array('file://temp/file.txt','Some File')),
526f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
527f8369d7dSTobias Sarnowski            array('p_close',array()),
528f8369d7dSTobias Sarnowski            array('document_end',array()),
529f8369d7dSTobias Sarnowski        );
530f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
531f8369d7dSTobias Sarnowski    }
532f8369d7dSTobias Sarnowski
533f8369d7dSTobias Sarnowski    function testWindowsShareLink() {
53436dc94bbSAndreas Gohr        $this->P->addMode('windowssharelink',new Windowssharelink());
535f8369d7dSTobias Sarnowski        $this->P->parse('Foo \\\server\share Bar');
536f8369d7dSTobias Sarnowski        $calls = array (
537f8369d7dSTobias Sarnowski            array('document_start',array()),
538f8369d7dSTobias Sarnowski            array('p_open',array()),
539f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
540f8369d7dSTobias Sarnowski            array('windowssharelink',array('\\\server\share',NULL)),
541f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
542f8369d7dSTobias Sarnowski            array('p_close',array()),
543f8369d7dSTobias Sarnowski            array('document_end',array()),
544f8369d7dSTobias Sarnowski        );
545f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
546f8369d7dSTobias Sarnowski    }
547f8369d7dSTobias Sarnowski
548f8369d7dSTobias Sarnowski    function testWindowsShareLinkHyphen() {
54936dc94bbSAndreas Gohr        $this->P->addMode('windowssharelink',new Windowssharelink());
550f8369d7dSTobias Sarnowski        $this->P->parse('Foo \\\server\share-hyphen Bar');
551f8369d7dSTobias Sarnowski        $calls = array (
552f8369d7dSTobias Sarnowski        array('document_start',array()),
553f8369d7dSTobias Sarnowski        array('p_open',array()),
554f8369d7dSTobias Sarnowski        array('cdata',array("\n".'Foo ')),
555f8369d7dSTobias Sarnowski        array('windowssharelink',array('\\\server\share-hyphen',NULL)),
556f8369d7dSTobias Sarnowski        array('cdata',array(' Bar')),
557f8369d7dSTobias Sarnowski        array('p_close',array()),
558f8369d7dSTobias Sarnowski        array('document_end',array()),
559f8369d7dSTobias Sarnowski        );
560f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
561f8369d7dSTobias Sarnowski    }
562f8369d7dSTobias Sarnowski
563f8369d7dSTobias Sarnowski    function testWindowsShareLinkInternal() {
56436dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
565f8369d7dSTobias Sarnowski        $this->P->parse('Foo [[\\\server\share|My Documents]] Bar');
566f8369d7dSTobias Sarnowski        $calls = array (
567f8369d7dSTobias Sarnowski            array('document_start',array()),
568f8369d7dSTobias Sarnowski            array('p_open',array()),
569f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
570f8369d7dSTobias Sarnowski            array('windowssharelink',array('\\\server\share','My Documents')),
571f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
572f8369d7dSTobias Sarnowski            array('p_close',array()),
573f8369d7dSTobias Sarnowski            array('document_end',array()),
574f8369d7dSTobias Sarnowski        );
575f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
576f8369d7dSTobias Sarnowski    }
577f8369d7dSTobias Sarnowski
578f8369d7dSTobias Sarnowski    function testMediaInternal() {
57936dc94bbSAndreas Gohr        $this->P->addMode('media',new Media());
580f8369d7dSTobias Sarnowski        $this->P->parse('Foo {{img.gif}} Bar');
581f8369d7dSTobias Sarnowski        $calls = array (
582f8369d7dSTobias Sarnowski            array('document_start',array()),
583f8369d7dSTobias Sarnowski            array('p_open',array()),
584f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
585f8369d7dSTobias Sarnowski            array('internalmedia',array('img.gif',NULL,NULL,NULL,NULL,'cache','details')),
586f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
587f8369d7dSTobias Sarnowski            array('p_close',array()),
588f8369d7dSTobias Sarnowski            array('document_end',array()),
589f8369d7dSTobias Sarnowski        );
590f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
591f8369d7dSTobias Sarnowski    }
592f8369d7dSTobias Sarnowski
593f8369d7dSTobias Sarnowski    function testMediaInternalLinkOnly() {
59436dc94bbSAndreas Gohr        $this->P->addMode('media',new Media());
595f8369d7dSTobias Sarnowski        $this->P->parse('Foo {{img.gif?linkonly}} Bar');
596f8369d7dSTobias Sarnowski        $calls = array (
597f8369d7dSTobias Sarnowski            array('document_start',array()),
598f8369d7dSTobias Sarnowski            array('p_open',array()),
599f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
600f8369d7dSTobias Sarnowski            array('internalmedia',array('img.gif',NULL,NULL,NULL,NULL,'cache','linkonly')),
601f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
602f8369d7dSTobias Sarnowski            array('p_close',array()),
603f8369d7dSTobias Sarnowski            array('document_end',array()),
604f8369d7dSTobias Sarnowski        );
605f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
606f8369d7dSTobias Sarnowski    }
607f8369d7dSTobias Sarnowski
608f8369d7dSTobias Sarnowski    function testMediaNotImage() {
60936dc94bbSAndreas Gohr        $this->P->addMode('media',new Media());
610f8369d7dSTobias Sarnowski        $this->P->parse('Foo {{foo.txt?10x10|Some File}} Bar');
611f8369d7dSTobias Sarnowski        $calls = array (
612f8369d7dSTobias Sarnowski            array('document_start',array()),
613f8369d7dSTobias Sarnowski            array('p_open',array()),
614f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
615f8369d7dSTobias Sarnowski            array('internalmedia',array('foo.txt','Some File',null,10,10,'cache','details')),
616f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
617f8369d7dSTobias Sarnowski            array('p_close',array()),
618f8369d7dSTobias Sarnowski            array('document_end',array()),
619f8369d7dSTobias Sarnowski        );
620f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
621f8369d7dSTobias Sarnowski    }
622f8369d7dSTobias Sarnowski
623f8369d7dSTobias Sarnowski    function testMediaInternalLAlign() {
62436dc94bbSAndreas Gohr        $this->P->addMode('media',new Media());
625f8369d7dSTobias Sarnowski        $this->P->parse('Foo {{img.gif }} Bar');
626f8369d7dSTobias Sarnowski        $calls = array (
627f8369d7dSTobias Sarnowski            array('document_start',array()),
628f8369d7dSTobias Sarnowski            array('p_open',array()),
629f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
630f8369d7dSTobias Sarnowski            array('internalmedia',array('img.gif',NULL,'left',NULL,NULL,'cache','details')),
631f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
632f8369d7dSTobias Sarnowski            array('p_close',array()),
633f8369d7dSTobias Sarnowski            array('document_end',array()),
634f8369d7dSTobias Sarnowski        );
635f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
636f8369d7dSTobias Sarnowski    }
637f8369d7dSTobias Sarnowski
638f8369d7dSTobias Sarnowski    function testMediaInternalRAlign() {
63936dc94bbSAndreas Gohr        $this->P->addMode('media',new Media());
640f8369d7dSTobias Sarnowski        $this->P->parse('Foo {{ img.gif}} Bar');
641f8369d7dSTobias Sarnowski        $calls = array (
642f8369d7dSTobias Sarnowski            array('document_start',array()),
643f8369d7dSTobias Sarnowski            array('p_open',array()),
644f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
645f8369d7dSTobias Sarnowski            array('internalmedia',array('img.gif',NULL,'right',NULL,NULL,'cache','details')),
646f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
647f8369d7dSTobias Sarnowski            array('p_close',array()),
648f8369d7dSTobias Sarnowski            array('document_end',array()),
649f8369d7dSTobias Sarnowski        );
650f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
651f8369d7dSTobias Sarnowski    }
652f8369d7dSTobias Sarnowski
653f8369d7dSTobias Sarnowski    function testMediaInternalCenter() {
65436dc94bbSAndreas Gohr        $this->P->addMode('media',new Media());
655f8369d7dSTobias Sarnowski        $this->P->parse('Foo {{ img.gif }} Bar');
656f8369d7dSTobias Sarnowski        $calls = array (
657f8369d7dSTobias Sarnowski            array('document_start',array()),
658f8369d7dSTobias Sarnowski            array('p_open',array()),
659f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
660f8369d7dSTobias Sarnowski            array('internalmedia',array('img.gif',NULL,'center',NULL,NULL,'cache','details')),
661f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
662f8369d7dSTobias Sarnowski            array('p_close',array()),
663f8369d7dSTobias Sarnowski            array('document_end',array()),
664f8369d7dSTobias Sarnowski        );
665f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
666f8369d7dSTobias Sarnowski    }
667f8369d7dSTobias Sarnowski
668f8369d7dSTobias Sarnowski    function testMediaInternalParams() {
66936dc94bbSAndreas Gohr        $this->P->addMode('media',new Media());
670f8369d7dSTobias Sarnowski        $this->P->parse('Foo {{img.gif?50x100nocache}} Bar');
671f8369d7dSTobias Sarnowski        $calls = array (
672f8369d7dSTobias Sarnowski            array('document_start',array()),
673f8369d7dSTobias Sarnowski            array('p_open',array()),
674f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
675f8369d7dSTobias Sarnowski            array('internalmedia',array('img.gif',NULL,NULL,'50','100','nocache','details')),
676f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
677f8369d7dSTobias Sarnowski            array('p_close',array()),
678f8369d7dSTobias Sarnowski            array('document_end',array()),
679f8369d7dSTobias Sarnowski        );
680f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
681f8369d7dSTobias Sarnowski    }
682f8369d7dSTobias Sarnowski
683f8369d7dSTobias Sarnowski    function testMediaInternalTitle() {
68436dc94bbSAndreas Gohr        $this->P->addMode('media',new Media());
685f8369d7dSTobias Sarnowski        $this->P->parse('Foo {{img.gif?50x100|Some Image}} Bar');
686f8369d7dSTobias Sarnowski        $calls = array (
687f8369d7dSTobias Sarnowski            array('document_start',array()),
688f8369d7dSTobias Sarnowski            array('p_open',array()),
689f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
690f8369d7dSTobias Sarnowski            array('internalmedia',array('img.gif','Some Image',NULL,'50','100','cache','details')),
691f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
692f8369d7dSTobias Sarnowski            array('p_close',array()),
693f8369d7dSTobias Sarnowski            array('document_end',array()),
694f8369d7dSTobias Sarnowski        );
695f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
696f8369d7dSTobias Sarnowski    }
697f8369d7dSTobias Sarnowski
698f8369d7dSTobias Sarnowski    function testMediaExternal() {
69936dc94bbSAndreas Gohr        $this->P->addMode('media',new Media());
700f8369d7dSTobias Sarnowski        $this->P->parse('Foo {{http://www.google.com/img.gif}} Bar');
701f8369d7dSTobias Sarnowski        $calls = array (
702f8369d7dSTobias Sarnowski            array('document_start',array()),
703f8369d7dSTobias Sarnowski            array('p_open',array()),
704f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
705f8369d7dSTobias Sarnowski            array('externalmedia',array('http://www.google.com/img.gif',NULL,NULL,NULL,NULL,'cache','details')),
706f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
707f8369d7dSTobias Sarnowski            array('p_close',array()),
708f8369d7dSTobias Sarnowski            array('document_end',array()),
709f8369d7dSTobias Sarnowski        );
710f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
711f8369d7dSTobias Sarnowski    }
712f8369d7dSTobias Sarnowski
713f8369d7dSTobias Sarnowski    function testMediaExternalParams() {
71436dc94bbSAndreas Gohr        $this->P->addMode('media',new Media());
715f8369d7dSTobias Sarnowski        $this->P->parse('Foo {{http://www.google.com/img.gif?50x100nocache}} Bar');
716f8369d7dSTobias Sarnowski        $calls = array (
717f8369d7dSTobias Sarnowski            array('document_start',array()),
718f8369d7dSTobias Sarnowski            array('p_open',array()),
719f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
720f8369d7dSTobias Sarnowski            array('externalmedia',array('http://www.google.com/img.gif',NULL,NULL,'50','100','nocache','details')),
721f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
722f8369d7dSTobias Sarnowski            array('p_close',array()),
723f8369d7dSTobias Sarnowski            array('document_end',array()),
724f8369d7dSTobias Sarnowski        );
725f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
726f8369d7dSTobias Sarnowski    }
727f8369d7dSTobias Sarnowski
728f8369d7dSTobias Sarnowski    function testMediaExternalTitle() {
72936dc94bbSAndreas Gohr        $this->P->addMode('media',new Media());
730f8369d7dSTobias Sarnowski        $this->P->parse('Foo {{http://www.google.com/img.gif?50x100|Some Image}} Bar');
731f8369d7dSTobias Sarnowski        $calls = array (
732f8369d7dSTobias Sarnowski            array('document_start',array()),
733f8369d7dSTobias Sarnowski            array('p_open',array()),
734f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
735f8369d7dSTobias Sarnowski            array('externalmedia',
736f8369d7dSTobias Sarnowski            array('http://www.google.com/img.gif','Some Image',NULL,'50','100','cache','details')),
737f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
738f8369d7dSTobias Sarnowski            array('p_close',array()),
739f8369d7dSTobias Sarnowski            array('document_end',array()),
740f8369d7dSTobias Sarnowski        );
741f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
742f8369d7dSTobias Sarnowski    }
743f8369d7dSTobias Sarnowski
744f8369d7dSTobias Sarnowski    function testMediaInInternalLink() {
74536dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
746f8369d7dSTobias Sarnowski        $this->P->parse("Foo [[x:1:y:foo_bar:z|{{img.gif?10x20nocache|Some Image}}]] Bar");
747f8369d7dSTobias Sarnowski
748f8369d7dSTobias Sarnowski        $image = array(
749f8369d7dSTobias Sarnowski            'type'=>'internalmedia',
750f8369d7dSTobias Sarnowski            'src'=>'img.gif',
751f8369d7dSTobias Sarnowski            'title'=>'Some Image',
752f8369d7dSTobias Sarnowski            'align'=>NULL,
753f8369d7dSTobias Sarnowski            'width'=>10,
754f8369d7dSTobias Sarnowski            'height'=>20,
755f8369d7dSTobias Sarnowski            'cache'=>'nocache',
756f8369d7dSTobias Sarnowski            'linking'=>'details',
757f8369d7dSTobias Sarnowski        );
758f8369d7dSTobias Sarnowski
759f8369d7dSTobias Sarnowski        $calls = array (
760f8369d7dSTobias Sarnowski            array('document_start',array()),
761f8369d7dSTobias Sarnowski            array('p_open',array()),
762f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
763f8369d7dSTobias Sarnowski            array('internallink',array('x:1:y:foo_bar:z',$image)),
764f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
765f8369d7dSTobias Sarnowski            array('p_close',array()),
766f8369d7dSTobias Sarnowski            array('document_end',array()),
767f8369d7dSTobias Sarnowski        );
768f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
769f8369d7dSTobias Sarnowski    }
770f8369d7dSTobias Sarnowski
771f8369d7dSTobias Sarnowski    function testMediaNoImageInInternalLink() {
77236dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
773f8369d7dSTobias Sarnowski        $this->P->parse("Foo [[x:1:y:foo_bar:z|{{foo.txt?10x20nocache|Some Image}}]] Bar");
774f8369d7dSTobias Sarnowski
775f8369d7dSTobias Sarnowski        $image = array(
776f8369d7dSTobias Sarnowski            'type'=>'internalmedia',
777f8369d7dSTobias Sarnowski            'src'=>'foo.txt',
778f8369d7dSTobias Sarnowski            'title'=>'Some Image',
779f8369d7dSTobias Sarnowski            'align'=>NULL,
780f8369d7dSTobias Sarnowski            'width'=>10,
781f8369d7dSTobias Sarnowski            'height'=>20,
782f8369d7dSTobias Sarnowski            'cache'=>'nocache',
783f8369d7dSTobias Sarnowski            'linking'=>'details',
784f8369d7dSTobias Sarnowski        );
785f8369d7dSTobias Sarnowski
786f8369d7dSTobias Sarnowski        $calls = array (
787f8369d7dSTobias Sarnowski            array('document_start',array()),
788f8369d7dSTobias Sarnowski            array('p_open',array()),
789f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
790f8369d7dSTobias Sarnowski            array('internallink',array('x:1:y:foo_bar:z',$image)),
791f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
792f8369d7dSTobias Sarnowski            array('p_close',array()),
793f8369d7dSTobias Sarnowski            array('document_end',array()),
794f8369d7dSTobias Sarnowski        );
795f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
796f8369d7dSTobias Sarnowski    }
797f8369d7dSTobias Sarnowski
798f8369d7dSTobias Sarnowski    function testMediaInEmailLink() {
79936dc94bbSAndreas Gohr        $this->P->addMode('internallink',new Internallink());
800f8369d7dSTobias Sarnowski        $this->P->parse("Foo [[foo@example.com|{{img.gif?10x20nocache|Some Image}}]] Bar");
801f8369d7dSTobias Sarnowski
802f8369d7dSTobias Sarnowski        $image = array(
803f8369d7dSTobias Sarnowski            'type'=>'internalmedia',
804f8369d7dSTobias Sarnowski            'src'=>'img.gif',
805f8369d7dSTobias Sarnowski            'title'=>'Some Image',
806f8369d7dSTobias Sarnowski            'align'=>NULL,
807f8369d7dSTobias Sarnowski            'width'=>10,
808f8369d7dSTobias Sarnowski            'height'=>20,
809f8369d7dSTobias Sarnowski            'cache'=>'nocache',
810f8369d7dSTobias Sarnowski            'linking'=>'details',
811f8369d7dSTobias Sarnowski        );
812f8369d7dSTobias Sarnowski
813f8369d7dSTobias Sarnowski        $calls = array (
814f8369d7dSTobias Sarnowski            array('document_start',array()),
815f8369d7dSTobias Sarnowski            array('p_open',array()),
816f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
817f8369d7dSTobias Sarnowski            array('emaillink',array('foo@example.com',$image)),
818f8369d7dSTobias Sarnowski            array('cdata',array(' Bar')),
819f8369d7dSTobias Sarnowski            array('p_close',array()),
820f8369d7dSTobias Sarnowski            array('document_end',array()),
821f8369d7dSTobias Sarnowski        );
822f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
823f8369d7dSTobias Sarnowski    }
824f8369d7dSTobias Sarnowski
825f8369d7dSTobias Sarnowski    function testNestedMedia() {
82636dc94bbSAndreas Gohr        $this->P->addMode('media',new Media());
827f8369d7dSTobias Sarnowski        $this->P->parse('Foo {{img.gif|{{foo.gif|{{bar.gif|Bar}}}}}} Bar');
828f8369d7dSTobias Sarnowski        $calls = array (
829f8369d7dSTobias Sarnowski            array('document_start',array()),
830f8369d7dSTobias Sarnowski            array('p_open',array()),
831f8369d7dSTobias Sarnowski            array('cdata',array("\n".'Foo ')),
832f8369d7dSTobias Sarnowski            array('internalmedia',
833f8369d7dSTobias Sarnowski            array('img.gif','{{foo.gif|{{bar.gif|Bar',NULL,NULL,NULL,'cache','details')),
834f8369d7dSTobias Sarnowski            array('cdata',array('}}}} Bar')),
835f8369d7dSTobias Sarnowski            array('p_close',array()),
836f8369d7dSTobias Sarnowski            array('document_end',array()),
837f8369d7dSTobias Sarnowski        );
838f8369d7dSTobias Sarnowski        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
839f8369d7dSTobias Sarnowski    }
840f8369d7dSTobias Sarnowski
841f8369d7dSTobias Sarnowski}
842f8369d7dSTobias Sarnowski
843