aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmlimport
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-01-27 17:31:06 +0100
committerUlf Hermann <ulf.hermann@qt.io>2020-03-17 14:44:17 +0100
commit1eb20d70619cc896fc283bd6605b257a8750c518 (patch)
tree1d308932d38759a643d8eef49b211329a2cd5467 /tests/auto/qml/qqmlimport
parente3c64aff6579f04353608d4b218f031d9137d3f4 (diff)
Allow partial and absent version specifiers in import statements
An import statement without version specifier imports the latest version available, one with only a major version imports the latest minor version from that major version. Task-number: QTBUG-71278 Change-Id: I43907ae4e1052be533039d545de5391c41d38307 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/auto/qml/qqmlimport')
-rw-r--r--tests/auto/qml/qqmlimport/tst_qqmlimport.cpp80
1 files changed, 67 insertions, 13 deletions
diff --git a/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp b/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp
index 6e95ddfdea..e332d86338 100644
--- a/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp
+++ b/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp
@@ -48,6 +48,8 @@ private slots:
void interceptQmldir();
void singletonVersionResolution();
void removeDynamicPlugin();
+ void partialImportVersions_data();
+ void partialImportVersions();
void cleanup();
};
@@ -162,37 +164,57 @@ void tst_QQmlImport::completeQmldirPaths_data()
{
QTest::addColumn<QString>("uri");
QTest::addColumn<QStringList>("basePaths");
- QTest::addColumn<int>("majorVersion");
- QTest::addColumn<int>("minorVersion");
+ QTest::addColumn<QTypeRevision>("version");
QTest::addColumn<QStringList>("expectedPaths");
- QTest::newRow("QtQml") << "QtQml" << (QStringList() << "qtbase/qml/" << "path/to/qml") << 2 << 7
+ QTest::newRow("QtQml") << "QtQml" << (QStringList() << "qtbase/qml/" << "path/to/qml")
+ << QTypeRevision::fromVersion(2, 7)
<< (QStringList() << "qtbase/qml/QtQml.2.7/qmldir" << "path/to/qml/QtQml.2.7/qmldir"
<< "qtbase/qml/QtQml.2/qmldir" << "path/to/qml/QtQml.2/qmldir"
<< "qtbase/qml/QtQml/qmldir" << "path/to/qml/QtQml/qmldir");
- QTest::newRow("QtQml.Models") << "QtQml.Models" << QStringList("qtbase/qml/") << 2 << 2
+ QTest::newRow("QtQml.Models") << "QtQml.Models" << QStringList("qtbase/qml/")
+ << QTypeRevision::fromVersion(2, 2)
<< (QStringList() << "qtbase/qml/QtQml/Models.2.2/qmldir" << "qtbase/qml/QtQml.2.2/Models/qmldir"
<< "qtbase/qml/QtQml/Models.2/qmldir" << "qtbase/qml/QtQml.2/Models/qmldir"
<< "qtbase/qml/QtQml/Models/qmldir");
- QTest::newRow("org.qt-project.foo.bar") << "org.qt-project.foo.bar" << QStringList("qtbase/qml/") << 0 << 1
- << (QStringList() << "qtbase/qml/org/qt-project/foo/bar.0.1/qmldir" << "qtbase/qml/org/qt-project/foo.0.1/bar/qmldir" << "qtbase/qml/org/qt-project.0.1/foo/bar/qmldir" << "qtbase/qml/org.0.1/qt-project/foo/bar/qmldir"
- << "qtbase/qml/org/qt-project/foo/bar.0/qmldir" << "qtbase/qml/org/qt-project/foo.0/bar/qmldir" << "qtbase/qml/org/qt-project.0/foo/bar/qmldir" << "qtbase/qml/org.0/qt-project/foo/bar/qmldir"
- << "qtbase/qml/org/qt-project/foo/bar/qmldir");
+ QTest::newRow("org.qt-project.foo.bar 0.1") << "org.qt-project.foo.bar" << QStringList("qtbase/qml/")
+ << QTypeRevision::fromVersion(0, 1)
+ << (QStringList()
+ << "qtbase/qml/org/qt-project/foo/bar.0.1/qmldir"
+ << "qtbase/qml/org/qt-project/foo.0.1/bar/qmldir"
+ << "qtbase/qml/org/qt-project.0.1/foo/bar/qmldir"
+ << "qtbase/qml/org.0.1/qt-project/foo/bar/qmldir"
+ << "qtbase/qml/org/qt-project/foo/bar.0/qmldir"
+ << "qtbase/qml/org/qt-project/foo.0/bar/qmldir"
+ << "qtbase/qml/org/qt-project.0/foo/bar/qmldir"
+ << "qtbase/qml/org.0/qt-project/foo/bar/qmldir"
+ << "qtbase/qml/org/qt-project/foo/bar/qmldir");
+
+ QTest::newRow("org.qt-project.foo.bar 4") << "org.qt-project.foo.bar" << QStringList("qtbase/qml/")
+ << QTypeRevision::fromMajorVersion(4)
+ << (QStringList()
+ << "qtbase/qml/org/qt-project/foo/bar.4/qmldir"
+ << "qtbase/qml/org/qt-project/foo.4/bar/qmldir"
+ << "qtbase/qml/org/qt-project.4/foo/bar/qmldir"
+ << "qtbase/qml/org.4/qt-project/foo/bar/qmldir"
+ << "qtbase/qml/org/qt-project/foo/bar/qmldir");
+
+ QTest::newRow("org.qt-project.foo.bar") << "org.qt-project.foo.bar" << QStringList("qtbase/qml/")
+ << QTypeRevision()
+ << (QStringList()
+ << "qtbase/qml/org/qt-project/foo/bar/qmldir");
}
void tst_QQmlImport::completeQmldirPaths()
{
QFETCH(QString, uri);
QFETCH(QStringList, basePaths);
- QFETCH(int, majorVersion);
- QFETCH(int, minorVersion);
+ QFETCH(QTypeRevision, version);
QFETCH(QStringList, expectedPaths);
- QCOMPARE(QQmlImports::completeQmldirPaths(
- uri, basePaths, QTypeRevision::fromVersion(majorVersion, minorVersion)),
- expectedPaths);
+ QCOMPARE(QQmlImports::completeQmldirPaths(uri, basePaths, version), expectedPaths);
}
class QmldirUrlInterceptor : public QQmlAbstractUrlInterceptor {
@@ -283,6 +305,38 @@ void tst_QQmlImport::removeDynamicPlugin()
qmlClearTypeRegistrations();
}
+void tst_QQmlImport::partialImportVersions_data()
+{
+ QTest::addColumn<QString>("version");
+ QTest::addColumn<bool>("valid");
+
+ QTest::addRow("empty") << "" << true;
+ QTest::addRow("2") << "2" << true;
+ QTest::addRow("6") << "6" << true;
+ QTest::addRow("2.0") << "2.0" << false;
+ QTest::addRow("2.3") << "2.3" << true;
+ QTest::addRow("2.15") << "2.15" << true;
+ QTest::addRow("6.0") << "6.0" << true;
+}
+
+void tst_QQmlImport::partialImportVersions()
+{
+ QFETCH(QString, version);
+ QFETCH(bool, valid);
+
+ QQmlEngine engine;
+
+ QQmlComponent component(&engine);
+
+ component.setData("import QtQml " + version.toUtf8() + "; Connections { enabled: false }",
+ QUrl());
+ QCOMPARE(component.isReady(), valid);
+ if (valid) {
+ QScopedPointer<QObject> obj(component.create());
+ QVERIFY(!obj.isNull());
+ }
+}
+
QTEST_MAIN(tst_QQmlImport)