1*dd9e8e5eSAndreas Gohr<?php 2*dd9e8e5eSAndreas Gohr 3*dd9e8e5eSAndreas Gohrnamespace dokuwiki\test\File; 4*dd9e8e5eSAndreas Gohr 5*dd9e8e5eSAndreas Gohruse dokuwiki\File\MediaFile; 6*dd9e8e5eSAndreas Gohr 7*dd9e8e5eSAndreas Gohr/** 8*dd9e8e5eSAndreas Gohr * Tests for dokuwiki\File\MediaFile display-dimension helpers. 9*dd9e8e5eSAndreas Gohr * 10*dd9e8e5eSAndreas Gohr * The fixture wiki:exif-orient-6.jpg is a 20x30 raw JPEG carrying EXIF 11*dd9e8e5eSAndreas Gohr * orientation 6, so its display orientation is 30x20 (portrait -> landscape swap). 12*dd9e8e5eSAndreas Gohr */ 13*dd9e8e5eSAndreas Gohrclass MediaFileTest extends \DokuWikiTest 14*dd9e8e5eSAndreas Gohr{ 15*dd9e8e5eSAndreas Gohr /** @var string */ 16*dd9e8e5eSAndreas Gohr private $rotated = 'wiki:exif-orient-6.jpg'; 17*dd9e8e5eSAndreas Gohr 18*dd9e8e5eSAndreas Gohr /** @var string */ 19*dd9e8e5eSAndreas Gohr private $unrotated = 'wiki:dokuwiki-128.png'; 20*dd9e8e5eSAndreas Gohr 21*dd9e8e5eSAndreas Gohr public function testDisplayDimsForNonImageReturnsZero() 22*dd9e8e5eSAndreas Gohr { 23*dd9e8e5eSAndreas Gohr $mf = new MediaFile('nonexistent:file.jpg'); 24*dd9e8e5eSAndreas Gohr $this->assertSame([0, 0], $mf->getDisplayDimensions(500, 500)); 25*dd9e8e5eSAndreas Gohr } 26*dd9e8e5eSAndreas Gohr 27*dd9e8e5eSAndreas Gohr public function testGetDisplayDimensionsBboxFitRotated() 28*dd9e8e5eSAndreas Gohr { 29*dd9e8e5eSAndreas Gohr $mf = new MediaFile($this->rotated); 30*dd9e8e5eSAndreas Gohr // raw 20x30 -> rotated 30x20 -> fit into 500x500 preserves aspect, 31*dd9e8e5eSAndreas Gohr // max dimension scales from 30 to 500 => 500 x round(500 * 20/30) = 500 x 333 32*dd9e8e5eSAndreas Gohr $this->assertSame([500, 333], $mf->getDisplayDimensions(500, 500, false)); 33*dd9e8e5eSAndreas Gohr } 34*dd9e8e5eSAndreas Gohr 35*dd9e8e5eSAndreas Gohr public function testGetDisplayDimensionsCropPassthrough() 36*dd9e8e5eSAndreas Gohr { 37*dd9e8e5eSAndreas Gohr $mf = new MediaFile($this->rotated); 38*dd9e8e5eSAndreas Gohr $this->assertSame([100, 100], $mf->getDisplayDimensions(100, 100, true)); 39*dd9e8e5eSAndreas Gohr } 40*dd9e8e5eSAndreas Gohr 41*dd9e8e5eSAndreas Gohr public function testGetDisplayDimensionsNativeWhenNoRequest() 42*dd9e8e5eSAndreas Gohr { 43*dd9e8e5eSAndreas Gohr $mf = new MediaFile($this->rotated); 44*dd9e8e5eSAndreas Gohr $this->assertSame([30, 20], $mf->getDisplayDimensions(0, 0, false)); 45*dd9e8e5eSAndreas Gohr } 46*dd9e8e5eSAndreas Gohr 47*dd9e8e5eSAndreas Gohr public function testGetDisplayDimensionsUnrotatedImage() 48*dd9e8e5eSAndreas Gohr { 49*dd9e8e5eSAndreas Gohr $mf = new MediaFile($this->unrotated); 50*dd9e8e5eSAndreas Gohr // non-JPEG: display dims equal raw dims 51*dd9e8e5eSAndreas Gohr $this->assertSame([$mf->getWidth(), $mf->getHeight()], $mf->getDisplayDimensions(0, 0, false)); 52*dd9e8e5eSAndreas Gohr } 53*dd9e8e5eSAndreas Gohr} 54