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