diff options
author | Mitch Curtis <mitch.curtis@qt.io> | 2018-07-04 15:23:18 +0200 |
---|---|---|
committer | Mitch Curtis <mitch.curtis@qt.io> | 2018-07-16 09:39:26 +0000 |
commit | 62abe69e45a8958006b7b83cf1de6033be431eeb (patch) | |
tree | e7cf5e5a8ff619f018bc8848cdf807a3781ba6a9 /tests | |
parent | 5783cc354b85ba9a77378da34d911a0cfdb31b73 (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.pro | 8 | ||||
-rw-r--r-- | tests/auto/qquickstyle/qrcStyles1/QrcStyle1/Button.qml | 2 | ||||
-rw-r--r-- | tests/auto/qquickstyle/qrcStyles2/QrcStyle2/Button.qml | 2 | ||||
-rw-r--r-- | tests/auto/qquickstyle/tst_qquickstyle.cpp | 111 |
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" |