From 62290d57f747d3bdb61164aff73ddc55bd9f4957 Mon Sep 17 00:00:00 2001 From: Lucas CHOLLET Date: Fri, 17 Mar 2023 23:39:30 -0400 Subject: [PATCH] Tests: Add a test for SOF2 JPEGs with successive approximations This image was generated using `cjpeg` with the following scan file: 0 1 2: 0 0 0 2; 0: 1 63 0 1; 1: 1 63 0 1; 2: 1 63 0 1; 0 1 2: 0 0 2 1; 0: 1 63 1 0; 1: 1 63 1 0; 2: 1 63 1 0; 0 1 2: 0 0 1 0; --- Tests/LibGfx/TestImageDecoder.cpp | 11 +++++++++++ .../test-inputs/successive_approximation.jpg | Bin 0 -> 11736 bytes 2 files changed, 11 insertions(+) create mode 100644 Tests/LibGfx/test-inputs/successive_approximation.jpg diff --git a/Tests/LibGfx/TestImageDecoder.cpp b/Tests/LibGfx/TestImageDecoder.cpp index ce1ae607ca..564d0be3a0 100644 --- a/Tests/LibGfx/TestImageDecoder.cpp +++ b/Tests/LibGfx/TestImageDecoder.cpp @@ -145,6 +145,17 @@ TEST_CASE(test_jpeg_sof0_several_scans_odd_number_mcu) EXPECT_EQ(frame.image->size(), Gfx::IntSize(600, 600)); } +TEST_CASE(test_jpeg_sof2_successive_aproximation) +{ + auto file = MUST(Core::MappedFile::map(TEST_INPUT("successive_approximation.jpg"sv))); + EXPECT(Gfx::JPEGImageDecoderPlugin::sniff(file->bytes())); + auto plugin_decoder = MUST(Gfx::JPEGImageDecoderPlugin::create(file->bytes())); + EXPECT(plugin_decoder->initialize()); + + auto frame = MUST(plugin_decoder->frame(0)); + EXPECT_EQ(frame.image->size(), Gfx::IntSize(600, 800)); +} + TEST_CASE(test_pbm) { auto file = MUST(Core::MappedFile::map(TEST_INPUT("buggie-raw.pbm"sv))); diff --git a/Tests/LibGfx/test-inputs/successive_approximation.jpg b/Tests/LibGfx/test-inputs/successive_approximation.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3818265f9604901f42a4a69cac59ad29950dd4b1 GIT binary patch literal 11736 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 O*}!