1ae85f1faSJaap de Haan<?php 2*9ff8d41cSJaap de Haan 3ae85f1faSJaap de Haan/** 4ae85f1faSJaap de Haan * @group plugin_bpmnio 5ae85f1faSJaap de Haan * @group plugins 6ae85f1faSJaap de Haan */ 7*9ff8d41cSJaap de Haanclass syntax_plugin_bpmnio_test extends DokuWikiTest 8*9ff8d41cSJaap de Haan{ 9ae85f1faSJaap de Haan protected $pluginsEnabled = array('bpmnio'); 10ae85f1faSJaap de Haan 11*9ff8d41cSJaap de Haan public function test_syntax_bpmn() 12*9ff8d41cSJaap 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{"target":"plugin_bpmnio_bpmn","secid":1,"range":"21-29"} --></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 34*9ff8d41cSJaap de Haan public function test_syntax_dmn() 35*9ff8d41cSJaap 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{"target":"plugin_bpmnio_dmn","secid":1,"range":"20-28"} --></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 */ 60*9ff8d41cSJaap de Haan public function test_syntax_default_type() 61*9ff8d41cSJaap 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 */ 81*9ff8d41cSJaap de Haan public function test_syntax_empty_content() 82*9ff8d41cSJaap 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 */ 101*9ff8d41cSJaap de Haan public function test_syntax_multiline_content() 102*9ff8d41cSJaap 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 */ 128*9ff8d41cSJaap de Haan public function test_syntax_section_edit_bpmn() 129*9ff8d41cSJaap 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 */ 148*9ff8d41cSJaap de Haan public function test_syntax_section_edit_dmn() 149*9ff8d41cSJaap 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 */ 168*9ff8d41cSJaap de Haan public function test_syntax_no_interference() 169*9ff8d41cSJaap 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 188242a8e5cSJaap de Haan /** 189242a8e5cSJaap de Haan * Test the handle method directly for ENTER state 190242a8e5cSJaap de Haan */ 191*9ff8d41cSJaap de Haan public function test_handle_enter_state() 192*9ff8d41cSJaap de Haan { 193242a8e5cSJaap de Haan $plugin = plugin_load('syntax', 'bpmnio_bpmnio'); 194242a8e5cSJaap de Haan $this->assertNotNull($plugin, 'Plugin should be loadable'); 195242a8e5cSJaap de Haan 196242a8e5cSJaap de Haan $handler = new Doku_Handler(); 197242a8e5cSJaap de Haan $result = $plugin->handle('<bpmnio type="bpmn">', DOKU_LEXER_ENTER, 0, $handler); 198242a8e5cSJaap de Haan 199242a8e5cSJaap de Haan $this->assertEquals(DOKU_LEXER_ENTER, $result[0]); 200242a8e5cSJaap de Haan $this->assertEquals('bpmn', $result[1]); 201242a8e5cSJaap de Haan } 202242a8e5cSJaap de Haan 203242a8e5cSJaap de Haan /** 204242a8e5cSJaap de Haan * Test the handle method directly for EXIT state 205242a8e5cSJaap de Haan */ 206*9ff8d41cSJaap de Haan public function test_handle_exit_state() 207*9ff8d41cSJaap de Haan { 208242a8e5cSJaap de Haan $plugin = plugin_load('syntax', 'bpmnio_bpmnio'); 209242a8e5cSJaap de Haan $handler = new Doku_Handler(); 210242a8e5cSJaap de Haan $result = $plugin->handle('</bpmnio>', DOKU_LEXER_EXIT, 0, $handler); 211242a8e5cSJaap de Haan 212242a8e5cSJaap de Haan $this->assertEquals(DOKU_LEXER_EXIT, $result[0]); 213242a8e5cSJaap de Haan } 214242a8e5cSJaap de Haan 215242a8e5cSJaap de Haan /** 216242a8e5cSJaap de Haan * Test that the plugin is correctly registered 217242a8e5cSJaap de Haan */ 218*9ff8d41cSJaap de Haan public function test_plugin_registration() 219*9ff8d41cSJaap de Haan { 220242a8e5cSJaap de Haan $plugin = plugin_load('syntax', 'bpmnio_bpmnio'); 221242a8e5cSJaap de Haan $this->assertNotNull($plugin, 'Plugin should be loadable'); 222242a8e5cSJaap de Haan $this->assertEquals('block', $plugin->getPType()); 223242a8e5cSJaap de Haan $this->assertEquals('protected', $plugin->getType()); 224242a8e5cSJaap de Haan $this->assertEquals(0, $plugin->getSort()); 225ae85f1faSJaap de Haan } 226