From 30308f354143683e998c9311f34d3f0234977051 Mon Sep 17 00:00:00 2001 From: Mirco Miranda Date: Wed, 17 Dec 2025 10:23:04 +0100 Subject: [PATCH] HEIF tests skipped using kde-ci.yml --- .kde-ci.yml | 2 +- CMakeLists.txt | 6 ++++++ README.md | 9 +++++++++ autotests/CMakeLists.txt | 40 +++++++++++++++++++++++++--------------- autotests/readtest.cpp | 18 ++++++------------ autotests/writetest.cpp | 29 +++++++++-------------------- 6 files changed, 56 insertions(+), 48 deletions(-) diff --git a/.kde-ci.yml b/.kde-ci.yml index 77960d1..11cdc88 100644 --- a/.kde-ci.yml +++ b/.kde-ci.yml @@ -7,5 +7,5 @@ Dependencies: Options: test-before-installing: True require-passing-tests-on: ['Linux', 'FreeBSD', 'Windows'] - cmake-options: "-DKIMAGEFORMATS_DDS=ON -DKIMAGEFORMATS_JXR=ON -DKIMAGEFORMATS_HEIF=ON" + cmake-options: "-DKIMAGEFORMATS_JXR=ON -DKIMAGEFORMATS_HEIF=ON -DKIMAGEFORMATS_HEIF_TEST:STRING=OFF -DKIMAGEFORMATS_HEJ2_TEST:STRING=OFF -DKIMAGEFORMATS_AVCI_TEST:STRING=OFF" per-test-timeout: 90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 988c7fa..64f28ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,6 +65,12 @@ set_package_properties(libavif PROPERTIES option(KIMAGEFORMATS_DDS "Enable plugin for DDS format" ON) option(KIMAGEFORMATS_HEIF "Enable plugin for HEIF format" OFF) +set(KIMAGEFORMATS_HEIF_TEST "ALL" CACHE STRING "Enable HEIF tests: OFF, READ_ONLY, ALL") +set_property(CACHE KIMAGEFORMATS_HEIF_TEST PROPERTY STRINGS "OFF" "READ_ONLY" "ALL") +set(KIMAGEFORMATS_HEJ2_TEST "ALL" CACHE STRING "Enable HEJ2 tests: OFF, READ_ONLY, ALL") +set_property(CACHE KIMAGEFORMATS_HEJ2_TEST PROPERTY STRINGS "OFF" "READ_ONLY" "ALL") +set(KIMAGEFORMATS_AVCI_TEST "ALL" CACHE STRING "Enable AVCI tests: OFF, ALL") +set_property(CACHE KIMAGEFORMATS_AVCI_TEST PROPERTY STRINGS "OFF" "ALL") if(KIMAGEFORMATS_HEIF) pkg_check_modules(LibHeif IMPORTED_TARGET libheif>=1.10.0) endif() diff --git a/README.md b/README.md index 5043e34..bbe1e9a 100644 --- a/README.md +++ b/README.md @@ -303,6 +303,15 @@ distributions. In particular, it is necessary that the HEIF library has support for HEVC codec. If HEVC codec is not available the plugin will compile but will fail the tests. +**If you are interested in compiling the plugin without running the tests, +also use the following string options:** +- `KIMAGEFORMATS_HEIF_TEST` to change the behaviour of HEIF tests. Set to +`"OFF"` (no test at all) or `"READ_ONLY"` (run read tests only). +- `KIMAGEFORMATS_HEJ2_TEST` to change the behaviour of HEJ2 tests. Set to +`"OFF"` (no test at all) or `"READ_ONLY"` (run read tests only).. +- `KIMAGEFORMATS_AVCI_TEST` to change the behaviour of AVCI tests. Set to +`"OFF"` (no test at all). + ### The EXR plugin The following defines can be defined in cmake to modify the behavior of the diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt index 465e411..644113f 100644 --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -111,27 +111,37 @@ if (TARGET avif) endif() if (LibHeif_FOUND) - kimageformats_read_tests( - heif - ) - # because the plug-ins use RGB->YUV conversion which sometimes results in 1 value difference. - kimageformats_write_tests(FUZZ 1 - heif-nodatacheck-lossless - ) - - if (LibHeif_VERSION VERSION_GREATER_EQUAL "1.17.0") - kimageformats_read_tests(FUZZ 1 - hej2 + if (KIMAGEFORMATS_HEIF_TEST STREQUAL "ALL" OR KIMAGEFORMATS_HEIF_TEST STREQUAL "READ_ONLY") + kimageformats_read_tests( + heif ) + endif() + if (KIMAGEFORMATS_HEIF_TEST STREQUAL "ALL") + # because the plug-ins use RGB->YUV conversion which sometimes results in 1 value difference. kimageformats_write_tests(FUZZ 1 - hej2-nodatacheck-lossless + heif-nodatacheck-lossless ) endif() + if (LibHeif_VERSION VERSION_GREATER_EQUAL "1.17.0") + if (KIMAGEFORMATS_HEJ2_TEST STREQUAL "ALL" OR KIMAGEFORMATS_HEJ2_TEST STREQUAL "READ_ONLY") + kimageformats_read_tests(FUZZ 1 + hej2 + ) + endif() + if (KIMAGEFORMATS_HEJ2_TEST STREQUAL "ALL") + kimageformats_write_tests(FUZZ 1 + hej2-nodatacheck-lossless + ) + endif() + endif() + if (LibHeif_VERSION VERSION_GREATER_EQUAL "1.19.6") - kimageformats_read_tests(FUZZ 4 - avci - ) + if (KIMAGEFORMATS_AVCI_TEST STREQUAL "ALL") + kimageformats_read_tests(FUZZ 4 + avci + ) + endif() endif() endif() diff --git a/autotests/readtest.cpp b/autotests/readtest.cpp index 582e3e8..6d1a5f0 100644 --- a/autotests/readtest.cpp +++ b/autotests/readtest.cpp @@ -258,13 +258,12 @@ int main(int argc, char **argv) }); QTextStream(stdout) << "QImageReader::supportedImageFormats: " << formatStrings.join(", ") << "\n"; + // checks if the format has read capability if (!formats.contains(format)) { - if (format == "avci" || format == "heif" || format == "hej2") { - QTextStream(stdout) << "WARNING : " << suffix << " is not supported with current libheif configuration!\n" - << "********* " - << "Finished basic read tests for " << suffix << " images *********\n"; - return 0; - } + QTextStream(stdout) << "FAIL : current configuration is missing necessary decoder(s) for " << suffix << "!\n" + << "********* " + << "Finished basic read tests for " << suffix << " images *********\n"; + return 1; } const QFileInfoList lstImgDir = imgdir.entryInfoList(); @@ -343,12 +342,7 @@ int main(int argc, char **argv) OptionTest optionTest; if (!optionTest.store(&inputReader)) { QTextStream(stdout) << "FAIL : " << fi.fileName() << ": error while reading options\n"; - if (format == "heif") { - // libheif + ffmpeg decoder is unable to load all HEIF files. - ++skipped; - } else { - ++failed; - } + ++failed; continue; } diff --git a/autotests/writetest.cpp b/autotests/writetest.cpp index c1e798c..f3f21db 100644 --- a/autotests/writetest.cpp +++ b/autotests/writetest.cpp @@ -380,12 +380,7 @@ int formatTest(const QString &suffix, bool createTemplates) QBuffer buffer(&ba); auto writtenImage = QImageReader(&buffer, suffix.toLatin1()).read(); if (writtenImage.isNull()) { - if (suffix.toLatin1() == "heif") { - // libheif + ffmpeg decoder is unable to load all HEIF files. - ++skipped; - } else { - ++failed; - } + ++failed; QTextStream(stdout) << "FAIL : error while reading the image " << formatName << "\n"; continue; } @@ -639,23 +634,17 @@ int main(int argc, char **argv) auto suffix = args.at(0); - // skip test if libheif configuration is obviously incomplete + // skip test if configuration is obviously incomplete QByteArray format = suffix.toLatin1(); const QList read_formats = QImageReader::supportedImageFormats(); - const QList write_formats = QImageWriter::supportedImageFormats(); - - if (!read_formats.contains(format)) { - if (format == "heif" || format == "hej2") { - QTextStream(stdout) << "WARNING : libheif configuration is missing necessary decoder(s)!\n"; - return 0; - } + if (!read_formats.contains(format)) { // checks if the format has read capability + QTextStream(stdout) << "FAIL : current configuration is missing necessary decoder(s) for " << format << "!\n"; + return 1; } - - if (!write_formats.contains(format)) { - if (format == "heif" || format == "hej2") { - QTextStream(stdout) << "WARNING : libheif configuration is missing necessary encoder(s)!\n"; - return 0; - } + const QList write_formats = QImageWriter::supportedImageFormats(); + if (!write_formats.contains(format)) { // checks if the format has write capability + QTextStream(stdout) << "FAIL : libraries configuration is missing necessary encoder(s) for " << format << "!\n"; + return 1; } // run test