1<?php 2 3namespace dokuwiki\plugin\dwtimeline\test; 4 5use DokuWikiTest; 6use syntax_plugin_dwtimeline_dwtimeline; 7 8class OptionsParserTest extends DokuWikiTest 9{ 10 protected $pluginsEnabled = ['dwtimeline']; 11 12 public function test_quoted_and_unquoted_values() 13 { 14 $sx = new syntax_plugin_dwtimeline_dwtimeline(); 15 $data = $sx->getTitleMatches('title="Release 2025-05-14" align=vert data=2025'); 16 17 $this->assertSame(hsc('Release 2025-05-14'), $data['title']); 18 $this->assertSame('vert', $data['align']); 19 $this->assertStringContainsString('data-point="2025"', $data['data']); 20 } 21 22 public function test_values_with_quotes_and_escapes() 23 { 24 $sx = new syntax_plugin_dwtimeline_dwtimeline(); 25 // test quotes 26 $data = $sx->getTitleMatches('title="He said \"Hi\" & it\'s fine"'); 27 28 $this->assertSame(hsc('He said "Hi" & it\'s fine'), $data['title']); 29 } 30 31 public function test_flag_and_empty_value() 32 { 33 $sx = new syntax_plugin_dwtimeline_dwtimeline(); 34 $data = $sx->getTitleMatches("foo style=''"); 35 36 $this->assertArrayHasKey('foo', $data); 37 $this->assertSame('', $data['foo']); 38 $this->assertSame('', $data['style']); // style is empty 39 } 40 41 public function test_internal_external_interwiki_email_links() 42 { 43 $sx = new syntax_plugin_dwtimeline_dwtimeline(); 44 45 // intern 46 $this->assertSame('wiki:start', $sx->getLink('[[wiki:start|Go]]')); 47 // extern (bracketed) 48 $this->assertSame('https://example.com', $sx->getLink('[[https://example.com|x]]')); 49 // raw URL (fallback) 50 $this->assertSame('https://example.com', $sx->getLink('See https://example.com now')); 51 // interwiki 52 $this->assertSame('doku>interwiki', $sx->getLink('[[doku>interwiki]]')); 53 // email 54 $this->assertSame('mailto:test@example.com', $sx->getLink('test@example.com')); 55 } 56 57 public function test_regression_unmatched_groups_do_not_warn() 58 { 59 $sx = new syntax_plugin_dwtimeline_dwtimeline(); 60 $data = $sx->getTitleMatches('title=foo bar'); 61 $this->assertSame(hsc('foo'), $data['title']); 62 $this->assertArrayHasKey('bar', $data); 63 $this->assertSame('', $data['bar']); 64 } 65 66 public function test_interwiki_in_milestone_title() 67 { 68 saveWikiText( 69 'playground:src', 70 '====== T ====== 71===== M =====', 72 'setup' 73 ); 74 75 $html = p_render( 76 'xhtml', 77 p_get_instructions('<milestone title="X" link="[[doku>interwiki]]"></milestone>'), 78 $info 79 ); 80 81 $this->assertStringContainsString('class="interwiki iw_doku"', $html); 82 } 83} 84