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