1ae85f1faSJaap de Haan<?php 2ae85f1faSJaap de Haan/** 3ae85f1faSJaap de Haan * @group plugin_bpmnio 4ae85f1faSJaap de Haan * @group plugins 5ae85f1faSJaap de Haan */ 6ae85f1faSJaap de Haanclass syntax_plugin_bpmnio_test extends DokuWikiTest { 7ae85f1faSJaap de Haan 8ae85f1faSJaap de Haan protected $pluginsEnabled = array('bpmnio'); 9ae85f1faSJaap de Haan 10ae85f1faSJaap de Haan public function test_syntax_bpmn() { 11ae85f1faSJaap de Haan $info = array(); 12ae85f1faSJaap de Haan $expected = <<<OUT 13ae85f1faSJaap de Haan <div class="plugin-bpmnio" id="__bpmn_js_1"><div class="bpmn_js_data"> 14ae85f1faSJaap de Haan ClhNTC4uLgo= 15ae85f1faSJaap de Haan </div><div class="bpmn_js_canvas sectionedit1"> 16ae85f1faSJaap de Haan <div class="bpmn_js_container"></div> 17ae85f1faSJaap de Haan </div><!-- EDIT{"target":"plugin_bpmnio_bpmn","secid":1,"range":"21-29"} --></div> 18ae85f1faSJaap de Haan OUT; 19ae85f1faSJaap de Haan 20ae85f1faSJaap de Haan $input = <<<IN 21ae85f1faSJaap de Haan <bpmnio type="bpmn"> 22ae85f1faSJaap de Haan XML... 23ae85f1faSJaap de Haan </bpmnio> 24ae85f1faSJaap de Haan IN; 25ae85f1faSJaap de Haan 26ae85f1faSJaap de Haan $instructions = p_get_instructions($input); 27ae85f1faSJaap de Haan $xhtml = p_render('xhtml', $instructions, $info); 28ae85f1faSJaap de Haan 29ae85f1faSJaap de Haan $this->assertEquals($expected, $xhtml); 30ae85f1faSJaap de Haan } 31ae85f1faSJaap de Haan 32d5f7db03SJaap de Haan public function test_syntax_dmn() { 33ae85f1faSJaap de Haan $info = array(); 34ae85f1faSJaap de Haan $expected = <<<OUT 35ae85f1faSJaap de Haan <div class="plugin-bpmnio" id="__dmn_js_1"><div class="dmn_js_data"> 36ae85f1faSJaap de Haan ClhNTC4uLgo= 37ae85f1faSJaap de Haan </div><div class="dmn_js_canvas sectionedit1"> 38ae85f1faSJaap de Haan <div class="dmn_js_container"></div> 39ae85f1faSJaap de Haan </div><!-- EDIT{"target":"plugin_bpmnio_dmn","secid":1,"range":"20-28"} --></div> 40ae85f1faSJaap de Haan OUT; 41ae85f1faSJaap de Haan 42ae85f1faSJaap de Haan $input = <<<IN 43ae85f1faSJaap de Haan <bpmnio type="dmn"> 44ae85f1faSJaap de Haan XML... 45ae85f1faSJaap de Haan </bpmnio> 46ae85f1faSJaap de Haan IN; 47ae85f1faSJaap de Haan 48ae85f1faSJaap de Haan $instructions = p_get_instructions($input); 49ae85f1faSJaap de Haan $xhtml = p_render('xhtml', $instructions, $info); 50ae85f1faSJaap de Haan 51ae85f1faSJaap de Haan $this->assertEquals($expected, $xhtml); 52ae85f1faSJaap de Haan } 53*242a8e5cSJaap de Haan 54*242a8e5cSJaap de Haan /** 55*242a8e5cSJaap de Haan * Test that type defaults to bpmn when not specified 56*242a8e5cSJaap de Haan */ 57*242a8e5cSJaap de Haan public function test_syntax_default_type() { 58*242a8e5cSJaap de Haan $info = array(); 59*242a8e5cSJaap de Haan 60*242a8e5cSJaap de Haan $input = <<<IN 61*242a8e5cSJaap de Haan <bpmnio> 62*242a8e5cSJaap de Haan XML... 63*242a8e5cSJaap de Haan </bpmnio> 64*242a8e5cSJaap de Haan IN; 65*242a8e5cSJaap de Haan 66*242a8e5cSJaap de Haan $instructions = p_get_instructions($input); 67*242a8e5cSJaap de Haan $xhtml = p_render('xhtml', $instructions, $info); 68*242a8e5cSJaap de Haan 69*242a8e5cSJaap de Haan $this->assertStringContainsString('bpmn_js_data', $xhtml); 70*242a8e5cSJaap de Haan $this->assertStringContainsString('bpmn_js_canvas', $xhtml); 71*242a8e5cSJaap de Haan $this->assertStringContainsString('bpmn_js_container', $xhtml); 72*242a8e5cSJaap de Haan } 73*242a8e5cSJaap de Haan 74*242a8e5cSJaap de Haan /** 75*242a8e5cSJaap de Haan * Test empty content between tags 76*242a8e5cSJaap de Haan */ 77*242a8e5cSJaap de Haan public function test_syntax_empty_content() { 78*242a8e5cSJaap de Haan $info = array(); 79*242a8e5cSJaap de Haan 80*242a8e5cSJaap de Haan $input = <<<IN 81*242a8e5cSJaap de Haan <bpmnio type="bpmn"> 82*242a8e5cSJaap de Haan </bpmnio> 83*242a8e5cSJaap de Haan IN; 84*242a8e5cSJaap de Haan 85*242a8e5cSJaap de Haan $instructions = p_get_instructions($input); 86*242a8e5cSJaap de Haan $xhtml = p_render('xhtml', $instructions, $info); 87*242a8e5cSJaap de Haan 88*242a8e5cSJaap de Haan // Should still produce the structure, with base64 of whitespace/empty 89*242a8e5cSJaap de Haan $this->assertStringContainsString('plugin-bpmnio', $xhtml); 90*242a8e5cSJaap de Haan $this->assertStringContainsString('bpmn_js_data', $xhtml); 91*242a8e5cSJaap de Haan } 92*242a8e5cSJaap de Haan 93*242a8e5cSJaap de Haan /** 94*242a8e5cSJaap de Haan * Test that multiline XML content is properly base64-encoded 95*242a8e5cSJaap de Haan */ 96*242a8e5cSJaap de Haan public function test_syntax_multiline_content() { 97*242a8e5cSJaap de Haan $info = array(); 98*242a8e5cSJaap de Haan 99*242a8e5cSJaap de Haan $input = <<<IN 100*242a8e5cSJaap de Haan <bpmnio type="bpmn"> 101*242a8e5cSJaap de Haan <?xml version="1.0"?> 102*242a8e5cSJaap de Haan <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"> 103*242a8e5cSJaap de Haan </definitions> 104*242a8e5cSJaap de Haan </bpmnio> 105*242a8e5cSJaap de Haan IN; 106*242a8e5cSJaap de Haan 107*242a8e5cSJaap de Haan $instructions = p_get_instructions($input); 108*242a8e5cSJaap de Haan $xhtml = p_render('xhtml', $instructions, $info); 109*242a8e5cSJaap de Haan 110*242a8e5cSJaap de Haan $this->assertStringContainsString('bpmn_js_data', $xhtml); 111*242a8e5cSJaap de Haan // Verify the data section contains valid base64 112*242a8e5cSJaap de Haan preg_match('/<div class="bpmn_js_data">\s*(.*?)\s*<\/div>/s', $xhtml, $matches); 113*242a8e5cSJaap de Haan $this->assertNotEmpty($matches[1]); 114*242a8e5cSJaap de Haan $decoded = base64_decode(trim($matches[1]), true); 115*242a8e5cSJaap de Haan $this->assertNotFalse($decoded, 'Content should be valid base64'); 116*242a8e5cSJaap de Haan $this->assertStringContainsString('definitions', $decoded); 117*242a8e5cSJaap de Haan } 118*242a8e5cSJaap de Haan 119*242a8e5cSJaap de Haan /** 120*242a8e5cSJaap de Haan * Test that the plugin produces section edit markers for inline content 121*242a8e5cSJaap de Haan */ 122*242a8e5cSJaap de Haan public function test_syntax_section_edit_bpmn() { 123*242a8e5cSJaap de Haan $info = array(); 124*242a8e5cSJaap de Haan 125*242a8e5cSJaap de Haan $input = <<<IN 126*242a8e5cSJaap de Haan <bpmnio type="bpmn"> 127*242a8e5cSJaap de Haan Content 128*242a8e5cSJaap de Haan </bpmnio> 129*242a8e5cSJaap de Haan IN; 130*242a8e5cSJaap de Haan 131*242a8e5cSJaap de Haan $instructions = p_get_instructions($input); 132*242a8e5cSJaap de Haan $xhtml = p_render('xhtml', $instructions, $info); 133*242a8e5cSJaap de Haan 134*242a8e5cSJaap de Haan $this->assertStringContainsString('sectionedit', $xhtml); 135*242a8e5cSJaap de Haan $this->assertStringContainsString('plugin_bpmnio_bpmn', $xhtml); 136*242a8e5cSJaap de Haan } 137*242a8e5cSJaap de Haan 138*242a8e5cSJaap de Haan /** 139*242a8e5cSJaap de Haan * Test that the plugin produces section edit markers for DMN inline content 140*242a8e5cSJaap de Haan */ 141*242a8e5cSJaap de Haan public function test_syntax_section_edit_dmn() { 142*242a8e5cSJaap de Haan $info = array(); 143*242a8e5cSJaap de Haan 144*242a8e5cSJaap de Haan $input = <<<IN 145*242a8e5cSJaap de Haan <bpmnio type="dmn"> 146*242a8e5cSJaap de Haan Content 147*242a8e5cSJaap de Haan </bpmnio> 148*242a8e5cSJaap de Haan IN; 149*242a8e5cSJaap de Haan 150*242a8e5cSJaap de Haan $instructions = p_get_instructions($input); 151*242a8e5cSJaap de Haan $xhtml = p_render('xhtml', $instructions, $info); 152*242a8e5cSJaap de Haan 153*242a8e5cSJaap de Haan $this->assertStringContainsString('sectionedit', $xhtml); 154*242a8e5cSJaap de Haan $this->assertStringContainsString('plugin_bpmnio_dmn', $xhtml); 155*242a8e5cSJaap de Haan } 156*242a8e5cSJaap de Haan 157*242a8e5cSJaap de Haan /** 158*242a8e5cSJaap de Haan * Test that unrecognized text outside <bpmnio> is not affected 159*242a8e5cSJaap de Haan */ 160*242a8e5cSJaap de Haan public function test_syntax_no_interference() { 161*242a8e5cSJaap de Haan $info = array(); 162*242a8e5cSJaap de Haan 163*242a8e5cSJaap de Haan $input = <<<IN 164*242a8e5cSJaap de Haan Hello World 165*242a8e5cSJaap de Haan <bpmnio type="bpmn"> 166*242a8e5cSJaap de Haan XML... 167*242a8e5cSJaap de Haan </bpmnio> 168*242a8e5cSJaap de Haan Goodbye World 169*242a8e5cSJaap de Haan IN; 170*242a8e5cSJaap de Haan 171*242a8e5cSJaap de Haan $instructions = p_get_instructions($input); 172*242a8e5cSJaap de Haan $xhtml = p_render('xhtml', $instructions, $info); 173*242a8e5cSJaap de Haan 174*242a8e5cSJaap de Haan $this->assertStringContainsString('Hello World', $xhtml); 175*242a8e5cSJaap de Haan $this->assertStringContainsString('Goodbye World', $xhtml); 176*242a8e5cSJaap de Haan $this->assertStringContainsString('plugin-bpmnio', $xhtml); 177*242a8e5cSJaap de Haan } 178*242a8e5cSJaap de Haan 179*242a8e5cSJaap de Haan /** 180*242a8e5cSJaap de Haan * Test the handle method directly for ENTER state 181*242a8e5cSJaap de Haan */ 182*242a8e5cSJaap de Haan public function test_handle_enter_state() { 183*242a8e5cSJaap de Haan $plugin = plugin_load('syntax', 'bpmnio_bpmnio'); 184*242a8e5cSJaap de Haan $this->assertNotNull($plugin, 'Plugin should be loadable'); 185*242a8e5cSJaap de Haan 186*242a8e5cSJaap de Haan $handler = new Doku_Handler(); 187*242a8e5cSJaap de Haan $result = $plugin->handle('<bpmnio type="bpmn">', DOKU_LEXER_ENTER, 0, $handler); 188*242a8e5cSJaap de Haan 189*242a8e5cSJaap de Haan $this->assertEquals(DOKU_LEXER_ENTER, $result[0]); 190*242a8e5cSJaap de Haan $this->assertEquals('bpmn', $result[1]); 191*242a8e5cSJaap de Haan } 192*242a8e5cSJaap de Haan 193*242a8e5cSJaap de Haan /** 194*242a8e5cSJaap de Haan * Test the handle method directly for EXIT state 195*242a8e5cSJaap de Haan */ 196*242a8e5cSJaap de Haan public function test_handle_exit_state() { 197*242a8e5cSJaap de Haan $plugin = plugin_load('syntax', 'bpmnio_bpmnio'); 198*242a8e5cSJaap de Haan $handler = new Doku_Handler(); 199*242a8e5cSJaap de Haan $result = $plugin->handle('</bpmnio>', DOKU_LEXER_EXIT, 0, $handler); 200*242a8e5cSJaap de Haan 201*242a8e5cSJaap de Haan $this->assertEquals(DOKU_LEXER_EXIT, $result[0]); 202*242a8e5cSJaap de Haan } 203*242a8e5cSJaap de Haan 204*242a8e5cSJaap de Haan /** 205*242a8e5cSJaap de Haan * Test that the plugin is correctly registered 206*242a8e5cSJaap de Haan */ 207*242a8e5cSJaap de Haan public function test_plugin_registration() { 208*242a8e5cSJaap de Haan $plugin = plugin_load('syntax', 'bpmnio_bpmnio'); 209*242a8e5cSJaap de Haan $this->assertNotNull($plugin, 'Plugin should be loadable'); 210*242a8e5cSJaap de Haan $this->assertEquals('block', $plugin->getPType()); 211*242a8e5cSJaap de Haan $this->assertEquals('protected', $plugin->getType()); 212*242a8e5cSJaap de Haan $this->assertEquals(0, $plugin->getSort()); 213ae85f1faSJaap de Haan } 214