1<?php
2
3use dokuwiki\Parsing\ParserMode\Acronym;
4use dokuwiki\Parsing\ParserMode\Formatting;
5use dokuwiki\Parsing\ParserMode\Header;
6use dokuwiki\Parsing\ParserMode\Internallink;
7use dokuwiki\Parsing\ParserMode\Table;
8
9require_once 'parser.inc.php';
10
11class TestOfDoku_Parser_i18n extends TestOfDoku_Parser {
12
13    function testFormatting() {
14        $formats = array (
15            'strong', 'emphasis', 'underline', 'monospace',
16            'subscript', 'superscript', 'deleted',
17        );
18        foreach ( $formats as $format ) {
19            $this->P->addMode($format,new Formatting($format));
20        }
21        $this->P->parse("I**ñ**t__ë__r//n//â<sup>t</sup>i<sub>ô</sub>n''à''liz<del>æ</del>tiøn");
22        $calls = array (
23            array('document_start',array()),
24            array('p_open',array()),
25            array('cdata',array("\nI")),
26            array('strong_open',array()),
27            array('cdata',array('ñ')),
28            array('strong_close',array()),
29            array('cdata',array('t')),
30            array('underline_open',array()),
31            array('cdata',array('ë')),
32            array('underline_close',array()),
33            array('cdata',array('r')),
34            array('emphasis_open',array()),
35            array('cdata',array('n')),
36            array('emphasis_close',array()),
37            array('cdata',array('â')),
38            array('superscript_open',array()),
39            array('cdata',array('t')),
40            array('superscript_close',array()),
41            array('cdata',array('i')),
42            array('subscript_open',array()),
43            array('cdata',array('ô')),
44            array('subscript_close',array()),
45            array('cdata',array('n')),
46            array('monospace_open',array()),
47            array('cdata',array('à')),
48            array('monospace_close',array()),
49            array('cdata',array('liz')),
50            array('deleted_open',array()),
51            array('cdata',array('æ')),
52            array('deleted_close',array()),
53            array('cdata',array("tiøn")),
54            array('p_close',array()),
55            array('document_end',array()),
56        );
57        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
58    }
59
60    function testHeader() {
61        $this->P->addMode('header',new Header());
62        $this->P->parse("Foo\n ==== Iñtërnâtiônàlizætiøn ==== \n Bar");
63        $calls = array (
64            array('document_start',array()),
65            array('p_open',array()),
66            array('cdata',array("\nFoo")),
67            array('p_close',array()),
68            array('header',array('Iñtërnâtiônàlizætiøn',3,5)),
69            array('section_open',array(3)),
70            array('p_open',array()),
71            array('cdata',array("\n Bar")),
72            array('p_close',array()),
73            array('section_close',array()),
74            array('document_end',array()),
75        );
76        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
77    }
78
79    function testTable() {
80        $this->P->addMode('table',new Table());
81        $this->P->parse('
82abc
83| Row 0 Col 1    | Iñtërnâtiônàlizætiøn     | Row 0 Col 3        |
84| Row 1 Col 1    | Iñtërnâtiônàlizætiøn     | Row 1 Col 3        |
85def');
86        $calls = array (
87            array('document_start',array()),
88            array('p_open',array()),
89            array('cdata',array("\n\nabc")),
90            array('p_close',array()),
91            array('table_open',array(3, 2, 6)),
92            array('tablerow_open',array()),
93            array('tablecell_open',array(1,'left',1)),
94            array('cdata',array(' Row 0 Col 1    ')),
95            array('tablecell_close',array()),
96            array('tablecell_open',array(1,'left',1)),
97            array('cdata',array(' Iñtërnâtiônàlizætiøn     ')),
98            array('tablecell_close',array()),
99            array('tablecell_open',array(1,'left',1)),
100            array('cdata',array(' Row 0 Col 3        ')),
101            array('tablecell_close',array()),
102            array('tablerow_close',array()),
103            array('tablerow_open',array()),
104            array('tablecell_open',array(1,'left',1)),
105            array('cdata',array(' Row 1 Col 1    ')),
106            array('tablecell_close',array()),
107            array('tablecell_open',array(1,'left',1)),
108            array('cdata',array(' Iñtërnâtiônàlizætiøn     ')),
109            array('tablecell_close',array()),
110            array('tablecell_open',array(1,'left',1)),
111            array('cdata',array(' Row 1 Col 3        ')),
112            array('tablecell_close',array()),
113            array('tablerow_close',array()),
114            array('table_close',array(153)),
115            array('p_open',array()),
116            array('cdata',array('def')),
117            array('p_close',array()),
118            array('document_end',array()),
119        );
120        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
121    }
122
123    function testAcronym() {
124        $t = array('Iñtërnâtiônàlizætiøn');
125        $this->P->addMode('acronym',new Acronym($t));
126        $this->P->parse("Foo Iñtërnâtiônàlizætiøn Bar");
127        $calls = array (
128            array('document_start',array()),
129            array('p_open',array()),
130            array('cdata',array("\nFoo ")),
131            array('acronym',array('Iñtërnâtiônàlizætiøn')),
132            array('cdata',array(" Bar")),
133            array('p_close',array()),
134            array('document_end',array()),
135        );
136        $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls);
137    }
138
139    function testInterwiki() {
140        $this->P->addMode('internallink',new InternalLink());
141        $this->P->parse("Foo [[wp>Iñtërnâtiônàlizætiøn|Iñtërnâtiônàlizætiøn]] Bar");
142        $calls = array (
143            array('document_start',array()),
144            array('p_open',array()),
145            array('cdata',array("\n".'Foo ')),
146            array('interwikilink',array('wp>Iñtërnâtiônàlizætiøn','Iñtërnâtiônàlizætiøn','wp','Iñtërnâtiônàlizætiøn')),
147            array('cdata',array(' Bar')),
148            array('p_close',array()),
149            array('document_end',array()),
150        );
151        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
152    }
153
154    function testInternalLink() {
155        $this->P->addMode('internallink',new InternalLink());
156        $this->P->parse("Foo [[x:Iñtërnâtiônàlizætiøn:y:foo_bar:z|Iñtërnâtiônàlizætiøn]] Bar");
157        $calls = array (
158            array('document_start',array()),
159            array('p_open',array()),
160            array('cdata',array("\n".'Foo ')),
161            array('internallink',array('x:Iñtërnâtiônàlizætiøn:y:foo_bar:z','Iñtërnâtiônàlizætiøn')),
162            array('cdata',array(' Bar')),
163            array('p_close',array()),
164            array('document_end',array()),
165        );
166        $this->assertEquals(array_map('stripByteIndex',$this->H->calls),$calls);
167    }
168}
169
170