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