1<?php
2
3use dokuwiki\Parsing\ParserMode\Eol;
4use dokuwiki\Parsing\ParserMode\Header;
5
6require_once 'parser.inc.php';
7
8class TestOfDoku_Parser_Headers extends TestOfDoku_Parser {
9
10    function testHeader1() {
11        $this->P->addMode('header',new Header());
12        $this->P->parse("abc \n ====== Header ====== \n def");
13        $calls = array (
14            array('document_start',array()),
15            array('p_open',array()),
16            array('cdata',array("\nabc ")),
17            array('p_close',array()),
18            array('header',array('Header',1,6)),
19            array('section_open',array(1)),
20            array('p_open',array()),
21            array('cdata',array("\n def")),
22            array('p_close',array()),
23            array('section_close',array()),
24            array('document_end',array()),
25        );
26        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
27    }
28
29    function testHeader2() {
30        $this->P->addMode('header',new Header());
31        $this->P->parse("abc \n  ===== Header ===== \n def");
32        $calls = array (
33            array('document_start',array()),
34            array('p_open',array()),
35            array('cdata',array("\nabc ")),
36            array('p_close',array()),
37            array('header',array('Header',2,6)),
38            array('section_open',array(2)),
39            array('p_open',array()),
40            array('cdata',array("\n def")),
41            array('p_close',array()),
42            array('section_close',array()),
43            array('document_end',array()),
44        );
45        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
46    }
47
48    function testHeader3() {
49        $this->P->addMode('header',new Header());
50        $this->P->parse("abc \n ==== Header ==== \n def");
51        $calls = array (
52            array('document_start',array()),
53            array('p_open',array()),
54            array('cdata',array("\nabc ")),
55            array('p_close',array()),
56            array('header',array('Header',3,6)),
57            array('section_open',array(3)),
58            array('p_open',array()),
59            array('cdata',array("\n def")),
60            array('p_close',array()),
61            array('section_close',array()),
62            array('document_end',array()),
63        );
64        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
65    }
66
67    function testHeader4() {
68        $this->P->addMode('header',new Header());
69        $this->P->parse("abc \n === Header === \n def");
70        $calls = array (
71            array('document_start',array()),
72            array('p_open',array()),
73            array('cdata',array("\nabc ")),
74            array('p_close',array()),
75            array('header',array('Header',4,6)),
76            array('section_open',array(4)),
77            array('p_open',array()),
78            array('cdata',array("\n def")),
79            array('p_close',array()),
80            array('section_close',array()),
81            array('document_end',array()),
82        );
83        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
84    }
85
86    function testHeader5() {
87        $this->P->addMode('header',new Header());
88        $this->P->parse("abc \n  == Header ==  \n def");
89        $calls = array (
90            array('document_start',array()),
91            array('p_open',array()),
92            array('cdata',array("\nabc ")),
93            array('p_close',array()),
94            array('header',array('Header',5,6)),
95            array('section_open',array(5)),
96            array('p_open',array()),
97            array('cdata',array("\n def")),
98            array('p_close',array()),
99            array('section_close',array()),
100            array('document_end',array()),
101        );
102        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
103    }
104
105    function testHeader2UnevenSmaller() {
106        $this->P->addMode('header',new Header());
107        $this->P->parse("abc \n  ===== Header ==  \n def");
108        $calls = array (
109            array('document_start',array()),
110            array('p_open',array()),
111            array('cdata',array("\nabc ")),
112            array('p_close',array()),
113            array('header',array('Header',2,6)),
114            array('section_open',array(2)),
115            array('p_open',array()),
116            array('cdata',array("\n def")),
117            array('p_close',array()),
118            array('section_close',array()),
119            array('document_end',array()),
120        );
121        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
122    }
123
124    function testHeader2UnevenBigger() {
125        $this->P->addMode('header',new Header());
126        $this->P->parse("abc \n  ===== Header ===========  \n def");
127        $calls = array (
128            array('document_start',array()),
129            array('p_open',array()),
130            array('cdata',array("\nabc ")),
131            array('p_close',array()),
132            array('header',array('Header',2,6)),
133            array('section_open',array(2)),
134            array('p_open',array()),
135            array('cdata',array("\n def")),
136            array('p_close',array()),
137            array('section_close',array()),
138            array('document_end',array()),
139        );
140        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
141    }
142
143    function testHeaderLarge() {
144        $this->P->addMode('header',new Header());
145        $this->P->parse("abc \n ======= Header ======= \n def");
146        $calls = array (
147            array('document_start',array()),
148            array('p_open',array()),
149            array('cdata',array("\nabc ")),
150            array('p_close',array()),
151            array('header',array('Header',1,6)),
152            array('section_open',array(1)),
153            array('p_open',array()),
154            array('cdata',array("\n def")),
155            array('p_close',array()),
156            array('section_close',array()),
157            array('document_end',array()),
158        );
159        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
160    }
161
162    function testHeaderSmall() {
163        $this->P->addMode('header',new Header());
164        $this->P->parse("abc \n= Header =\n def");
165        $calls = array (
166            array('document_start',array()),
167            array('p_open',array()),
168            array('cdata',array("\nabc \n= Header =\n def")),
169            array('p_close',array()),
170            array('document_end',array()),
171        );
172        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
173    }
174
175
176    function testHeader1Mixed() {
177        $this->P->addMode('header',new Header());
178        $this->P->parse("abc \n====== == Header == ======\n def");
179        $calls = array (
180            array('document_start',array()),
181            array('p_open',array()),
182            array('cdata',array("\nabc ")),
183            array('p_close',array()),
184            array('header',array('== Header ==',1,6)),
185            array('section_open',array(1)),
186            array('p_open',array()),
187            array('cdata',array("\n def")),
188            array('p_close',array()),
189            array('section_close',array()),
190            array('document_end',array()),
191        );
192        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
193    }
194
195    function testHeader5Mixed() {
196        $this->P->addMode('header',new Header());
197        $this->P->parse("abc \n== ====== Header ====== ==\n def");
198        $calls = array (
199            array('document_start',array()),
200            array('p_open',array()),
201            array('cdata',array("\nabc ")),
202            array('p_close',array()),
203            array('header',array('====== Header ======',5,6)),
204            array('section_open',array(5)),
205            array('p_open',array()),
206            array('cdata',array("\n def")),
207            array('p_close',array()),
208            array('section_close',array()),
209            array('document_end',array()),
210        );
211        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
212    }
213
214    function testHeaderMultiline() {
215        $this->P->addMode('header',new Header());
216        $this->P->parse("abc \n== ====== Header\n ====== ==\n def");
217        $calls = array (
218            array('document_start',array()),
219            array('p_open',array()),
220            array('cdata',array("\nabc \n== ====== Header")),
221            array('p_close',array()),
222            array('header',array('',1,23)),
223            array('section_open',array(1)),
224            array('p_open',array()),
225            array('cdata',array("\n def")),
226            array('p_close',array()),
227            array('section_close',array()),
228            array('document_end',array()),
229        );
230        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
231    }
232
233#    function testNoToc() {
234#        $this->P->addMode('notoc',new NoToc());
235#        $this->P->parse('abc ~~NOTOC~~ def');
236#        $this->assertFalse($this->H->meta['toc']);
237#    }
238
239    function testHeader1Eol() {
240        $this->P->addMode('header',new Header());
241        $this->P->addMode('eol',new Eol());
242        $this->P->parse("abc \n ====== Header ====== \n def");
243        $calls = array (
244            array('document_start',array()),
245            array('p_open',array()),
246            array('cdata',array('abc ')),
247            array('p_close',array()),
248            array('header',array('Header',1, 6)),
249            array('section_open',array(1)),
250            array('p_open',array()),
251            array('cdata',array(' def')),
252            array('p_close',array()),
253            array('section_close',array()),
254            array('document_end',array()),
255        );
256        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
257
258    }
259
260    function testHeaderMulti2() {
261        $this->P->addMode('header',new Header());
262        $this->P->parse("abc \n ====== Header ====== \n def abc \n ===== Header2 ===== \n def");
263        $calls = array (
264            array('document_start',array()),
265            array('p_open',array()),
266            array('cdata',array("\nabc ")),
267            array('p_close',array()),
268            array('header',array('Header',1,6)),
269            array('section_open',array(1)),
270            array('p_open',array()),
271            array('cdata',array("\n def abc ")),
272            array('p_close',array()),
273            array('section_close',array()),
274            array('header',array('Header2',2,39)),
275            array('section_open',array(2)),
276            array('p_open',array()),
277            array('cdata',array("\n def")),
278            array('p_close',array()),
279            array('section_close',array()),
280            array('document_end',array())
281        );
282        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
283    }
284
285}
286
287