xref: /plugin/dwtimeline/_test/OptionsParserTest.php (revision 545c554be65100e9bb5eff6d4aa54c829680442a)
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