xref: /dokuwiki/_test/tests/inc/parser/parser_replacements.test.php (revision b2a83e66e70296a7a38e7524050a7a4268cc36f6)
1<?php
2require_once 'parser.inc.php';
3
4class TestOfDoku_Parser_Replacements extends TestOfDoku_Parser {
5
6    function testSingleAcronym() {
7        $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOOBAR')));
8        $this->P->parse('abc FOOBAR xyz');
9
10        $calls = array (
11            array('document_start',array()),
12            array('p_open',array()),
13            array('cdata',array("\n".'abc ')),
14            array('acronym',array('FOOBAR')),
15            array('cdata',array(' xyz')),
16            array('p_close',array()),
17            array('document_end',array()),
18        );
19
20        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
21    }
22
23    function testAlmostAnAcronym() {
24        $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOOBAR')));
25        $this->P->parse('abcFOOBARxyz');
26
27        $calls = array (
28            array('document_start',array()),
29            array('p_open',array()),
30            array('cdata',array("\n".'abcFOOBARxyz')),
31            array('p_close',array()),
32            array('document_end',array()),
33        );
34
35        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
36    }
37
38    function testPickAcronymCorrectly() {
39        $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOO')));
40        $this->P->parse('FOOBAR FOO');
41
42        $calls = array (
43            array('document_start',array()),
44            array('p_open',array()),
45            array('cdata',array("\n".'FOOBAR ')),
46            array('acronym',array('FOO')),
47            array('cdata',array('')),
48            array('p_close',array()),
49            array('document_end',array()),
50        );
51
52        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
53    }
54
55    function testMultipleAcronyms() {
56        $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOO','BAR')));
57        $this->P->parse('abc FOO def BAR xyz');
58
59        $calls = array (
60            array('document_start',array()),
61            array('p_open',array()),
62            array('cdata',array("\n".'abc ')),
63            array('acronym',array('FOO')),
64            array('cdata',array(' def ')),
65            array('acronym',array('BAR')),
66            array('cdata',array(' xyz')),
67            array('p_close',array()),
68            array('document_end',array()),
69        );
70
71        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
72
73    }
74
75    function testMultipleAcronymsWithSubset1() {
76        $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('FOO','A.FOO','FOO.1','A.FOO.1')));
77        $this->P->parse('FOO A.FOO FOO.1 A.FOO.1');
78
79        $calls = array (
80            array('document_start',array()),
81            array('p_open',array()),
82            array('cdata',array("\n")),
83            array('acronym',array('FOO')),
84            array('cdata',array(" ")),
85            array('acronym',array('A.FOO')),
86            array('cdata',array(" ")),
87            array('acronym',array('FOO.1')),
88            array('cdata',array(" ")),
89            array('acronym',array('A.FOO.1')),
90            array('cdata',array('')),
91            array('p_close',array()),
92            array('document_end',array()),
93        );
94
95        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
96    }
97
98    function testMultipleAcronymsWithSubset2() {
99        $this->P->addMode('acronym',new Doku_Parser_Mode_Acronym(array('A.FOO.1','FOO.1','A.FOO','FOO')));
100        $this->P->parse('FOO A.FOO FOO.1 A.FOO.1');
101
102        $calls = array (
103            array('document_start',array()),
104            array('p_open',array()),
105            array('cdata',array("\n")),
106            array('acronym',array('FOO')),
107            array('cdata',array(" ")),
108            array('acronym',array('A.FOO')),
109            array('cdata',array(" ")),
110            array('acronym',array('FOO.1')),
111            array('cdata',array(" ")),
112            array('acronym',array('A.FOO.1')),
113            array('cdata',array('')),
114            array('p_close',array()),
115            array('document_end',array()),
116        );
117
118        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
119    }
120
121    function testSingleSmileyFail() {
122        $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)')));
123        $this->P->parse('abc:-)xyz');
124
125        $calls = array (
126            array('document_start',array()),
127            array('p_open',array()),
128            array('cdata',array("\nabc:-)xyz")),
129            array('p_close',array()),
130            array('document_end',array()),
131        );
132
133        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
134    }
135
136    function testSingleSmiley() {
137        $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)')));
138        $this->P->parse('abc :-) xyz');
139
140        $calls = array (
141            array('document_start',array()),
142            array('p_open',array()),
143            array('cdata',array("\n".'abc ')),
144            array('smiley',array(':-)')),
145            array('cdata',array(' xyz')),
146            array('p_close',array()),
147            array('document_end',array()),
148        );
149
150        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
151    }
152
153    function testMultipleSmileysFail() {
154        $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)','^_^')));
155        $this->P->parse('abc:-)x^_^yz');
156
157        $calls = array (
158            array('document_start',array()),
159            array('p_open',array()),
160            array('cdata',array("\nabc:-)x^_^yz")),
161            array('p_close',array()),
162            array('document_end',array()),
163        );
164
165        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
166    }
167
168    function testMultipleSmileys() {
169        $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-)','^_^')));
170        $this->P->parse('abc :-) x ^_^ yz');
171
172        $calls = array (
173            array('document_start',array()),
174            array('p_open',array()),
175            array('cdata',array("\n".'abc ')),
176            array('smiley',array(':-)')),
177            array('cdata',array(' x ')),
178            array('smiley',array('^_^')),
179            array('cdata',array(' yz')),
180            array('p_close',array()),
181            array('document_end',array()),
182        );
183
184        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
185    }
186
187    function testBackslashSmileyFail() {
188        // This smiley is really :-\\ but escaping makes like interesting
189        $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-\\\\')));
190        $this->P->parse('abc:-\\\xyz');
191
192        $calls = array (
193            array('document_start',array()),
194            array('p_open',array()),
195            array('cdata',array("\nabc".':-\\\\'."xyz")),
196            array('p_close',array()),
197            array('document_end',array()),
198        );
199
200        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
201    }
202
203    function testBackslashSmiley() {
204        // This smiley is really :-\\ but escaping makes like interesting
205        $this->P->addMode('smiley',new Doku_Parser_Mode_Smiley(array(':-\\\\')));
206        $this->P->parse('abc :-\\\ xyz');
207
208        $calls = array (
209            array('document_start',array()),
210            array('p_open',array()),
211            array('cdata',array("\n".'abc ')),
212            array('smiley',array(':-\\\\')),
213            array('cdata',array(' xyz')),
214            array('p_close',array()),
215            array('document_end',array()),
216        );
217
218        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
219    }
220
221    function testSingleWordblock() {
222        $this->P->addMode('wordblock',new Doku_Parser_Mode_Wordblock(array('CAT')));
223        $this->P->parse('abc CAT xyz');
224
225        $calls = array (
226            array('document_start',array()),
227            array('p_open',array()),
228            array('cdata',array("\n".'abc ')),
229            array('wordblock',array('CAT')),
230            array('cdata',array(' xyz')),
231            array('p_close',array()),
232            array('document_end',array()),
233        );
234
235        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
236    }
237
238    function testWordblockCase() {
239        $this->P->addMode('wordblock',new Doku_Parser_Mode_Wordblock(array('CAT')));
240        $this->P->parse('abc cat xyz');
241
242        $calls = array (
243            array('document_start',array()),
244            array('p_open',array()),
245            array('cdata',array("\n".'abc ')),
246            array('wordblock',array('cat')),
247            array('cdata',array(' xyz')),
248            array('p_close',array()),
249            array('document_end',array()),
250        );
251
252        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
253    }
254
255    function testMultipleWordblock() {
256        $this->P->addMode('wordblock',new Doku_Parser_Mode_Wordblock(array('CAT','dog')));
257        $this->P->parse('abc cat x DOG yz');
258
259        $calls = array (
260            array('document_start',array()),
261            array('p_open',array()),
262            array('cdata',array("\n".'abc ')),
263            array('wordblock',array('cat')),
264            array('cdata',array(' x ')),
265            array('wordblock',array('DOG')),
266            array('cdata',array(' yz')),
267            array('p_close',array()),
268            array('document_end',array()),
269        );
270
271        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
272    }
273
274    function testSingleEntity() {
275        $this->P->addMode('entity',new Doku_Parser_Mode_Entity(array('->')));
276        $this->P->parse('x -> y');
277
278        $calls = array (
279            array('document_start',array()),
280            array('p_open',array()),
281            array('cdata',array("\n".'x ')),
282            array('entity',array('->')),
283            array('cdata',array(' y')),
284            array('p_close',array()),
285            array('document_end',array()),
286        );
287
288        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
289    }
290
291    function testMultipleEntities() {
292        $this->P->addMode('entity',new Doku_Parser_Mode_Entity(array('->','<-')));
293        $this->P->parse('x -> y <- z');
294
295        $calls = array (
296            array('document_start',array()),
297            array('p_open',array()),
298            array('cdata',array("\n".'x ')),
299            array('entity',array('->')),
300            array('cdata',array(' y ')),
301            array('entity',array('<-')),
302            array('cdata',array(' z')),
303            array('p_close',array()),
304            array('document_end',array()),
305        );
306
307        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
308    }
309
310    function testMultiplyEntity() {
311        $this->P->addMode('multiplyentity',new Doku_Parser_Mode_MultiplyEntity());
312        $this->P->parse('Foo 10x20 Bar');
313
314        $calls = array (
315            array('document_start',array()),
316            array('p_open',array()),
317            array('cdata',array("\n".'Foo ')),
318            array('multiplyentity',array(10,20)),
319            array('cdata',array(' Bar')),
320            array('p_close',array()),
321            array('document_end',array()),
322        );
323
324        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
325    }
326
327    function testMultiplyEntityHex() {
328    	// the multiply entity pattern should not match hex numbers, eg. 0x123
329        $this->P->addMode('multiplyentity',new Doku_Parser_Mode_MultiplyEntity());
330        $this->P->parse('Foo 0x123 Bar');
331
332        $calls = array (
333            array('document_start',array()),
334            array('p_open',array()),
335            array('cdata',array("\n".'Foo 0x123 Bar')),
336            array('p_close',array()),
337            array('document_end',array()),
338        );
339
340        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
341    }
342
343    function testHR() {
344        $this->P->addMode('hr',new Doku_Parser_Mode_HR());
345        $this->P->parse("Foo \n ---- \n Bar");
346
347        $calls = array (
348            array('document_start',array()),
349            array('p_open',array()),
350            array('cdata',array("\n".'Foo ')),
351            array('p_close',array()),
352            array('hr',array()),
353            array('p_open',array()),
354            array('cdata',array("\n Bar")),
355            array('p_close',array()),
356            array('document_end',array()),
357        );
358        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
359    }
360
361    function testHREol() {
362        $this->P->addMode('hr',new Doku_Parser_Mode_HR());
363        $this->P->parse("Foo \n----\n Bar");
364
365        $calls = array (
366            array('document_start',array()),
367            array('p_open',array()),
368            array('cdata',array("\n".'Foo ')),
369            array('p_close',array()),
370            array('hr',array()),
371            array('p_open',array()),
372            array('cdata',array("\n Bar")),
373            array('p_close',array()),
374            array('document_end',array()),
375        );
376        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
377    }
378}
379
380