channel(Red::class)->value(), $color->channel(Green::class)->value(), $color->channel(Blue::class)->value(), $color->channel(Alpha::class)->value(), ]) . ')'; return implode(' ', [ 'Failed asserting that color', $color, 'equals', 'rgba(' . $r . ', ' . $g . ', ' . $b . ', ' . $a . ')' ]); }; // build color channel value range $range = function (int $base, int $tolerance): array { return range(max($base - $tolerance, 0), min($base + $tolerance, 255)); }; $this->assertContains( $color->channel(Red::class)->value(), $range($r, $tolerance), $errorMessage($r, $g, $b, $a, $color) ); $this->assertContains( $color->channel(Green::class)->value(), $range($g, $tolerance), $errorMessage($r, $g, $b, $a, $color) ); $this->assertContains( $color->channel(Blue::class)->value(), $range($b, $tolerance), $errorMessage($r, $g, $b, $a, $color) ); $this->assertContains( $color->channel(Alpha::class)->value(), $range($a, $tolerance), $errorMessage($r, $g, $b, $a, $color) ); } protected function assertTransparency(ColorInterface $color) { $this->assertInstanceOf(RgbColor::class, $color); $channel = $color->channel(Alpha::class); $this->assertEquals(0, $channel->value()); } protected function assertMediaType(string|array $allowed, string|EncodedImage $input): void { $pointer = fopen('php://temp', 'rw'); fputs($pointer, (string) $input); rewind($pointer); $detected = mime_content_type($pointer); fclose($pointer); $allowed = is_string($allowed) ? [$allowed] : $allowed; $this->assertTrue(in_array($detected, $allowed)); } protected function assertMediaTypeBitmap(string|EncodedImage $input): void { $this->assertMediaType([ 'image/x-ms-bmp', 'image/bmp', 'bmp', 'ms-bmp', 'x-bitmap', 'x-bmp', 'x-ms-bmp', 'x-win-bitmap', 'x-windows-bmp', 'x-xbitmap', 'image/ms-bmp', 'image/x-bitmap', 'image/x-bmp', 'image/x-ms-bmp', 'image/x-win-bitmap', 'image/x-windows-bmp', 'image/x-xbitmap', ], $input); } }