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 (). 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