18
18
use Intervention \Image \FileExtension ;
19
19
use Intervention \Image \Interfaces \EncoderInterface ;
20
20
use Intervention \Image \Tests \BaseTestCase ;
21
+ use PHPUnit \Framework \Attributes \DataProvider ;
21
22
22
23
final class FileExtensionEncoderTest extends BaseTestCase
23
24
{
24
- private function testEncoder (string |FileExtension $ extension ): EncoderInterface
25
+ private function testEncoder (string |FileExtension $ extension, array $ options = [] ): EncoderInterface
25
26
{
26
- $ encoder = new class () extends FileExtensionEncoder
27
+ $ encoder = new class ($ extension , ... $ options ) extends FileExtensionEncoder
27
28
{
29
+ public function __construct ($ mediaType , ...$ options )
30
+ {
31
+ parent ::__construct ($ mediaType , ...$ options );
32
+ }
33
+
28
34
public function test ($ extension )
29
35
{
30
36
return $ this ->encoderByFileExtension ($ extension );
@@ -34,100 +40,56 @@ public function test($extension)
34
40
return $ encoder ->test ($ extension );
35
41
}
36
42
37
- public function testEncoderByFileExtensionString (): void
38
- {
39
- $ this ->assertInstanceOf (
40
- WebpEncoder::class,
41
- $ this ->testEncoder ('webp ' )
42
- );
43
-
43
+ #[DataProvider('targetEncoderProvider ' )]
44
+ public function testEncoderByFileExtensionString (
45
+ string |FileExtension $ fileExtension ,
46
+ string $ targetEncoderClassname ,
47
+ ): void {
44
48
$ this ->assertInstanceOf (
45
- AvifEncoder::class,
46
- $ this ->testEncoder ('avif ' )
47
- );
48
-
49
- $ this ->assertInstanceOf (
50
- JpegEncoder::class,
51
- $ this ->testEncoder ('jpeg ' )
52
- );
53
-
54
- $ this ->assertInstanceOf (
55
- BmpEncoder::class,
56
- $ this ->testEncoder ('bmp ' )
57
- );
58
-
59
- $ this ->assertInstanceOf (
60
- GifEncoder::class,
61
- $ this ->testEncoder ('gif ' )
62
- );
63
-
64
- $ this ->assertInstanceOf (
65
- PngEncoder::class,
66
- $ this ->testEncoder ('png ' )
67
- );
68
-
69
- $ this ->assertInstanceOf (
70
- TiffEncoder::class,
71
- $ this ->testEncoder ('tiff ' )
72
- );
73
-
74
- $ this ->assertInstanceOf (
75
- Jpeg2000Encoder::class,
76
- $ this ->testEncoder ('jp2 ' )
77
- );
78
-
79
- $ this ->assertInstanceOf (
80
- HeicEncoder::class,
81
- $ this ->testEncoder ('heic ' )
49
+ $ targetEncoderClassname ,
50
+ $ this ->testEncoder ($ fileExtension ),
82
51
);
83
52
}
84
53
85
- public function testEncoderByFileExtensionEnumMember (): void
54
+ public static function targetEncoderProvider (): array
86
55
{
87
- $ this ->assertInstanceOf (
88
- WebpEncoder::class,
89
- $ this ->testEncoder (FileExtension::WEBP )
90
- );
91
-
92
- $ this ->assertInstanceOf (
93
- AvifEncoder::class,
94
- $ this ->testEncoder (FileExtension::AVIF )
95
- );
96
-
97
- $ this ->assertInstanceOf (
98
- JpegEncoder::class,
99
- $ this ->testEncoder (FileExtension::JPG )
100
- );
101
-
102
- $ this ->assertInstanceOf (
103
- BmpEncoder::class,
104
- $ this ->testEncoder (FileExtension::BMP )
105
- );
106
-
107
- $ this ->assertInstanceOf (
108
- GifEncoder::class,
109
- $ this ->testEncoder (FileExtension::GIF )
110
- );
111
-
112
- $ this ->assertInstanceOf (
113
- PngEncoder::class,
114
- $ this ->testEncoder (FileExtension::PNG )
115
- );
116
-
117
- $ this ->assertInstanceOf (
118
- TiffEncoder::class,
119
- $ this ->testEncoder (FileExtension::TIF )
120
- );
56
+ return [
57
+ ['webp ' , WebpEncoder::class],
58
+ ['avif ' , AvifEncoder::class],
59
+ ['jpeg ' , JpegEncoder::class],
60
+ ['jpg ' , JpegEncoder::class],
61
+ ['bmp ' , BmpEncoder::class],
62
+ ['gif ' , GifEncoder::class],
63
+ ['png ' , PngEncoder::class],
64
+ ['tiff ' , TiffEncoder::class],
65
+ ['tif ' , TiffEncoder::class],
66
+ ['jp2 ' , Jpeg2000Encoder::class],
67
+ ['heic ' , HeicEncoder::class],
68
+ [FileExtension::WEBP , WebpEncoder::class],
69
+ [FileExtension::AVIF , AvifEncoder::class],
70
+ [FileExtension::JPG , JpegEncoder::class],
71
+ [FileExtension::BMP , BmpEncoder::class],
72
+ [FileExtension::GIF , GifEncoder::class],
73
+ [FileExtension::PNG , PngEncoder::class],
74
+ [FileExtension::TIF , TiffEncoder::class],
75
+ [FileExtension::TIFF , TiffEncoder::class],
76
+ [FileExtension::JP2 , Jpeg2000Encoder::class],
77
+ [FileExtension::HEIC , HeicEncoder::class],
78
+ ];
79
+ }
121
80
122
- $ this ->assertInstanceOf (
123
- Jpeg2000Encoder::class,
124
- $ this ->testEncoder (FileExtension::JPG2 )
81
+ public function testArgumentsNotSupportedByTargetEncoder (): void
82
+ {
83
+ $ encoder = $ this ->testEncoder (
84
+ 'png ' ,
85
+ [
86
+ 'interlaced ' => true , // is not ignored
87
+ 'quality ' => 10 , // is ignored because png encoder has no quality argument
88
+ ],
125
89
);
126
90
127
- $ this ->assertInstanceOf (
128
- HeicEncoder::class,
129
- $ this ->testEncoder (FileExtension::HEIC )
130
- );
91
+ $ this ->assertInstanceOf (PngEncoder::class, $ encoder );
92
+ $ this ->assertTrue ($ encoder ->interlaced );
131
93
}
132
94
133
95
public function testEncoderByFileExtensionUnknown (): void
0 commit comments