Serenity Operating System
at master 77 lines 2.6 kB view raw
1/* 2 * Copyright (c) 2023, Nico Weber <thakis@chromium.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibCore/MappedFile.h> 8#include <LibGfx/ICC/BinaryWriter.h> 9#include <LibGfx/ICC/Profile.h> 10#include <LibGfx/JPEGLoader.h> 11#include <LibGfx/PNGLoader.h> 12#include <LibGfx/WebPLoader.h> 13#include <LibTest/TestCase.h> 14 15#ifdef AK_OS_SERENITY 16# define TEST_INPUT(x) ("/usr/Tests/LibGfx/test-inputs/" x) 17#else 18# define TEST_INPUT(x) ("test-inputs/" x) 19#endif 20 21TEST_CASE(png) 22{ 23 auto file = MUST(Core::MappedFile::map(TEST_INPUT("icc-v2.png"sv))); 24 auto png = MUST(Gfx::PNGImageDecoderPlugin::create(file->bytes())); 25 EXPECT(png->initialize()); 26 auto icc_bytes = MUST(png->icc_data()); 27 EXPECT(icc_bytes.has_value()); 28 29 auto icc_profile = MUST(Gfx::ICC::Profile::try_load_from_externally_owned_memory(icc_bytes.value())); 30 EXPECT(icc_profile->is_v2()); 31} 32 33TEST_CASE(jpg) 34{ 35 auto file = MUST(Core::MappedFile::map(TEST_INPUT("icc-v4.jpg"sv))); 36 auto jpg = MUST(Gfx::JPEGImageDecoderPlugin::create(file->bytes())); 37 EXPECT(jpg->initialize()); 38 auto icc_bytes = MUST(jpg->icc_data()); 39 EXPECT(icc_bytes.has_value()); 40 41 auto icc_profile = MUST(Gfx::ICC::Profile::try_load_from_externally_owned_memory(icc_bytes.value())); 42 EXPECT(icc_profile->is_v4()); 43} 44 45TEST_CASE(webp_extended_lossless) 46{ 47 auto file = MUST(Core::MappedFile::map(TEST_INPUT("extended-lossless.webp"sv))); 48 auto webp = MUST(Gfx::WebPImageDecoderPlugin::create(file->bytes())); 49 EXPECT(webp->initialize()); 50 auto icc_bytes = MUST(webp->icc_data()); 51 EXPECT(icc_bytes.has_value()); 52 53 auto icc_profile = MUST(Gfx::ICC::Profile::try_load_from_externally_owned_memory(icc_bytes.value())); 54 EXPECT(icc_profile->is_v2()); 55} 56 57TEST_CASE(webp_extended_lossy) 58{ 59 auto file = MUST(Core::MappedFile::map(TEST_INPUT("extended-lossy.webp"sv))); 60 auto webp = MUST(Gfx::WebPImageDecoderPlugin::create(file->bytes())); 61 EXPECT(webp->initialize()); 62 auto icc_bytes = MUST(webp->icc_data()); 63 EXPECT(icc_bytes.has_value()); 64 65 auto icc_profile = MUST(Gfx::ICC::Profile::try_load_from_externally_owned_memory(icc_bytes.value())); 66 EXPECT(icc_profile->is_v2()); 67} 68 69TEST_CASE(serialize_icc) 70{ 71 auto file = MUST(Core::MappedFile::map(TEST_INPUT("p3-v4.icc"sv))); 72 auto icc_profile = MUST(Gfx::ICC::Profile::try_load_from_externally_owned_memory(file->bytes())); 73 EXPECT(icc_profile->is_v4()); 74 75 auto serialized_bytes = MUST(Gfx::ICC::encode(*icc_profile)); 76 EXPECT_EQ(serialized_bytes, file->bytes()); 77}