xref: /dokuwiki/_test/tests/File/MediaFileTest.php (revision dd9e8e5ea54469964faab99223a61bd48146ac42)
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