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