xref: /dokuwiki/_test/tests/inc/parser/parser_links.test.php (revision 36c8a75c5c35c94caeb5306881315eff37f20a8d)
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() {
171*36c8a75cSPhy        $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 ')),
614f8369d7dSTobias Sarnowski            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 ')),
629f8369d7dSTobias Sarnowski            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 ')),
644f8369d7dSTobias Sarnowski            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 ')),
659f8369d7dSTobias Sarnowski            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 ')),
674f8369d7dSTobias Sarnowski            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 ')),
689f8369d7dSTobias Sarnowski            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 ')),
704f8369d7dSTobias Sarnowski            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 ')),
719f8369d7dSTobias Sarnowski            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 ')),
734f8369d7dSTobias Sarnowski            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 ')),
749f8369d7dSTobias Sarnowski            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',
765f8369d7dSTobias Sarnowski            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',
785f8369d7dSTobias Sarnowski            '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',
812f8369d7dSTobias Sarnowski            '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',
839f8369d7dSTobias Sarnowski            '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',
862f8369d7dSTobias Sarnowski            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