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