From 4b66c0bd7de6063982459fe45f69278fd0519b1b Mon Sep 17 00:00:00 2001 From: Mitch Curtis Date: Mon, 11 Jan 2021 17:36:30 +0100 Subject: Ensure that C++ Qt Quick tests are run with all applicable styles Since 8b534487044dfb3b464431ecb91ef4e0864af4ed, the C++ tests were only being run with the default style for the platform that they were run on. Fix this by keeping track of whether a default style is in use and checking it in the tests. Pick-to: 6.0 Change-Id: I4ddd90aba12ede83fff0d3d1002534e79fce8c87 Reviewed-by: Fabian Kosmale --- src/quickcontrols2/qquickstyle.cpp | 16 ++++++++++++++++ src/quickcontrols2/qquickstyle_p.h | 1 + tests/auto/qquickstyle/tst_qquickstyle.cpp | 1 + tests/auto/shared/qtest_quickcontrols.h | 6 +++++- 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/quickcontrols2/qquickstyle.cpp b/src/quickcontrols2/qquickstyle.cpp index f4e1da00..7c403529 100644 --- a/src/quickcontrols2/qquickstyle.cpp +++ b/src/quickcontrols2/qquickstyle.cpp @@ -184,7 +184,10 @@ struct QQuickStyleSpec // Find the config file. resolveConfigFilePath(); + usingDefaultStyle = false; + if (style.isEmpty() || style.toLower() == QStringLiteral("default")) { + usingDefaultStyle = true; style.clear(); qCDebug(lcQtQuickControlsStyle) << "no style (or Default) was specified;" @@ -226,6 +229,7 @@ struct QQuickStyleSpec custom = false; resolved = false; + usingDefaultStyle = false; style.clear(); fallbackStyle.clear(); fallbackMethod.clear(); @@ -250,6 +254,8 @@ struct QQuickStyleSpec bool custom = false; // Have we resolved the style yet? bool resolved = false; + // Are we using the default style for this platform (because no style was specified)? + bool usingDefaultStyle = false; // The name of the style. QString style; // The built-in style to use if the requested style cannot be found. @@ -262,6 +268,11 @@ struct QQuickStyleSpec Q_GLOBAL_STATIC(QQuickStyleSpec, styleSpec) +/* + Note that most of these functions (with the exception of e.g. isResolved()) + should not be called before the style has been resolved, as it's only after + that happens that they will have been set. +*/ QString QQuickStylePrivate::style() { return styleSpec()->style; @@ -287,6 +298,11 @@ bool QQuickStylePrivate::isResolved() return styleSpec()->resolved; } +bool QQuickStylePrivate::isUsingDefaultStyle() +{ + return styleSpec()->usingDefaultStyle; +} + void QQuickStylePrivate::init() { QQuickStyleSpec *spec = styleSpec(); diff --git a/src/quickcontrols2/qquickstyle_p.h b/src/quickcontrols2/qquickstyle_p.h index 8d0e5a8d..31c70893 100644 --- a/src/quickcontrols2/qquickstyle_p.h +++ b/src/quickcontrols2/qquickstyle_p.h @@ -63,6 +63,7 @@ public: static QString fallbackStyle(); static bool isCustomStyle(); static bool isResolved(); + static bool isUsingDefaultStyle(); static bool exists(); static void init(); static void reset(); diff --git a/tests/auto/qquickstyle/tst_qquickstyle.cpp b/tests/auto/qquickstyle/tst_qquickstyle.cpp index b9497500..97259051 100644 --- a/tests/auto/qquickstyle/tst_qquickstyle.cpp +++ b/tests/auto/qquickstyle/tst_qquickstyle.cpp @@ -137,6 +137,7 @@ void tst_QQuickStyle::configurationFile() QVERIFY2(!object.isNull(), qPrintable(labelComponent.errorString())); QCOMPARE(QQuickStyle::name(), expectedStyle); + QVERIFY(!QQuickStylePrivate::isUsingDefaultStyle()); // Test that fonts and palettes specified in configuration files are respected. QQuickLabel *label = qobject_cast(object.data()); diff --git a/tests/auto/shared/qtest_quickcontrols.h b/tests/auto/shared/qtest_quickcontrols.h index acd0304c..8eadd979 100644 --- a/tests/auto/shared/qtest_quickcontrols.h +++ b/tests/auto/shared/qtest_quickcontrols.h @@ -46,7 +46,11 @@ static QStringList testStyles() { - if (QQuickStyle::name().isEmpty()) + // It's not enough to check if the name is empty, because since Qt 6 + // we set an appropriate style for the platform if no style was specified. + // Also, we need the name check to come first, as isUsingDefaultStyle() does not do any resolving, + // and so its return value wouldn't be correct otherwise. + if (QQuickStyle::name().isEmpty() || QQuickStylePrivate::isUsingDefaultStyle()) return QQuickStylePrivate::builtInStyles(); return QStringList(QQuickStyle::name()); } -- cgit v1.2.3