aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2018-07-04 15:23:18 +0200
committerMitch Curtis <mitch.curtis@qt.io>2018-07-16 09:39:26 +0000
commit62abe69e45a8958006b7b83cf1de6033be431eeb (patch)
treee7cf5e5a8ff619f018bc8848cdf807a3781ba6a9 /tests
parent5783cc354b85ba9a77378da34d911a0cfdb31b73 (diff)
Fix qrc paths in QT_QUICK_CONTROLS_STYLE_PATH
Parse the environment variable manually when the platform's list separator is ':', to avoid issues with qrc paths (which start with ':') not working. Task-number: QTBUG-68219 Change-Id: Ic71d49da5a72a37bc1d2e7b19fbf1de71b3917f3 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qquickstyle/qquickstyle.pro8
-rw-r--r--tests/auto/qquickstyle/qrcStyles1/QrcStyle1/Button.qml2
-rw-r--r--tests/auto/qquickstyle/qrcStyles2/QrcStyle2/Button.qml2
-rw-r--r--tests/auto/qquickstyle/tst_qquickstyle.cpp111
4 files changed, 123 insertions, 0 deletions
diff --git a/tests/auto/qquickstyle/qquickstyle.pro b/tests/auto/qquickstyle/qquickstyle.pro
index da74b6cd..983e5438 100644
--- a/tests/auto/qquickstyle/qquickstyle.pro
+++ b/tests/auto/qquickstyle/qquickstyle.pro
@@ -10,3 +10,11 @@ QT_PRIVATE += core-private gui-private quickcontrols2-private
include (../shared/util.pri)
TESTDATA = $$PWD/data/*
+
+qrcStyles1.files = $$files(qrcStyles1/QrcStyle1/*.qml)
+qrcStyles1.prefix = /
+RESOURCES += qrcStyles1
+
+qrcStyles2.files = $$files(qrcStyles2/QrcStyle2/*.qml)
+qrcStyles2.prefix = /
+RESOURCES += qrcStyles2
diff --git a/tests/auto/qquickstyle/qrcStyles1/QrcStyle1/Button.qml b/tests/auto/qquickstyle/qrcStyles1/QrcStyle1/Button.qml
new file mode 100644
index 00000000..5b08222c
--- /dev/null
+++ b/tests/auto/qquickstyle/qrcStyles1/QrcStyle1/Button.qml
@@ -0,0 +1,2 @@
+import QtQuick.Templates 2.0 as T
+T.Button { }
diff --git a/tests/auto/qquickstyle/qrcStyles2/QrcStyle2/Button.qml b/tests/auto/qquickstyle/qrcStyles2/QrcStyle2/Button.qml
new file mode 100644
index 00000000..5b08222c
--- /dev/null
+++ b/tests/auto/qquickstyle/qrcStyles2/QrcStyle2/Button.qml
@@ -0,0 +1,2 @@
+import QtQuick.Templates 2.0 as T
+T.Button { }
diff --git a/tests/auto/qquickstyle/tst_qquickstyle.cpp b/tests/auto/qquickstyle/tst_qquickstyle.cpp
index 4a34f24a..8b2358f8 100644
--- a/tests/auto/qquickstyle/tst_qquickstyle.cpp
+++ b/tests/auto/qquickstyle/tst_qquickstyle.cpp
@@ -55,6 +55,8 @@ private slots:
void commandLineArgument();
void environmentVariables();
void availableStyles();
+ void qrcInQtQuickControlsStylePathEnvVar_data();
+ void qrcInQtQuickControlsStylePathEnvVar();
private:
void loadControls();
@@ -67,6 +69,7 @@ void tst_QQuickStyle::cleanup()
QGuiApplicationPrivate::styleOverride.clear();
qunsetenv("QT_QUICK_CONTROLS_STYLE");
+ qunsetenv("QT_QUICK_CONTROLS_STYLE_PATH");
qunsetenv("QT_QUICK_CONTROLS_FALLBACK_STYLE");
qunsetenv("QT_QUICK_CONTROLS_CONF");
}
@@ -167,6 +170,114 @@ void tst_QQuickStyle::availableStyles()
}
}
+void tst_QQuickStyle::qrcInQtQuickControlsStylePathEnvVar_data()
+{
+ QTest::addColumn<QString>("environmentVariable");
+ QTest::addColumn<QStringList>("expectedAvailableStyles");
+
+ const QChar listSeparator = QDir::listSeparator();
+ const QStringList defaultAvailableStyles = QQuickStyle::availableStyles();
+
+ {
+ QString environmentVariable;
+ QDebug stream(&environmentVariable);
+ stream.noquote().nospace() << "/some/bogus/path/" << listSeparator
+ << ":/qrcStyles1";
+
+ QStringList expectedAvailableStyles = defaultAvailableStyles;
+ // We need to move the Default style to the start of the list,
+ // as that's what availableStyles() does.
+ expectedAvailableStyles.insert(1, QLatin1String("QrcStyle1"));
+
+ QTest::addRow("%s", qPrintable(environmentVariable))
+ << environmentVariable << expectedAvailableStyles;
+ }
+
+ {
+ QString environmentVariable;
+ QDebug stream(&environmentVariable);
+ stream.noquote().nospace() << ":/qrcStyles2" << listSeparator
+ << "/some/bogus/path";
+
+ QStringList expectedAvailableStyles = defaultAvailableStyles;
+ expectedAvailableStyles.insert(1, QLatin1String("QrcStyle2"));
+
+ QTest::addRow("%s", qPrintable(environmentVariable))
+ << environmentVariable << expectedAvailableStyles;
+ }
+
+ {
+ QString environmentVariable;
+ QDebug stream(&environmentVariable);
+ stream.noquote().nospace() << ":/qrcStyles1" << listSeparator
+ << ":/qrcStyles2" << listSeparator
+ << QFINDTESTDATA("data");
+
+ QStringList expectedAvailableStyles = defaultAvailableStyles;
+ expectedAvailableStyles.insert(1, QLatin1String("DummyStyle"));
+ expectedAvailableStyles.insert(1, QLatin1String("QrcStyle2"));
+ expectedAvailableStyles.insert(1, QLatin1String("QrcStyle1"));
+
+ QTest::addRow("%s", qPrintable(environmentVariable))
+ << environmentVariable << expectedAvailableStyles;
+ }
+
+ {
+ QString environmentVariable;
+ QDebug stream(&environmentVariable);
+ stream.noquote().nospace() << QFINDTESTDATA("data") << listSeparator
+ << ":/qrcStyles1" << listSeparator
+ << ":/qrcStyles2";
+
+ QStringList expectedAvailableStyles = defaultAvailableStyles;
+ expectedAvailableStyles.insert(1, QLatin1String("QrcStyle2"));
+ expectedAvailableStyles.insert(1, QLatin1String("QrcStyle1"));
+ expectedAvailableStyles.insert(1, QLatin1String("DummyStyle"));
+
+ QTest::addRow("%s", qPrintable(environmentVariable))
+ << environmentVariable << expectedAvailableStyles;
+ }
+
+ {
+ QString environmentVariable;
+ QDebug stream(&environmentVariable);
+ // Same as the last row, except it adds a superfluous separator
+ // to ensure that it handles it gracefully rather than failing an assertion.
+ stream.noquote().nospace() << QFINDTESTDATA("data") << listSeparator
+ << ":/qrcStyles1" << listSeparator
+ << ":/qrcStyles2" << listSeparator;
+
+ QStringList expectedAvailableStyles = defaultAvailableStyles;
+ expectedAvailableStyles.insert(1, QLatin1String("QrcStyle2"));
+ expectedAvailableStyles.insert(1, QLatin1String("QrcStyle1"));
+ expectedAvailableStyles.insert(1, QLatin1String("DummyStyle"));
+
+ QTest::addRow("%s", qPrintable(environmentVariable))
+ << environmentVariable << expectedAvailableStyles;
+ }
+}
+
+/*
+ Tests that qrc paths work with QT_QUICK_CONTROLS_STYLE_PATH.
+*/
+void tst_QQuickStyle::qrcInQtQuickControlsStylePathEnvVar()
+{
+ QFETCH(QString, environmentVariable);
+ QFETCH(QStringList, expectedAvailableStyles);
+
+ qputenv("QT_QUICK_CONTROLS_STYLE_PATH", environmentVariable.toLocal8Bit());
+
+ const QStringList availableStyles = QQuickStyle::availableStyles();
+ if (availableStyles != expectedAvailableStyles) {
+ QString failureMessage;
+ QDebug stream(&failureMessage);
+ stream << "Mismatch in actual vs expected available styles:"
+ << "\n Expected:" << expectedAvailableStyles
+ << "\n Actual:" << availableStyles;
+ QFAIL(qPrintable(failureMessage));
+ }
+}
+
QTEST_MAIN(tst_QQuickStyle)
#include "tst_qquickstyle.moc"