xref: /dokuwiki/_test/tests/Parsing/ParserMode/ReplacementsTest.php (revision 2e43b79909f3bc04928779d886f68c1242b5d436)
1<?php
2
3namespace dokuwiki\test\Parsing\ParserMode;
4
5use dokuwiki\Parsing\ParserMode\Acronym;
6use dokuwiki\Parsing\ParserMode\Entity;
7use dokuwiki\Parsing\ParserMode\Multiplyentity;
8use dokuwiki\Parsing\ParserMode\Smiley;
9use dokuwiki\Parsing\ParserMode\Wordblock;
10
11class ReplacementsTest extends ParserTestBase
12{
13
14    function testSingleAcronym() {
15        $this->P->addMode('acronym',new Acronym(['FOOBAR']));
16        $this->P->parse('abc FOOBAR xyz');
17        $calls = [
18            ['document_start',[]],
19            ['p_open',[]],
20            ['cdata',["\n".'abc ']],
21            ['acronym',['FOOBAR']],
22            ['cdata',[' xyz']],
23            ['p_close',[]],
24            ['document_end',[]],
25        ];
26        $this->assertCalls($calls, $this->H->calls);
27    }
28
29    function testAlmostAnAcronym() {
30        $this->P->addMode('acronym',new Acronym(['FOOBAR']));
31        $this->P->parse('abcFOOBARxyz');
32        $calls = [
33            ['document_start',[]],
34            ['p_open',[]],
35            ['cdata',["\n".'abcFOOBARxyz']],
36            ['p_close',[]],
37            ['document_end',[]],
38        ];
39        $this->assertCalls($calls, $this->H->calls);
40    }
41
42    function testPickAcronymCorrectly() {
43        $this->P->addMode('acronym',new Acronym(['FOO']));
44        $this->P->parse('FOOBAR FOO');
45        $calls = [
46            ['document_start',[]],
47            ['p_open',[]],
48            ['cdata',["\n".'FOOBAR ']],
49            ['acronym',['FOO']],
50            ['cdata',['']],
51            ['p_close',[]],
52            ['document_end',[]],
53        ];
54        $this->assertCalls($calls, $this->H->calls);
55    }
56
57    function testMultipleAcronyms() {
58        $this->P->addMode('acronym',new Acronym(['FOO','BAR']));
59        $this->P->parse('abc FOO def BAR xyz');
60        $calls = [
61            ['document_start',[]],
62            ['p_open',[]],
63            ['cdata',["\n".'abc ']],
64            ['acronym',['FOO']],
65            ['cdata',[' def ']],
66            ['acronym',['BAR']],
67            ['cdata',[' xyz']],
68            ['p_close',[]],
69            ['document_end',[]],
70        ];
71        $this->assertCalls($calls, $this->H->calls);
72    }
73
74    function testMultipleAcronymsWithSubset1() {
75        $this->P->addMode('acronym',new Acronym(['FOO','A.FOO','FOO.1','A.FOO.1']));
76        $this->P->parse('FOO A.FOO FOO.1 A.FOO.1');
77        $calls = [
78            ['document_start',[]],
79            ['p_open',[]],
80            ['cdata',["\n"]],
81            ['acronym',['FOO']],
82            ['cdata',[" "]],
83            ['acronym',['A.FOO']],
84            ['cdata',[" "]],
85            ['acronym',['FOO.1']],
86            ['cdata',[" "]],
87            ['acronym',['A.FOO.1']],
88            ['cdata',['']],
89            ['p_close',[]],
90            ['document_end',[]],
91        ];
92        $this->assertCalls($calls, $this->H->calls);
93    }
94
95    function testMultipleAcronymsWithSubset2() {
96        $this->P->addMode('acronym',new Acronym(['A.FOO.1','FOO.1','A.FOO','FOO']));
97        $this->P->parse('FOO A.FOO FOO.1 A.FOO.1');
98        $calls = [
99            ['document_start',[]],
100            ['p_open',[]],
101            ['cdata',["\n"]],
102            ['acronym',['FOO']],
103            ['cdata',[" "]],
104            ['acronym',['A.FOO']],
105            ['cdata',[" "]],
106            ['acronym',['FOO.1']],
107            ['cdata',[" "]],
108            ['acronym',['A.FOO.1']],
109            ['cdata',['']],
110            ['p_close',[]],
111            ['document_end',[]],
112        ];
113        $this->assertCalls($calls, $this->H->calls);
114    }
115
116    function testSingleSmileyFail() {
117        $this->P->addMode('smiley',new Smiley([':-)']));
118        $this->P->parse('abc:-)xyz');
119        $calls = [
120            ['document_start',[]],
121            ['p_open',[]],
122            ['cdata',["\nabc:-)xyz"]],
123            ['p_close',[]],
124            ['document_end',[]],
125        ];
126        $this->assertCalls($calls, $this->H->calls);
127    }
128
129    function testSingleSmiley() {
130        $this->P->addMode('smiley',new Smiley([':-)']));
131        $this->P->parse('abc :-) xyz');
132        $calls = [
133            ['document_start',[]],
134            ['p_open',[]],
135            ['cdata',["\n".'abc ']],
136            ['smiley',[':-)']],
137            ['cdata',[' xyz']],
138            ['p_close',[]],
139            ['document_end',[]],
140        ];
141        $this->assertCalls($calls, $this->H->calls);
142    }
143
144    function testMultipleSmileysFail() {
145        $this->P->addMode('smiley',new Smiley([':-)','^_^']));
146        $this->P->parse('abc:-)x^_^yz');
147        $calls = [
148            ['document_start',[]],
149            ['p_open',[]],
150            ['cdata',["\nabc:-)x^_^yz"]],
151            ['p_close',[]],
152            ['document_end',[]],
153        ];
154        $this->assertCalls($calls, $this->H->calls);
155    }
156
157    function testMultipleSmileys() {
158        $this->P->addMode('smiley',new Smiley([':-)','^_^']));
159        $this->P->parse('abc :-) x ^_^ yz');
160        $calls = [
161            ['document_start',[]],
162            ['p_open',[]],
163            ['cdata',["\n".'abc ']],
164            ['smiley',[':-)']],
165            ['cdata',[' x ']],
166            ['smiley',['^_^']],
167            ['cdata',[' yz']],
168            ['p_close',[]],
169            ['document_end',[]],
170        ];
171        $this->assertCalls($calls, $this->H->calls);
172    }
173
174    function testBackslashSmileyFail() {
175        $this->P->addMode('smiley',new Smiley([':-\\\\']));
176        $this->P->parse('abc:-\\\xyz');
177        $calls = [
178            ['document_start',[]],
179            ['p_open',[]],
180            ['cdata',["\nabc".':-\\\\'."xyz"]],
181            ['p_close',[]],
182            ['document_end',[]],
183        ];
184        $this->assertCalls($calls, $this->H->calls);
185    }
186
187    function testBackslashSmiley() {
188        $this->P->addMode('smiley',new Smiley([':-\\\\']));
189        $this->P->parse('abc :-\\\ xyz');
190        $calls = [
191            ['document_start',[]],
192            ['p_open',[]],
193            ['cdata',["\n".'abc ']],
194            ['smiley',[':-\\\\']],
195            ['cdata',[' xyz']],
196            ['p_close',[]],
197            ['document_end',[]],
198        ];
199        $this->assertCalls($calls, $this->H->calls);
200    }
201
202    function testSingleWordblock() {
203        $this->P->addMode('wordblock',new Wordblock(['CAT']));
204        $this->P->parse('abc CAT xyz');
205        $calls = [
206            ['document_start',[]],
207            ['p_open',[]],
208            ['cdata',["\n".'abc ']],
209            ['wordblock',['CAT']],
210            ['cdata',[' xyz']],
211            ['p_close',[]],
212            ['document_end',[]],
213        ];
214        $this->assertCalls($calls, $this->H->calls);
215    }
216
217    function testWordblockCase() {
218        $this->P->addMode('wordblock',new Wordblock(['CAT']));
219        $this->P->parse('abc cat xyz');
220        $calls = [
221            ['document_start',[]],
222            ['p_open',[]],
223            ['cdata',["\n".'abc ']],
224            ['wordblock',['cat']],
225            ['cdata',[' xyz']],
226            ['p_close',[]],
227            ['document_end',[]],
228        ];
229        $this->assertCalls($calls, $this->H->calls);
230    }
231
232    function testMultipleWordblock() {
233        $this->P->addMode('wordblock',new Wordblock(['CAT','dog']));
234        $this->P->parse('abc cat x DOG yz');
235        $calls = [
236            ['document_start',[]],
237            ['p_open',[]],
238            ['cdata',["\n".'abc ']],
239            ['wordblock',['cat']],
240            ['cdata',[' x ']],
241            ['wordblock',['DOG']],
242            ['cdata',[' yz']],
243            ['p_close',[]],
244            ['document_end',[]],
245        ];
246        $this->assertCalls($calls, $this->H->calls);
247    }
248
249    function testSingleEntity() {
250        $this->P->addMode('entity',new Entity(['->']));
251        $this->P->parse('x -> y');
252        $calls = [
253            ['document_start',[]],
254            ['p_open',[]],
255            ['cdata',["\n".'x ']],
256            ['entity',['->']],
257            ['cdata',[' y']],
258            ['p_close',[]],
259            ['document_end',[]],
260        ];
261        $this->assertCalls($calls, $this->H->calls);
262    }
263
264    function testMultipleEntities() {
265        $this->P->addMode('entity',new Entity(['->','<-']));
266        $this->P->parse('x -> y <- z');
267        $calls = [
268            ['document_start',[]],
269            ['p_open',[]],
270            ['cdata',["\n".'x ']],
271            ['entity',['->']],
272            ['cdata',[' y ']],
273            ['entity',['<-']],
274            ['cdata',[' z']],
275            ['p_close',[]],
276            ['document_end',[]],
277        ];
278        $this->assertCalls($calls, $this->H->calls);
279    }
280
281    function testMultiplyEntity() {
282        $this->P->addMode('multiplyentity',new Multiplyentity());
283        $this->P->parse('Foo 10x20 Bar');
284        $calls = [
285            ['document_start',[]],
286            ['p_open',[]],
287            ['cdata',["\n".'Foo ']],
288            ['multiplyentity',[10,20]],
289            ['cdata',[' Bar']],
290            ['p_close',[]],
291            ['document_end',[]],
292        ];
293        $this->assertCalls($calls, $this->H->calls);
294    }
295
296    function testMultiplyEntityHex() {
297        $this->P->addMode('multiplyentity',new Multiplyentity());
298        $this->P->parse('Foo 0x123 Bar');
299        $calls = [
300            ['document_start',[]],
301            ['p_open',[]],
302            ['cdata',["\n".'Foo 0x123 Bar']],
303            ['p_close',[]],
304            ['document_end',[]],
305        ];
306        $this->assertCalls($calls, $this->H->calls);
307    }
308
309}
310