xref: /dokuwiki/_test/tests/Parsing/Helpers/MediaTest.php (revision 13a62f810fbd091d15ab734b467eaec0a6bf829a)
1<?php
2
3namespace dokuwiki\test\Parsing\Helpers;
4
5use dokuwiki\Parsing\Helpers\Media;
6
7/**
8 * Tests for media-URL parameter parsing shared between Media ({{...}})
9 * and GfmMedia (![alt](url)).
10 */
11class MediaTest extends \DokuWikiTest
12{
13    function testParseMediaNoParameters()
14    {
15        $this->assertSame(
16            ['src' => 'wiki:image.png', 'width' => null, 'height' => null,
17             'cache' => 'cache', 'linking' => 'details', 'align' => null],
18            Media::parseParameters('wiki:image.png')
19        );
20    }
21
22    function testParseMediaWidthOnly()
23    {
24        $r = Media::parseParameters('wiki:image.png?200');
25        $this->assertSame('wiki:image.png', $r['src']);
26        $this->assertSame('200', $r['width']);
27        $this->assertNull($r['height']);
28    }
29
30    function testParseMediaWidthAndHeight()
31    {
32        $r = Media::parseParameters('wiki:image.png?200x100');
33        $this->assertSame('200', $r['width']);
34        $this->assertSame('100', $r['height']);
35    }
36
37    function testParseMediaLinkingNolink()
38    {
39        $this->assertSame('nolink', Media::parseParameters('img.png?nolink')['linking']);
40    }
41
42    function testParseMediaLinkingDirect()
43    {
44        $this->assertSame('direct', Media::parseParameters('img.png?direct')['linking']);
45    }
46
47    function testParseMediaLinkingLinkonly()
48    {
49        $this->assertSame('linkonly', Media::parseParameters('img.png?linkonly')['linking']);
50    }
51
52    function testParseMediaCacheNocache()
53    {
54        $this->assertSame('nocache', Media::parseParameters('img.png?nocache')['cache']);
55    }
56
57    function testParseMediaCacheRecache()
58    {
59        $this->assertSame('recache', Media::parseParameters('img.png?recache')['cache']);
60    }
61
62    function testParseMediaCombinedParameters()
63    {
64        $r = Media::parseParameters('img.png?200x100&nolink&nocache');
65        $this->assertSame('img.png', $r['src']);
66        $this->assertSame('200', $r['width']);
67        $this->assertSame('100', $r['height']);
68        $this->assertSame('nolink', $r['linking']);
69        $this->assertSame('nocache', $r['cache']);
70    }
71
72    function testParseMediaAlignLeft()
73    {
74        $this->assertSame('left', Media::parseParameters('img.png?left')['align']);
75    }
76
77    function testParseMediaAlignRight()
78    {
79        $this->assertSame('right', Media::parseParameters('img.png?right')['align']);
80    }
81
82    function testParseMediaAlignCenter()
83    {
84        $this->assertSame('center', Media::parseParameters('img.png?center')['align']);
85    }
86
87    function testParseMediaAlignAbsentIsNull()
88    {
89        $this->assertNull(Media::parseParameters('img.png?200x100')['align']);
90        $this->assertNull(Media::parseParameters('img.png')['align']);
91    }
92
93    function testParseMediaAlignCaseInsensitive()
94    {
95        $this->assertSame('right', Media::parseParameters('img.png?RIGHT')['align']);
96    }
97
98    function testParseMediaAlignWithOtherParameters()
99    {
100        $r = Media::parseParameters('img.png?200x100&right&nocache');
101        $this->assertSame('right', $r['align']);
102        $this->assertSame('200', $r['width']);
103        $this->assertSame('nocache', $r['cache']);
104    }
105
106    function testParseMediaLastQuestionMarkIsDelimiter()
107    {
108        // URLs may carry their own query string; split on the *last* `?`
109        // so the URL query survives as part of the src.
110        $r = Media::parseParameters('https://example.com/img?v=2?200x100');
111        $this->assertSame('https://example.com/img?v=2', $r['src']);
112        $this->assertSame('200', $r['width']);
113        $this->assertSame('100', $r['height']);
114    }
115}
116