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