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