1<?php
2
3use dokuwiki\Parsing\ParserMode\Code;
4use dokuwiki\Parsing\ParserMode\Eol;
5use dokuwiki\Parsing\ParserMode\File;
6use dokuwiki\Parsing\ParserMode\Header;
7use dokuwiki\Parsing\ParserMode\Html;
8use dokuwiki\Parsing\ParserMode\Listblock;
9use dokuwiki\Parsing\ParserMode\Php;
10use dokuwiki\Parsing\ParserMode\Preformatted;
11
12require_once 'parser.inc.php';
13
14class TestOfDoku_Parser_Preformatted extends TestOfDoku_Parser {
15
16    function testFile() {
17        $this->P->addMode('file',new File());
18        $this->P->parse('Foo <file>testing</file> Bar');
19        $calls = array (
20            array('document_start',array()),
21            array('p_open',array()),
22            array('cdata',array("\n".'Foo ')),
23            array('p_close',array()),
24            array('file',array('testing',null,null)),
25            array('p_open',array()),
26            array('cdata',array(' Bar')),
27            array('p_close',array()),
28            array('document_end',array()),
29        );
30
31        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
32    }
33
34    function testCode() {
35        $this->P->addMode('code',new Code());
36        $this->P->parse('Foo <code>testing</code> Bar');
37        $calls = array (
38            array('document_start',array()),
39            array('p_open',array()),
40            array('cdata',array("\n".'Foo ')),
41            array('p_close',array()),
42            array('code',array('testing', null, null)),
43            array('p_open',array()),
44            array('cdata',array(' Bar')),
45            array('p_close',array()),
46            array('document_end',array()),
47        );
48        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
49    }
50
51    function testCodeWhitespace() {
52        $this->P->addMode('code',new Code());
53        $this->P->parse("Foo <code \n>testing</code> Bar");
54        $calls = array (
55            array('document_start',array()),
56            array('p_open',array()),
57            array('cdata',array("\n".'Foo ')),
58            array('p_close',array()),
59            array('code',array('testing', null, null)),
60            array('p_open',array()),
61            array('cdata',array(' Bar')),
62            array('p_close',array()),
63            array('document_end',array()),
64        );
65        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
66    }
67
68    function testCodeLang() {
69        $this->P->addMode('code',new Code());
70        $this->P->parse("Foo <code php>testing</code> Bar");
71        $calls = array (
72            array('document_start',array()),
73            array('p_open',array()),
74            array('cdata',array("\n".'Foo ')),
75            array('p_close',array()),
76            array('code',array('testing', 'php', null)),
77            array('p_open',array()),
78            array('cdata',array(' Bar')),
79            array('p_close',array()),
80            array('document_end',array()),
81        );
82        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
83    }
84
85    function testPreformatted() {
86        $this->P->addMode('preformatted',new Preformatted());
87        $this->P->parse("F  oo\n  x  \n    y  \nBar\n");
88        $calls = array (
89            array('document_start',array()),
90            array('p_open',array()),
91            array('cdata',array("\nF  oo")),
92            array('p_close',array()),
93            array('preformatted',array("x  \n  y  ")),
94            array('p_open',array()),
95            array('cdata',array('Bar')),
96            array('p_close',array()),
97            array('document_end',array()),
98        );
99        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
100    }
101
102    function testPreformattedWinEOL() {
103        $this->P->addMode('preformatted',new Preformatted());
104        $this->P->parse("F  oo\r\n  x  \r\n    y  \r\nBar\r\n");
105        $calls = array (
106            array('document_start',array()),
107            array('p_open',array()),
108            array('cdata',array("\nF  oo")),
109            array('p_close',array()),
110            array('preformatted',array("x  \n  y  ")),
111            array('p_open',array()),
112            array('cdata',array('Bar')),
113            array('p_close',array()),
114            array('document_end',array()),
115        );
116        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
117    }
118
119    function testPreformattedTab() {
120        $this->P->addMode('preformatted',new Preformatted());
121        $this->P->parse("F  oo\n\tx\t\n\t\ty\t\nBar\n");
122        $calls = array (
123            array('document_start',array()),
124            array('p_open',array()),
125            array('cdata',array("\nF  oo")),
126            array('p_close',array()),
127            array('preformatted',array("x\t\n\ty\t")),
128            array('p_open',array()),
129            array('cdata',array("Bar")),
130            array('p_close',array()),
131            array('document_end',array()),
132        );
133        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
134    }
135
136    function testPreformattedTabWinEOL() {
137        $this->P->addMode('preformatted',new Preformatted());
138        $this->P->parse("F  oo\r\n\tx\t\r\n\t\ty\t\r\nBar\r\n");
139        $calls = array (
140            array('document_start',array()),
141            array('p_open',array()),
142            array('cdata',array("\nF  oo")),
143            array('p_close',array()),
144            array('preformatted',array("x\t\n\ty\t")),
145            array('p_open',array()),
146            array('cdata',array("Bar")),
147            array('p_close',array()),
148            array('document_end',array()),
149        );
150        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
151    }
152
153    function testPreformattedList() {
154        $this->P->addMode('preformatted',new Preformatted());
155        $this->P->addMode('listblock',new Listblock());
156        $this->P->parse("  - x \n  * y \nF  oo\n  x  \n    y  \n  -X\n  *Y\nBar\n");
157        $calls = array (
158            array('document_start',array()),
159            array('listo_open',array()),
160            array('listitem_open',array(1)),
161            array('listcontent_open',array()),
162            array('cdata',array(" x ")),
163            array('listcontent_close',array()),
164            array('listitem_close',array()),
165            array('listo_close',array()),
166            array('listu_open',array()),
167            array('listitem_open',array(1)),
168            array('listcontent_open',array()),
169            array('cdata',array(" y ")),
170            array('listcontent_close',array()),
171            array('listitem_close',array()),
172            array('listu_close',array()),
173            array('p_open',array()),
174            array('cdata',array("F  oo")),
175            array('p_close',array()),
176            array('preformatted',array("x  \n  y  \n-X\n*Y")),
177            array('p_open',array()),
178            array('cdata',array("Bar")),
179            array('p_close',array()),
180            array('document_end',array()),
181        );
182        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
183    }
184
185
186    function testPreformattedPlusHeaderAndEol() {
187        // Note that EOL must come after preformatted!
188        $this->P->addMode('preformatted',new Preformatted());
189        $this->P->addMode('header',new Header());
190        $this->P->addMode('eol',new Eol());
191        $this->P->parse("F  oo\n  ==Test==\n    y  \nBar\n");
192        $calls = array (
193            array('document_start',array()),
194            array('p_open',array()),
195            array('cdata',array("F  oo")),
196            array('p_close',array()),
197            array('preformatted',array("==Test==\n  y  ")),
198            array('p_open',array()),
199            array('cdata',array('Bar')),
200            array('p_close',array()),
201            array('document_end',array()),
202        );
203        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
204    }
205}
206
207