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