diff options
author | Morten Johan Sørvig <morten.sorvig@qt.io> | 2020-07-29 23:35:47 +0200 |
---|---|---|
committer | Morten Johan Sørvig <morten.sorvig@qt.io> | 2020-08-05 11:23:07 +0200 |
commit | 00f2d1a09bf9bb2d6fb9be4bdd12fa8229a11def (patch) | |
tree | e8561badbaef6e1cd9edb3360d61d0cfde79a1b6 /tests | |
parent | b6de6a96990577f8041ba1520bd0f2766be6027c (diff) |
Establish baseline for QIcon test on dpr > 1
After enabling Qt::AA_UseHighDpiPixmaps, QIcon::pixmap()
now returns pixmaps larger than the requested size on
devicePixelRatio > 1 screens.
Adapt tests to account for this changed behavior.
Skip tests where it’s unclear what the the expected
behavior is, or where the test logic does not apply
to dpr > 1.
This gives a clearer indication of where we are
(39 passed, 0 failed, 9 skipped), and enables using
the qicon test to catch regressions also when running
at dpr > 1.
Remove the "lowdpi" testcase flags from the qmake and
cmake project files.
Change-Id: Ia7ce722ae356fc496a91b54e9f5d590d13b9df62
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/gui/image/qicon/CMakeLists.txt | 3 | ||||
-rw-r--r-- | tests/auto/gui/image/qicon/qicon.pro | 2 | ||||
-rw-r--r-- | tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-open-64.png | bin | 0 -> 5182 bytes | |||
-rw-r--r-- | tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-save-64.png | bin | 0 -> 4286 bytes | |||
-rw-r--r-- | tests/auto/gui/image/qicon/tst_qicon.cpp | 90 | ||||
-rw-r--r-- | tests/auto/gui/image/qicon/tst_qicon.qrc | 2 |
6 files changed, 71 insertions, 26 deletions
diff --git a/tests/auto/gui/image/qicon/CMakeLists.txt b/tests/auto/gui/image/qicon/CMakeLists.txt index a419f9ba57..48ec1c348c 100644 --- a/tests/auto/gui/image/qicon/CMakeLists.txt +++ b/tests/auto/gui/image/qicon/CMakeLists.txt @@ -31,7 +31,6 @@ file(GLOB_RECURSE test_data_glob list(APPEND test_data ${test_data_glob}) qt_add_test(tst_qicon - LOWDPI # special case SOURCES tst_qicon.cpp PUBLIC_LIBRARIES @@ -60,9 +59,11 @@ set(tst_qicon_resource_files "./styles/commonstyle/images/standardbutton-open-128.png" "./styles/commonstyle/images/standardbutton-open-16.png" "./styles/commonstyle/images/standardbutton-open-32.png" + "./styles/commonstyle/images/standardbutton-open-64.png" "./styles/commonstyle/images/standardbutton-save-128.png" "./styles/commonstyle/images/standardbutton-save-16.png" "./styles/commonstyle/images/standardbutton-save-32.png" + "./styles/commonstyle/images/standardbutton-save-64.png" "image.png" "rect.png" "tst_qicon.cpp" diff --git a/tests/auto/gui/image/qicon/qicon.pro b/tests/auto/gui/image/qicon/qicon.pro index 3123f236d5..c96f0555ad 100644 --- a/tests/auto/gui/image/qicon/qicon.pro +++ b/tests/auto/gui/image/qicon/qicon.pro @@ -1,4 +1,4 @@ -CONFIG += testcase testcase_lowdpi +CONFIG += testcase TARGET = tst_qicon QT += testlib diff --git a/tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-open-64.png b/tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-open-64.png Binary files differnew file mode 100644 index 0000000000..25c41d737d --- /dev/null +++ b/tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-open-64.png diff --git a/tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-save-64.png b/tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-save-64.png Binary files differnew file mode 100644 index 0000000000..467dd23e3c --- /dev/null +++ b/tests/auto/gui/image/qicon/styles/commonstyle/images/standardbutton-save-64.png diff --git a/tests/auto/gui/image/qicon/tst_qicon.cpp b/tests/auto/gui/image/qicon/tst_qicon.cpp index b1a4e4312f..c03ca32ac3 100644 --- a/tests/auto/gui/image/qicon/tst_qicon.cpp +++ b/tests/auto/gui/image/qicon/tst_qicon.cpp @@ -134,17 +134,32 @@ void tst_QIcon::actualSize() QFETCH(QSize, argument); QFETCH(QSize, result); + // Skip two corner cases + if (qApp->devicePixelRatio() > 1 && (qstrcmp(QTest::currentDataTag(), "resource9") == 0 + || qstrcmp(QTest::currentDataTag(), "external9") == 0)) + QSKIP("Behavior is unspecified for devicePixelRatio > 1", QTest::QSkipAll); + + auto expectedDeviceSize = [](QSize deviceIndependentExpectedSize, QSize maxSourceImageSize) -> QSize { + qreal dpr = qApp->devicePixelRatio(); + return QSize(qMin(int(deviceIndependentExpectedSize.width() * dpr), maxSourceImageSize.width()), + qMin(int(deviceIndependentExpectedSize.height() * dpr), maxSourceImageSize.height())); + }; + + QSize sourceSize = QImage(source).size(); + QSize deviceIndependentSize = result; + QSize deviceSize = expectedDeviceSize(result, sourceSize); + { QPixmap pixmap(source); QIcon icon(pixmap); - QCOMPARE(icon.actualSize(argument), result); - QCOMPARE(icon.pixmap(argument).size(), result); + QCOMPARE(icon.actualSize(argument), deviceIndependentSize); + QCOMPARE(icon.pixmap(argument).size(), deviceSize); } { QIcon icon(source); - QCOMPARE(icon.actualSize(argument), result); - QCOMPARE(icon.pixmap(argument).size(), result); + QCOMPARE(icon.actualSize(argument), deviceIndependentSize); + QCOMPARE(icon.pixmap(argument).size(), deviceSize); } } @@ -167,6 +182,9 @@ void tst_QIcon::actualSize2_data() void tst_QIcon::actualSize2() { + if (qApp->devicePixelRatio() > 1) + QSKIP("Behavior is unspecified for devicePixelRatio > 1", QTest::SkipAll); + QIcon icon; icon.addPixmap(m_pngImageFileName); icon.addPixmap(m_pngRectFileName); @@ -380,7 +398,11 @@ void tst_QIcon::detach() img1 = icon1.pixmap(32, 32).toImage(); img2 = icon2.pixmap(32, 32).toImage(); - QCOMPARE(img1, img2); + + if (qApp->devicePixelRatio() > 1) + QVERIFY(img1 != img2); // we get an e.g. 64x64 image in dpr=2 displays + else + QCOMPARE(img1, img2); } void tst_QIcon::addFile() @@ -388,23 +410,41 @@ void tst_QIcon::addFile() QIcon icon; icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-16.png")); icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-32.png")); + icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-64.png")); icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-open-128.png")); icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-save-16.png"), QSize(), QIcon::Selected); icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-save-32.png"), QSize(), QIcon::Selected); + icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-save-64.png"), QSize(), QIcon::Selected); icon.addFile(QLatin1String(":/styles/commonstyle/images/standardbutton-save-128.png"), QSize(), QIcon::Selected); - QVERIFY(icon.pixmap(16, QIcon::Normal).toImage() == - QPixmap(QLatin1String(":/styles/commonstyle/images/standardbutton-open-16.png")).toImage()); - QVERIFY(icon.pixmap(32, QIcon::Normal).toImage() == - QPixmap(QLatin1String(":/styles/commonstyle/images/standardbutton-open-32.png")).toImage()); - QVERIFY(icon.pixmap(128, QIcon::Normal).toImage() == - QPixmap(QLatin1String(":/styles/commonstyle/images/standardbutton-open-128.png")).toImage()); - QVERIFY(icon.pixmap(16, QIcon::Selected).toImage() == - QPixmap(QLatin1String(":/styles/commonstyle/images/standardbutton-save-16.png")).toImage()); - QVERIFY(icon.pixmap(32, QIcon::Selected).toImage() == - QPixmap(QLatin1String(":/styles/commonstyle/images/standardbutton-save-32.png")).toImage()); - QVERIFY(icon.pixmap(128, QIcon::Selected).toImage() == - QPixmap(QLatin1String(":/styles/commonstyle/images/standardbutton-save-128.png")).toImage()); + const int maxImageSize = 128; + + auto expectedHighDpiImage = [=](int deviceIndependentSize, const QString &imagePathTemplate) -> QImage { + const int expectedImageSize = qMin(maxImageSize, deviceIndependentSize * qCeil(qApp->devicePixelRatio())); + const int expectedImageDpr = expectedImageSize / deviceIndependentSize; + const QString path = imagePathTemplate.arg(expectedImageSize); + QPixmap image(path); + image.setDevicePixelRatio(expectedImageDpr); + return image.toImage(); + }; + + QCOMPARE(icon.pixmap(16, QIcon::Normal).toImage(), + expectedHighDpiImage(16, ":/styles/commonstyle/images/standardbutton-open-%1.png")); + QCOMPARE(icon.pixmap(32, QIcon::Normal).toImage(), + expectedHighDpiImage(32, ":/styles/commonstyle/images/standardbutton-open-%1.png")); + QCOMPARE(icon.pixmap(64, QIcon::Normal).toImage(), + expectedHighDpiImage(64, ":/styles/commonstyle/images/standardbutton-open-%1.png")); + QCOMPARE(icon.pixmap(128, QIcon::Normal).toImage(), + expectedHighDpiImage(128, ":/styles/commonstyle/images/standardbutton-open-%1.png")); + + QCOMPARE(icon.pixmap(16, QIcon::Selected).toImage(), + expectedHighDpiImage(16, ":/styles/commonstyle/images/standardbutton-save-%1.png")); + QCOMPARE(icon.pixmap(32, QIcon::Selected).toImage(), + expectedHighDpiImage(32, ":/styles/commonstyle/images/standardbutton-save-%1.png")); + QCOMPARE(icon.pixmap(64, QIcon::Selected).toImage(), + expectedHighDpiImage(64, ":/styles/commonstyle/images/standardbutton-save-%1.png")); + QCOMPARE(icon.pixmap(128, QIcon::Selected).toImage(), + expectedHighDpiImage(128, ":/styles/commonstyle/images/standardbutton-save-%1.png")); } static bool sizeLess(const QSize &a, const QSize &b) @@ -605,13 +645,15 @@ void tst_QIcon::fromTheme() noIcon = QIcon::fromTheme("svg-icon", abIcon); QVERIFY(!noIcon.availableSizes().isEmpty()); - // Pixmaps should be no larger than the requested size (QTBUG-17953) - QCOMPARE(appointmentIcon.pixmap(22).size(), QSize(22, 22)); // exact - QCOMPARE(appointmentIcon.pixmap(32).size(), QSize(32, 32)); // exact - QCOMPARE(appointmentIcon.pixmap(48).size(), QSize(32, 32)); // smaller - QCOMPARE(appointmentIcon.pixmap(16).size(), QSize(16, 16)); // scaled down - QCOMPARE(appointmentIcon.pixmap(8).size(), QSize(8, 8)); // scaled down - QCOMPARE(appointmentIcon.pixmap(16).size(), QSize(16, 16)); // scaled down + // Pixmaps should be no larger than the requested size (for devicePixelRatio 1) (QTBUG-17953) + if (qApp->devicePixelRatio() == 1) { + QCOMPARE(appointmentIcon.pixmap(22).size(), QSize(22, 22)); // exact + QCOMPARE(appointmentIcon.pixmap(32).size(), QSize(32, 32)); // exact + QCOMPARE(appointmentIcon.pixmap(48).size(), QSize(32, 32)); // smaller + QCOMPARE(appointmentIcon.pixmap(16).size(), QSize(16, 16)); // scaled down + QCOMPARE(appointmentIcon.pixmap(8).size(), QSize(8, 8)); // scaled down + QCOMPARE(appointmentIcon.pixmap(16).size(), QSize(16, 16)); // scaled down + } QByteArray ba; // write to QByteArray diff --git a/tests/auto/gui/image/qicon/tst_qicon.qrc b/tests/auto/gui/image/qicon/tst_qicon.qrc index 4b347ec88c..23a6801e38 100644 --- a/tests/auto/gui/image/qicon/tst_qicon.qrc +++ b/tests/auto/gui/image/qicon/tst_qicon.qrc @@ -21,9 +21,11 @@ <file>./icons/themeparent/scalable/actions/appointment-new.svg</file> <file>./styles/commonstyle/images/standardbutton-open-16.png</file> <file>./styles/commonstyle/images/standardbutton-open-32.png</file> +<file>./styles/commonstyle/images/standardbutton-open-64.png</file> <file>./styles/commonstyle/images/standardbutton-open-128.png</file> <file>./styles/commonstyle/images/standardbutton-save-16.png</file> <file>./styles/commonstyle/images/standardbutton-save-32.png</file> +<file>./styles/commonstyle/images/standardbutton-save-64.png</file> <file>./styles/commonstyle/images/standardbutton-save-128.png</file> </qresource> </RCC> |