xref: /dokuwiki/_test/tests/inc/parser/parser_code.test.php (revision e2d881567163b1ea21877d5d17e1247b3710e1af)
1f2bbf30bSGuy Brand<?php
2f2bbf30bSGuy Brandrequire_once 'parser.inc.php';
3f2bbf30bSGuy Brand
4*e2d88156SLarsDW223/**
5*e2d88156SLarsDW223 * Tests to ensure functionality of the <code> syntax tag.
6*e2d88156SLarsDW223 *
7*e2d88156SLarsDW223 * @group parser_code
8*e2d88156SLarsDW223 */
9f2bbf30bSGuy Brandclass TestOfDoku_Parser_Code extends TestOfDoku_Parser {
10f2bbf30bSGuy Brand
11f2bbf30bSGuy Brand    function setUp() {
12f2bbf30bSGuy Brand        parent::setUp();
13f2bbf30bSGuy Brand        $this->P->addMode('code',new Doku_Parser_Mode_Code());
14f2bbf30bSGuy Brand    }
15f2bbf30bSGuy Brand
16f2bbf30bSGuy Brand    function testCode() {
17f2bbf30bSGuy Brand        $this->P->parse('Foo <code>Test</code> Bar');
18f2bbf30bSGuy Brand        $calls = array (
19f2bbf30bSGuy Brand            array('document_start',array()),
20f2bbf30bSGuy Brand            array('p_open',array()),
21f2bbf30bSGuy Brand            array('cdata',array("\n".'Foo ')),
22f2bbf30bSGuy Brand            array('p_close',array()),
23f2bbf30bSGuy Brand            array('code',array('Test',null,null)),
24f2bbf30bSGuy Brand            array('p_open',array()),
25f2bbf30bSGuy Brand            array('cdata',array(' Bar')),
26f2bbf30bSGuy Brand            array('p_close',array()),
27f2bbf30bSGuy Brand            array('document_end',array()),
28f2bbf30bSGuy Brand        );
29f2bbf30bSGuy Brand        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
30f2bbf30bSGuy Brand    }
31f2bbf30bSGuy Brand
32f2bbf30bSGuy Brand    function testCodeBash() {
33f2bbf30bSGuy Brand        $this->P->parse('Foo <code bash>Test</code> Bar');
34f2bbf30bSGuy Brand        $calls = array (
35f2bbf30bSGuy Brand            array('document_start',array()),
36f2bbf30bSGuy Brand            array('p_open',array()),
37f2bbf30bSGuy Brand            array('cdata',array("\n".'Foo ')),
38f2bbf30bSGuy Brand            array('p_close',array()),
39f2bbf30bSGuy Brand            array('code',array('Test','bash',null)),
40f2bbf30bSGuy Brand            array('p_open',array()),
41f2bbf30bSGuy Brand            array('cdata',array(' Bar')),
42f2bbf30bSGuy Brand            array('p_close',array()),
43f2bbf30bSGuy Brand            array('document_end',array()),
44f2bbf30bSGuy Brand        );
45f2bbf30bSGuy Brand        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
46f2bbf30bSGuy Brand    }
47f2bbf30bSGuy Brand
48fdd9bab6SChristopher Smith    function testCodeDownload() {
49fdd9bab6SChristopher Smith        $this->P->parse('Foo <code bash script.sh>Test</code> Bar');
50fdd9bab6SChristopher Smith        $calls = array (
51fdd9bab6SChristopher Smith            array('document_start',array()),
52fdd9bab6SChristopher Smith            array('p_open',array()),
53fdd9bab6SChristopher Smith            array('cdata',array("\n".'Foo ')),
54fdd9bab6SChristopher Smith            array('p_close',array()),
55fdd9bab6SChristopher Smith            array('code',array('Test','bash','script.sh')),
56fdd9bab6SChristopher Smith            array('p_open',array()),
57fdd9bab6SChristopher Smith            array('cdata',array(' Bar')),
58fdd9bab6SChristopher Smith            array('p_close',array()),
59fdd9bab6SChristopher Smith            array('document_end',array()),
60fdd9bab6SChristopher Smith        );
61fdd9bab6SChristopher Smith        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
62fdd9bab6SChristopher Smith    }
63fdd9bab6SChristopher Smith
64f2bbf30bSGuy Brand    function testCodeToken() {
65f2bbf30bSGuy Brand        $this->P->parse('Foo <code2>Bar</code2><code>Test</code>');
66f2bbf30bSGuy Brand        $calls = array (
67f2bbf30bSGuy Brand            array('document_start',array()),
68f2bbf30bSGuy Brand            array('p_open',array()),
69f2bbf30bSGuy Brand            array('cdata',array("\n".'Foo <code2>Bar</code2>')),
70f2bbf30bSGuy Brand            array('p_close',array()),
71f2bbf30bSGuy Brand            array('code',array('Test',null,null)),
72f2bbf30bSGuy Brand            array('document_end',array()),
73f2bbf30bSGuy Brand        );
74f2bbf30bSGuy Brand        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
75f2bbf30bSGuy Brand    }
76*e2d88156SLarsDW223
77*e2d88156SLarsDW223    function testCodeOptionsArray_OneOption() {
78*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_line_numbers]>Test</code> Bar');
79*e2d88156SLarsDW223        $calls = array (
80*e2d88156SLarsDW223            array('document_start',array()),
81*e2d88156SLarsDW223            array('p_open',array()),
82*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
83*e2d88156SLarsDW223            array('p_close',array()),
84*e2d88156SLarsDW223            array('code',array('Test','C', null,
85*e2d88156SLarsDW223                               array('enable_line_numbers' => 1)
86*e2d88156SLarsDW223                               )),
87*e2d88156SLarsDW223            array('p_open',array()),
88*e2d88156SLarsDW223            array('cdata',array(' Bar')),
89*e2d88156SLarsDW223            array('p_close',array()),
90*e2d88156SLarsDW223            array('document_end',array()),
91*e2d88156SLarsDW223        );
92*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
93*e2d88156SLarsDW223    }
94*e2d88156SLarsDW223
95*e2d88156SLarsDW223    function testCodeOptionsArray_TwoOptions() {
96*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_line_numbers, highlight_lines_extra="3"]>Test</code> Bar');
97*e2d88156SLarsDW223        $calls = array (
98*e2d88156SLarsDW223            array('document_start',array()),
99*e2d88156SLarsDW223            array('p_open',array()),
100*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
101*e2d88156SLarsDW223            array('p_close',array()),
102*e2d88156SLarsDW223            array('code',array('Test','C', null,
103*e2d88156SLarsDW223                               array('enable_line_numbers' => 1,
104*e2d88156SLarsDW223                                     'highlight_lines_extra' => array(3)
105*e2d88156SLarsDW223                               ))),
106*e2d88156SLarsDW223            array('p_open',array()),
107*e2d88156SLarsDW223            array('cdata',array(' Bar')),
108*e2d88156SLarsDW223            array('p_close',array()),
109*e2d88156SLarsDW223            array('document_end',array()),
110*e2d88156SLarsDW223        );
111*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
112*e2d88156SLarsDW223    }
113*e2d88156SLarsDW223
114*e2d88156SLarsDW223    function testCodeOptionsArray_UnknownOption() {
115*e2d88156SLarsDW223        $this->P->parse('Foo <code C [unknown="I will be deleted/ignored!"]>Test</code> Bar');
116*e2d88156SLarsDW223        $calls = array (
117*e2d88156SLarsDW223            array('document_start',array()),
118*e2d88156SLarsDW223            array('p_open',array()),
119*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
120*e2d88156SLarsDW223            array('p_close',array()),
121*e2d88156SLarsDW223            array('code',array('Test','C', null, null)),
122*e2d88156SLarsDW223            array('p_open',array()),
123*e2d88156SLarsDW223            array('cdata',array(' Bar')),
124*e2d88156SLarsDW223            array('p_close',array()),
125*e2d88156SLarsDW223            array('document_end',array()),
126*e2d88156SLarsDW223        );
127*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
128*e2d88156SLarsDW223    }
129*e2d88156SLarsDW223
130*e2d88156SLarsDW223    function testCodeOptionsArray_EnableLineNumbers1() {
131*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_line_numbers]>Test</code> Bar');
132*e2d88156SLarsDW223        $calls = array (
133*e2d88156SLarsDW223            array('document_start',array()),
134*e2d88156SLarsDW223            array('p_open',array()),
135*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
136*e2d88156SLarsDW223            array('p_close',array()),
137*e2d88156SLarsDW223            array('code',array('Test','C', null,
138*e2d88156SLarsDW223                               array('enable_line_numbers' => 1)
139*e2d88156SLarsDW223                               )),
140*e2d88156SLarsDW223            array('p_open',array()),
141*e2d88156SLarsDW223            array('cdata',array(' Bar')),
142*e2d88156SLarsDW223            array('p_close',array()),
143*e2d88156SLarsDW223            array('document_end',array()),
144*e2d88156SLarsDW223        );
145*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
146*e2d88156SLarsDW223    }
147*e2d88156SLarsDW223
148*e2d88156SLarsDW223    function testCodeOptionsArray_EnableLineNumbers2() {
149*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_line_numbers="1"]>Test</code> Bar');
150*e2d88156SLarsDW223        $calls = array (
151*e2d88156SLarsDW223            array('document_start',array()),
152*e2d88156SLarsDW223            array('p_open',array()),
153*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
154*e2d88156SLarsDW223            array('p_close',array()),
155*e2d88156SLarsDW223            array('code',array('Test','C', null,
156*e2d88156SLarsDW223                               array('enable_line_numbers' => 1)
157*e2d88156SLarsDW223                               )),
158*e2d88156SLarsDW223            array('p_open',array()),
159*e2d88156SLarsDW223            array('cdata',array(' Bar')),
160*e2d88156SLarsDW223            array('p_close',array()),
161*e2d88156SLarsDW223            array('document_end',array()),
162*e2d88156SLarsDW223        );
163*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
164*e2d88156SLarsDW223    }
165*e2d88156SLarsDW223
166*e2d88156SLarsDW223    function testCodeOptionsArray_EnableLineNumbers3() {
167*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_line_numbers="0"]>Test</code> Bar');
168*e2d88156SLarsDW223        $calls = array (
169*e2d88156SLarsDW223            array('document_start',array()),
170*e2d88156SLarsDW223            array('p_open',array()),
171*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
172*e2d88156SLarsDW223            array('p_close',array()),
173*e2d88156SLarsDW223            array('code',array('Test','C', null,
174*e2d88156SLarsDW223                               array('enable_line_numbers' => 0)
175*e2d88156SLarsDW223                               )),
176*e2d88156SLarsDW223            array('p_open',array()),
177*e2d88156SLarsDW223            array('cdata',array(' Bar')),
178*e2d88156SLarsDW223            array('p_close',array()),
179*e2d88156SLarsDW223            array('document_end',array()),
180*e2d88156SLarsDW223        );
181*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
182*e2d88156SLarsDW223    }
183*e2d88156SLarsDW223
184*e2d88156SLarsDW223    function testCodeOptionsArray_EnableLineNumbers4() {
185*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_line_numbers=""]>Test</code> Bar');
186*e2d88156SLarsDW223        $calls = array (
187*e2d88156SLarsDW223            array('document_start',array()),
188*e2d88156SLarsDW223            array('p_open',array()),
189*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
190*e2d88156SLarsDW223            array('p_close',array()),
191*e2d88156SLarsDW223            array('code',array('Test','C', null,
192*e2d88156SLarsDW223                               array('enable_line_numbers' => 1)
193*e2d88156SLarsDW223                               )),
194*e2d88156SLarsDW223            array('p_open',array()),
195*e2d88156SLarsDW223            array('cdata',array(' Bar')),
196*e2d88156SLarsDW223            array('p_close',array()),
197*e2d88156SLarsDW223            array('document_end',array()),
198*e2d88156SLarsDW223        );
199*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
200*e2d88156SLarsDW223    }
201*e2d88156SLarsDW223
202*e2d88156SLarsDW223    function testCodeOptionsArray_HighlightLinesExtra1() {
203*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_line_numbers, highlight_lines_extra="42, 123, 456, 789"]>Test</code> Bar');
204*e2d88156SLarsDW223        $calls = array (
205*e2d88156SLarsDW223            array('document_start',array()),
206*e2d88156SLarsDW223            array('p_open',array()),
207*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
208*e2d88156SLarsDW223            array('p_close',array()),
209*e2d88156SLarsDW223            array('code',array('Test','C', null,
210*e2d88156SLarsDW223                               array('enable_line_numbers' => 1,
211*e2d88156SLarsDW223                                     'highlight_lines_extra' => array(42, 123, 456, 789)
212*e2d88156SLarsDW223                               ))),
213*e2d88156SLarsDW223            array('p_open',array()),
214*e2d88156SLarsDW223            array('cdata',array(' Bar')),
215*e2d88156SLarsDW223            array('p_close',array()),
216*e2d88156SLarsDW223            array('document_end',array()),
217*e2d88156SLarsDW223        );
218*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
219*e2d88156SLarsDW223    }
220*e2d88156SLarsDW223
221*e2d88156SLarsDW223    function testCodeOptionsArray_HighlightLinesExtra2() {
222*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_line_numbers, highlight_lines_extra]>Test</code> Bar');
223*e2d88156SLarsDW223        $calls = array (
224*e2d88156SLarsDW223            array('document_start',array()),
225*e2d88156SLarsDW223            array('p_open',array()),
226*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
227*e2d88156SLarsDW223            array('p_close',array()),
228*e2d88156SLarsDW223            array('code',array('Test','C', null,
229*e2d88156SLarsDW223                               array('enable_line_numbers' => 1,
230*e2d88156SLarsDW223                                     'highlight_lines_extra' => array(1))
231*e2d88156SLarsDW223                               )),
232*e2d88156SLarsDW223            array('p_open',array()),
233*e2d88156SLarsDW223            array('cdata',array(' Bar')),
234*e2d88156SLarsDW223            array('p_close',array()),
235*e2d88156SLarsDW223            array('document_end',array()),
236*e2d88156SLarsDW223        );
237*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
238*e2d88156SLarsDW223    }
239*e2d88156SLarsDW223
240*e2d88156SLarsDW223    function testCodeOptionsArray_HighlightLinesExtra3() {
241*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_line_numbers, highlight_lines_extra=""]>Test</code> Bar');
242*e2d88156SLarsDW223        $calls = array (
243*e2d88156SLarsDW223            array('document_start',array()),
244*e2d88156SLarsDW223            array('p_open',array()),
245*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
246*e2d88156SLarsDW223            array('p_close',array()),
247*e2d88156SLarsDW223            array('code',array('Test','C', null,
248*e2d88156SLarsDW223                               array('enable_line_numbers' => 1,
249*e2d88156SLarsDW223                                     'highlight_lines_extra' => array(1))
250*e2d88156SLarsDW223                               )),
251*e2d88156SLarsDW223            array('p_open',array()),
252*e2d88156SLarsDW223            array('cdata',array(' Bar')),
253*e2d88156SLarsDW223            array('p_close',array()),
254*e2d88156SLarsDW223            array('document_end',array()),
255*e2d88156SLarsDW223        );
256*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
257*e2d88156SLarsDW223    }
258*e2d88156SLarsDW223
259*e2d88156SLarsDW223    function testCodeOptionsArray_StartLineNumbersAt1() {
260*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_line_numbers, [enable_line_numbers, start_line_numbers_at="42"]]>Test</code> Bar');
261*e2d88156SLarsDW223        $calls = array (
262*e2d88156SLarsDW223            array('document_start',array()),
263*e2d88156SLarsDW223            array('p_open',array()),
264*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
265*e2d88156SLarsDW223            array('p_close',array()),
266*e2d88156SLarsDW223            array('code',array('Test','C', null,
267*e2d88156SLarsDW223                               array('enable_line_numbers' => 1,
268*e2d88156SLarsDW223                                     'start_line_numbers_at' => 42)
269*e2d88156SLarsDW223                               )),
270*e2d88156SLarsDW223            array('p_open',array()),
271*e2d88156SLarsDW223            array('cdata',array(' Bar')),
272*e2d88156SLarsDW223            array('p_close',array()),
273*e2d88156SLarsDW223            array('document_end',array()),
274*e2d88156SLarsDW223        );
275*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
276*e2d88156SLarsDW223    }
277*e2d88156SLarsDW223
278*e2d88156SLarsDW223    function testCodeOptionsArray_StartLineNumbersAt2() {
279*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_line_numbers, [enable_line_numbers, start_line_numbers_at]]>Test</code> Bar');
280*e2d88156SLarsDW223        $calls = array (
281*e2d88156SLarsDW223            array('document_start',array()),
282*e2d88156SLarsDW223            array('p_open',array()),
283*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
284*e2d88156SLarsDW223            array('p_close',array()),
285*e2d88156SLarsDW223            array('code',array('Test','C', null,
286*e2d88156SLarsDW223                               array('enable_line_numbers' => 1,
287*e2d88156SLarsDW223                                     'start_line_numbers_at' => 1)
288*e2d88156SLarsDW223                               )),
289*e2d88156SLarsDW223            array('p_open',array()),
290*e2d88156SLarsDW223            array('cdata',array(' Bar')),
291*e2d88156SLarsDW223            array('p_close',array()),
292*e2d88156SLarsDW223            array('document_end',array()),
293*e2d88156SLarsDW223        );
294*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
295*e2d88156SLarsDW223    }
296*e2d88156SLarsDW223
297*e2d88156SLarsDW223    function testCodeOptionsArray_StartLineNumbersAt3() {
298*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_line_numbers, [enable_line_numbers, start_line_numbers_at=""]]>Test</code> Bar');
299*e2d88156SLarsDW223        $calls = array (
300*e2d88156SLarsDW223            array('document_start',array()),
301*e2d88156SLarsDW223            array('p_open',array()),
302*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
303*e2d88156SLarsDW223            array('p_close',array()),
304*e2d88156SLarsDW223            array('code',array('Test','C', null,
305*e2d88156SLarsDW223                               array('enable_line_numbers' => 1,
306*e2d88156SLarsDW223                                     'start_line_numbers_at' => 1)
307*e2d88156SLarsDW223                               )),
308*e2d88156SLarsDW223            array('p_open',array()),
309*e2d88156SLarsDW223            array('cdata',array(' Bar')),
310*e2d88156SLarsDW223            array('p_close',array()),
311*e2d88156SLarsDW223            array('document_end',array()),
312*e2d88156SLarsDW223        );
313*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
314*e2d88156SLarsDW223    }
315*e2d88156SLarsDW223
316*e2d88156SLarsDW223    function testCodeOptionsArray_EnableKeywordLinks1() {
317*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_keyword_links="false"]>Test</code> Bar');
318*e2d88156SLarsDW223        $calls = array (
319*e2d88156SLarsDW223            array('document_start',array()),
320*e2d88156SLarsDW223            array('p_open',array()),
321*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
322*e2d88156SLarsDW223            array('p_close',array()),
323*e2d88156SLarsDW223            array('code',array('Test','C', null,
324*e2d88156SLarsDW223                               array('enable_keyword_links' => false)
325*e2d88156SLarsDW223                               )),
326*e2d88156SLarsDW223            array('p_open',array()),
327*e2d88156SLarsDW223            array('cdata',array(' Bar')),
328*e2d88156SLarsDW223            array('p_close',array()),
329*e2d88156SLarsDW223            array('document_end',array()),
330*e2d88156SLarsDW223        );
331*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
332*e2d88156SLarsDW223    }
333*e2d88156SLarsDW223
334*e2d88156SLarsDW223    function testCodeOptionsArray_EnableKeywordLinks2() {
335*e2d88156SLarsDW223        $this->P->parse('Foo <code C [enable_keyword_links="true"]>Test</code> Bar');
336*e2d88156SLarsDW223        $calls = array (
337*e2d88156SLarsDW223            array('document_start',array()),
338*e2d88156SLarsDW223            array('p_open',array()),
339*e2d88156SLarsDW223            array('cdata',array("\n".'Foo ')),
340*e2d88156SLarsDW223            array('p_close',array()),
341*e2d88156SLarsDW223            array('code',array('Test','C', null,
342*e2d88156SLarsDW223                               array('enable_keyword_links' => true)
343*e2d88156SLarsDW223                               )),
344*e2d88156SLarsDW223            array('p_open',array()),
345*e2d88156SLarsDW223            array('cdata',array(' Bar')),
346*e2d88156SLarsDW223            array('p_close',array()),
347*e2d88156SLarsDW223            array('document_end',array()),
348*e2d88156SLarsDW223        );
349*e2d88156SLarsDW223        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
350*e2d88156SLarsDW223    }
351*e2d88156SLarsDW223
352f2bbf30bSGuy Brand}
353f2bbf30bSGuy Brand
354