diff options
Diffstat (limited to 'tests/auto/declarative/qdeclarativemoduleplugin')
6 files changed, 80 insertions, 1 deletions
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit1/qmldir b/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit1/qmldir new file mode 100644 index 0000000000..7f5b3a362d --- /dev/null +++ b/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit1/qmldir @@ -0,0 +1,2 @@ +plugin AType + diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit1/temptest.qml b/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit1/temptest.qml new file mode 100644 index 0000000000..a45ac2dd8c --- /dev/null +++ b/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit1/temptest.qml @@ -0,0 +1,14 @@ +import QtQuick 1.0 + +// this qml file uses a type which is meant to be defined +// in a plugin which is specified in the qmldir file. +// however, that plugin doesn't exist, so it cannot be +// loaded, and hence the AItem type will be an unknown type. + +Item { + id: root + + AItem { + id: unknown + } +} diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit2/Test.qml b/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit2/Test.qml new file mode 100644 index 0000000000..83c65538ba --- /dev/null +++ b/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit2/Test.qml @@ -0,0 +1,5 @@ +import QtQuick 1.0 + +Item { + id: moduleRoot +} diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit2/qmldir b/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit2/qmldir new file mode 100644 index 0000000000..7c4def92fc --- /dev/null +++ b/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit2/qmldir @@ -0,0 +1,3 @@ +foo bar foo bar +internal foo bar foo +Test 1.0 Test.qml diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit2/temptest2.qml b/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit2/temptest2.qml new file mode 100644 index 0000000000..3eb29f43da --- /dev/null +++ b/tests/auto/declarative/qdeclarativemoduleplugin/data/implicit2/temptest2.qml @@ -0,0 +1,8 @@ +import QtQuick 1.0 + +// the type loader will implicitly search "." for a qmldir +// and the qmldir has various syntax errors in it. + +Item { + id: root +} diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp index 9d1c609616..06b65d3c6f 100644 --- a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp +++ b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp @@ -70,6 +70,7 @@ private slots: void remoteImportWithUnquotedUri(); void versionNotInstalled(); void versionNotInstalled_data(); + void implicitQmldir(); }; #ifdef Q_OS_SYMBIAN @@ -119,7 +120,6 @@ inline QUrl TEST_FILE(const QString &filename) return QUrl::fromLocalFile(fileInfo.absoluteDir().filePath(filename)); } - void tst_qdeclarativemoduleplugin::importsPlugin() { QDeclarativeEngine engine; @@ -308,6 +308,53 @@ void tst_qdeclarativemoduleplugin::versionNotInstalled() VERIFY_ERRORS(errorFile.toLatin1().constData()); } + +// test that errors are reporting correctly for plugin loading and qmldir parsing +void tst_qdeclarativemoduleplugin::implicitQmldir() +{ + QDeclarativeEngine engine; + + QObject *obj = 0; + QList<QDeclarativeError> errors; + QString qmldirUrl; + QStringList expectedErrors; + + // parsing qmldir succeeds, but plugin specified in the qmldir file doesn't exist + QDeclarativeComponent c(&engine, TEST_FILE("data/implicit1/temptest.qml")); + qmldirUrl = TEST_FILE("data/implicit1/qmldir").toString(); + errors = c.errors(); + QString moduleName = TEST_FILE("data/implicit1").toString().remove(0,7).replace(QLatin1String("/"), QLatin1String(".")); + expectedErrors << QString(QLatin1String(": module \"") + moduleName + QLatin1String("\" plugin \"AType\" not found")); + QVERIFY(errors.size() == expectedErrors.size()); + for (int i = 0; i < errors.size(); ++i) { + QString msg = qmldirUrl + expectedErrors.at(i); + QCOMPARE(errors.at(i).toString(), msg); // ensure that the expected message matches the real message. + } + QTest::ignoreMessage(QtWarningMsg, "QDeclarativeComponent: Component is not ready"); + obj = c.create(); + QVERIFY(!obj); + delete obj; + + // parsing qmldir fails due to syntax errors etc. + QDeclarativeComponent c2(&engine, TEST_FILE("data/implicit2/temptest2.qml")); + qmldirUrl = TEST_FILE("data/implicit2/qmldir").toString(); + errors = c2.errors(); + expectedErrors = QStringList(); + expectedErrors << QLatin1String(":1:12: unexpected token"); + expectedErrors << QLatin1String(":1: expected '.'"); + expectedErrors << QLatin1String(":2:17: unexpected token"); + QVERIFY(errors.size() == expectedErrors.size()); + for (int i = 0; i < errors.size(); ++i) { + QString msg = qmldirUrl + expectedErrors.at(i); + QCOMPARE(errors.at(i).toString(), msg); // ensure that the expected message matches the real message. + } + QTest::ignoreMessage(QtWarningMsg, "QDeclarativeComponent: Component is not ready"); + obj = c2.create(); + QVERIFY(!obj); + delete obj; +} + + QTEST_MAIN(tst_qdeclarativemoduleplugin) #include "tst_qdeclarativemoduleplugin.moc" |