xref: /plugin/bpmnio/_test/syntax_plugin_bpmnio_bpmnio.test.php (revision 94260a7f040ace3ab386a435f5314f2f3ebe529a)
1ae85f1faSJaap de Haan<?php
29ff8d41cSJaap de Haan
3ae85f1faSJaap de Haan/**
4ae85f1faSJaap de Haan * @group plugin_bpmnio
5ae85f1faSJaap de Haan * @group plugins
6ae85f1faSJaap de Haan */
79ff8d41cSJaap de Haanclass syntax_plugin_bpmnio_test extends DokuWikiTest
89ff8d41cSJaap de Haan{
9ae85f1faSJaap de Haan    protected $pluginsEnabled = array('bpmnio');
10ae85f1faSJaap de Haan
119ff8d41cSJaap de Haan    public function test_syntax_bpmn()
129ff8d41cSJaap de Haan    {
13ae85f1faSJaap de Haan        $info = array();
14ae85f1faSJaap de Haan        $expected = <<<OUT
15ae85f1faSJaap de Haan        <div class="plugin-bpmnio" id="__bpmn_js_1"><div class="bpmn_js_data">
16ae85f1faSJaap de Haan            ClhNTC4uLgo=
17ae85f1faSJaap de Haan        </div><div class="bpmn_js_canvas sectionedit1">
18ae85f1faSJaap de Haan            <div class="bpmn_js_container"></div>
19ae85f1faSJaap de Haan        </div><!-- EDIT{&quot;target&quot;:&quot;plugin_bpmnio_bpmn&quot;,&quot;secid&quot;:1,&quot;range&quot;:&quot;21-29&quot;} --></div>
20ae85f1faSJaap de Haan        OUT;
21ae85f1faSJaap de Haan
22ae85f1faSJaap de Haan        $input = <<<IN
23ae85f1faSJaap de Haan        <bpmnio type="bpmn">
24ae85f1faSJaap de Haan        XML...
25ae85f1faSJaap de Haan        </bpmnio>
26ae85f1faSJaap de Haan        IN;
27ae85f1faSJaap de Haan
28ae85f1faSJaap de Haan        $instructions = p_get_instructions($input);
29ae85f1faSJaap de Haan        $xhtml = p_render('xhtml', $instructions, $info);
30ae85f1faSJaap de Haan
31ae85f1faSJaap de Haan        $this->assertEquals($expected, $xhtml);
32ae85f1faSJaap de Haan    }
33ae85f1faSJaap de Haan
349ff8d41cSJaap de Haan    public function test_syntax_dmn()
359ff8d41cSJaap de Haan    {
36ae85f1faSJaap de Haan        $info = array();
37ae85f1faSJaap de Haan        $expected = <<<OUT
38ae85f1faSJaap de Haan        <div class="plugin-bpmnio" id="__dmn_js_1"><div class="dmn_js_data">
39ae85f1faSJaap de Haan            ClhNTC4uLgo=
40ae85f1faSJaap de Haan        </div><div class="dmn_js_canvas sectionedit1">
41ae85f1faSJaap de Haan            <div class="dmn_js_container"></div>
42ae85f1faSJaap de Haan        </div><!-- EDIT{&quot;target&quot;:&quot;plugin_bpmnio_dmn&quot;,&quot;secid&quot;:1,&quot;range&quot;:&quot;20-28&quot;} --></div>
43ae85f1faSJaap de Haan        OUT;
44ae85f1faSJaap de Haan
45ae85f1faSJaap de Haan        $input = <<<IN
46ae85f1faSJaap de Haan        <bpmnio type="dmn">
47ae85f1faSJaap de Haan        XML...
48ae85f1faSJaap de Haan        </bpmnio>
49ae85f1faSJaap de Haan        IN;
50ae85f1faSJaap de Haan
51ae85f1faSJaap de Haan        $instructions = p_get_instructions($input);
52ae85f1faSJaap de Haan        $xhtml = p_render('xhtml', $instructions, $info);
53ae85f1faSJaap de Haan
54ae85f1faSJaap de Haan        $this->assertEquals($expected, $xhtml);
55ae85f1faSJaap de Haan    }
56242a8e5cSJaap de Haan
57242a8e5cSJaap de Haan    /**
58242a8e5cSJaap de Haan     * Test that type defaults to bpmn when not specified
59242a8e5cSJaap de Haan     */
609ff8d41cSJaap de Haan    public function test_syntax_default_type()
619ff8d41cSJaap de Haan    {
62242a8e5cSJaap de Haan        $info = array();
63242a8e5cSJaap de Haan
64242a8e5cSJaap de Haan        $input = <<<IN
65242a8e5cSJaap de Haan        <bpmnio>
66242a8e5cSJaap de Haan        XML...
67242a8e5cSJaap de Haan        </bpmnio>
68242a8e5cSJaap de Haan        IN;
69242a8e5cSJaap de Haan
70242a8e5cSJaap de Haan        $instructions = p_get_instructions($input);
71242a8e5cSJaap de Haan        $xhtml = p_render('xhtml', $instructions, $info);
72242a8e5cSJaap de Haan
73242a8e5cSJaap de Haan        $this->assertStringContainsString('bpmn_js_data', $xhtml);
74242a8e5cSJaap de Haan        $this->assertStringContainsString('bpmn_js_canvas', $xhtml);
75242a8e5cSJaap de Haan        $this->assertStringContainsString('bpmn_js_container', $xhtml);
76242a8e5cSJaap de Haan    }
77242a8e5cSJaap de Haan
78242a8e5cSJaap de Haan    /**
79242a8e5cSJaap de Haan     * Test empty content between tags
80242a8e5cSJaap de Haan     */
819ff8d41cSJaap de Haan    public function test_syntax_empty_content()
829ff8d41cSJaap de Haan    {
83242a8e5cSJaap de Haan        $info = array();
84242a8e5cSJaap de Haan
85242a8e5cSJaap de Haan        $input = <<<IN
86242a8e5cSJaap de Haan        <bpmnio type="bpmn">
87242a8e5cSJaap de Haan        </bpmnio>
88242a8e5cSJaap de Haan        IN;
89242a8e5cSJaap de Haan
90242a8e5cSJaap de Haan        $instructions = p_get_instructions($input);
91242a8e5cSJaap de Haan        $xhtml = p_render('xhtml', $instructions, $info);
92242a8e5cSJaap de Haan
93242a8e5cSJaap de Haan        // Should still produce the structure, with base64 of whitespace/empty
94242a8e5cSJaap de Haan        $this->assertStringContainsString('plugin-bpmnio', $xhtml);
95242a8e5cSJaap de Haan        $this->assertStringContainsString('bpmn_js_data', $xhtml);
96242a8e5cSJaap de Haan    }
97242a8e5cSJaap de Haan
98242a8e5cSJaap de Haan    /**
99242a8e5cSJaap de Haan     * Test that multiline XML content is properly base64-encoded
100242a8e5cSJaap de Haan     */
1019ff8d41cSJaap de Haan    public function test_syntax_multiline_content()
1029ff8d41cSJaap de Haan    {
103242a8e5cSJaap de Haan        $info = array();
104242a8e5cSJaap de Haan
105242a8e5cSJaap de Haan        $input = <<<IN
106242a8e5cSJaap de Haan        <bpmnio type="bpmn">
107242a8e5cSJaap de Haan        <?xml version="1.0"?>
108242a8e5cSJaap de Haan        <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL">
109242a8e5cSJaap de Haan        </definitions>
110242a8e5cSJaap de Haan        </bpmnio>
111242a8e5cSJaap de Haan        IN;
112242a8e5cSJaap de Haan
113242a8e5cSJaap de Haan        $instructions = p_get_instructions($input);
114242a8e5cSJaap de Haan        $xhtml = p_render('xhtml', $instructions, $info);
115242a8e5cSJaap de Haan
116242a8e5cSJaap de Haan        $this->assertStringContainsString('bpmn_js_data', $xhtml);
117242a8e5cSJaap de Haan        // Verify the data section contains valid base64
118242a8e5cSJaap de Haan        preg_match('/<div class="bpmn_js_data">\s*(.*?)\s*<\/div>/s', $xhtml, $matches);
119242a8e5cSJaap de Haan        $this->assertNotEmpty($matches[1]);
120242a8e5cSJaap de Haan        $decoded = base64_decode(trim($matches[1]), true);
121242a8e5cSJaap de Haan        $this->assertNotFalse($decoded, 'Content should be valid base64');
122242a8e5cSJaap de Haan        $this->assertStringContainsString('definitions', $decoded);
123242a8e5cSJaap de Haan    }
124242a8e5cSJaap de Haan
125242a8e5cSJaap de Haan    /**
126242a8e5cSJaap de Haan     * Test that the plugin produces section edit markers for inline content
127242a8e5cSJaap de Haan     */
1289ff8d41cSJaap de Haan    public function test_syntax_section_edit_bpmn()
1299ff8d41cSJaap de Haan    {
130242a8e5cSJaap de Haan        $info = array();
131242a8e5cSJaap de Haan
132242a8e5cSJaap de Haan        $input = <<<IN
133242a8e5cSJaap de Haan        <bpmnio type="bpmn">
134242a8e5cSJaap de Haan        Content
135242a8e5cSJaap de Haan        </bpmnio>
136242a8e5cSJaap de Haan        IN;
137242a8e5cSJaap de Haan
138242a8e5cSJaap de Haan        $instructions = p_get_instructions($input);
139242a8e5cSJaap de Haan        $xhtml = p_render('xhtml', $instructions, $info);
140242a8e5cSJaap de Haan
141242a8e5cSJaap de Haan        $this->assertStringContainsString('sectionedit', $xhtml);
142242a8e5cSJaap de Haan        $this->assertStringContainsString('plugin_bpmnio_bpmn', $xhtml);
143242a8e5cSJaap de Haan    }
144242a8e5cSJaap de Haan
145242a8e5cSJaap de Haan    /**
146242a8e5cSJaap de Haan     * Test that the plugin produces section edit markers for DMN inline content
147242a8e5cSJaap de Haan     */
1489ff8d41cSJaap de Haan    public function test_syntax_section_edit_dmn()
1499ff8d41cSJaap de Haan    {
150242a8e5cSJaap de Haan        $info = array();
151242a8e5cSJaap de Haan
152242a8e5cSJaap de Haan        $input = <<<IN
153242a8e5cSJaap de Haan        <bpmnio type="dmn">
154242a8e5cSJaap de Haan        Content
155242a8e5cSJaap de Haan        </bpmnio>
156242a8e5cSJaap de Haan        IN;
157242a8e5cSJaap de Haan
158242a8e5cSJaap de Haan        $instructions = p_get_instructions($input);
159242a8e5cSJaap de Haan        $xhtml = p_render('xhtml', $instructions, $info);
160242a8e5cSJaap de Haan
161242a8e5cSJaap de Haan        $this->assertStringContainsString('sectionedit', $xhtml);
162242a8e5cSJaap de Haan        $this->assertStringContainsString('plugin_bpmnio_dmn', $xhtml);
163242a8e5cSJaap de Haan    }
164242a8e5cSJaap de Haan
165242a8e5cSJaap de Haan    /**
166242a8e5cSJaap de Haan     * Test that unrecognized text outside <bpmnio> is not affected
167242a8e5cSJaap de Haan     */
1689ff8d41cSJaap de Haan    public function test_syntax_no_interference()
1699ff8d41cSJaap de Haan    {
170242a8e5cSJaap de Haan        $info = array();
171242a8e5cSJaap de Haan
172242a8e5cSJaap de Haan        $input = <<<IN
173242a8e5cSJaap de Haan        Hello World
174242a8e5cSJaap de Haan        <bpmnio type="bpmn">
175242a8e5cSJaap de Haan        XML...
176242a8e5cSJaap de Haan        </bpmnio>
177242a8e5cSJaap de Haan        Goodbye World
178242a8e5cSJaap de Haan        IN;
179242a8e5cSJaap de Haan
180242a8e5cSJaap de Haan        $instructions = p_get_instructions($input);
181242a8e5cSJaap de Haan        $xhtml = p_render('xhtml', $instructions, $info);
182242a8e5cSJaap de Haan
183242a8e5cSJaap de Haan        $this->assertStringContainsString('Hello World', $xhtml);
184242a8e5cSJaap de Haan        $this->assertStringContainsString('Goodbye World', $xhtml);
185242a8e5cSJaap de Haan        $this->assertStringContainsString('plugin-bpmnio', $xhtml);
186242a8e5cSJaap de Haan    }
187242a8e5cSJaap de Haan
188*94260a7fSJaap de Haan    public function test_syntax_zoom_attribute()
189*94260a7fSJaap de Haan    {
190*94260a7fSJaap de Haan        $info = array();
191*94260a7fSJaap de Haan
192*94260a7fSJaap de Haan        $input = <<<IN
193*94260a7fSJaap de Haan        <bpmnio type="bpmn" zoom="0.5">
194*94260a7fSJaap de Haan        XML...
195*94260a7fSJaap de Haan        </bpmnio>
196*94260a7fSJaap de Haan        IN;
197*94260a7fSJaap de Haan
198*94260a7fSJaap de Haan        $instructions = p_get_instructions($input);
199*94260a7fSJaap de Haan        $xhtml = p_render('xhtml', $instructions, $info);
200*94260a7fSJaap de Haan
201*94260a7fSJaap de Haan        $this->assertStringContainsString('data-zoom="0.5"', $xhtml);
202*94260a7fSJaap de Haan    }
203*94260a7fSJaap de Haan
204*94260a7fSJaap de Haan    public function test_syntax_ignores_invalid_zoom_attribute()
205*94260a7fSJaap de Haan    {
206*94260a7fSJaap de Haan        $info = array();
207*94260a7fSJaap de Haan
208*94260a7fSJaap de Haan        $input = <<<IN
209*94260a7fSJaap de Haan        <bpmnio type="bpmn" zoom="0">
210*94260a7fSJaap de Haan        XML...
211*94260a7fSJaap de Haan        </bpmnio>
212*94260a7fSJaap de Haan        IN;
213*94260a7fSJaap de Haan
214*94260a7fSJaap de Haan        $instructions = p_get_instructions($input);
215*94260a7fSJaap de Haan        $xhtml = p_render('xhtml', $instructions, $info);
216*94260a7fSJaap de Haan
217*94260a7fSJaap de Haan        $this->assertStringNotContainsString('data-zoom=', $xhtml);
218*94260a7fSJaap de Haan    }
219*94260a7fSJaap de Haan
220242a8e5cSJaap de Haan    /**
221242a8e5cSJaap de Haan     * Test the handle method directly for ENTER state
222242a8e5cSJaap de Haan     */
2239ff8d41cSJaap de Haan    public function test_handle_enter_state()
2249ff8d41cSJaap de Haan    {
225242a8e5cSJaap de Haan        $plugin = plugin_load('syntax', 'bpmnio_bpmnio');
226242a8e5cSJaap de Haan        $this->assertNotNull($plugin, 'Plugin should be loadable');
227242a8e5cSJaap de Haan
228242a8e5cSJaap de Haan        $handler = new Doku_Handler();
229242a8e5cSJaap de Haan        $result = $plugin->handle('<bpmnio type="bpmn">', DOKU_LEXER_ENTER, 0, $handler);
230242a8e5cSJaap de Haan
231242a8e5cSJaap de Haan        $this->assertEquals(DOKU_LEXER_ENTER, $result[0]);
232242a8e5cSJaap de Haan        $this->assertEquals('bpmn', $result[1]);
233242a8e5cSJaap de Haan    }
234242a8e5cSJaap de Haan
235242a8e5cSJaap de Haan    /**
236242a8e5cSJaap de Haan     * Test the handle method directly for EXIT state
237242a8e5cSJaap de Haan     */
2389ff8d41cSJaap de Haan    public function test_handle_exit_state()
2399ff8d41cSJaap de Haan    {
240242a8e5cSJaap de Haan        $plugin = plugin_load('syntax', 'bpmnio_bpmnio');
241242a8e5cSJaap de Haan        $handler = new Doku_Handler();
242242a8e5cSJaap de Haan        $result = $plugin->handle('</bpmnio>', DOKU_LEXER_EXIT, 0, $handler);
243242a8e5cSJaap de Haan
244242a8e5cSJaap de Haan        $this->assertEquals(DOKU_LEXER_EXIT, $result[0]);
245242a8e5cSJaap de Haan    }
246242a8e5cSJaap de Haan
247242a8e5cSJaap de Haan    /**
248242a8e5cSJaap de Haan     * Test that the plugin is correctly registered
249242a8e5cSJaap de Haan     */
2509ff8d41cSJaap de Haan    public function test_plugin_registration()
2519ff8d41cSJaap de Haan    {
252242a8e5cSJaap de Haan        $plugin = plugin_load('syntax', 'bpmnio_bpmnio');
253242a8e5cSJaap de Haan        $this->assertNotNull($plugin, 'Plugin should be loadable');
254242a8e5cSJaap de Haan        $this->assertEquals('block', $plugin->getPType());
255242a8e5cSJaap de Haan        $this->assertEquals('protected', $plugin->getType());
256242a8e5cSJaap de Haan        $this->assertEquals(0, $plugin->getSort());
257ae85f1faSJaap de Haan    }
25843854469SJaap de Haan}
259