diff options
-rw-r--r-- | src/declarative/qml/qmlcomponent.cpp | 9 | ||||
-rw-r--r-- | tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp | 28 |
2 files changed, 34 insertions, 3 deletions
diff --git a/src/declarative/qml/qmlcomponent.cpp b/src/declarative/qml/qmlcomponent.cpp index 0894758..02c9b10 100644 --- a/src/declarative/qml/qmlcomponent.cpp +++ b/src/declarative/qml/qmlcomponent.cpp @@ -368,8 +368,9 @@ void QmlComponent::setData(const QByteArray &data, const QUrl &url) QmlCompositeTypeData *typeData = QmlEnginePrivate::get(d->engine)->typeManager.getImmediate(data, url); - if (typeData->status == QmlCompositeTypeData::Waiting) { - + if (typeData->status == QmlCompositeTypeData::Waiting + || typeData->status == QmlCompositeTypeData::WaitingResources) + { d->typeData = typeData; d->typeData->addWaiter(d); @@ -414,7 +415,9 @@ void QmlComponent::loadUrl(const QUrl &url) QmlCompositeTypeData *data = QmlEnginePrivate::get(d->engine)->typeManager.get(d->url); - if (data->status == QmlCompositeTypeData::Waiting) { + if (data->status == QmlCompositeTypeData::Waiting + || data->status == QmlCompositeTypeData::WaitingResources) + { d->typeData = data; d->typeData->addWaiter(d); d->progress = data->progress; diff --git a/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp b/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp index 2746e98..78c66ad 100644 --- a/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp +++ b/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp @@ -7,6 +7,9 @@ #include <QtCore/qdir.h> #include "testtypes.h" +#include "../../../shared/util.h" +#include "../../network-settings.h" + /* This test case covers QML language issues. This covers everything that does involve evaluating ECMAScript expressions and bindings. @@ -69,6 +72,8 @@ private slots: void importsBuiltin(); void importsLocal_data(); void importsLocal(); + void importsRemote_data(); + void importsRemote(); void importsInstalled_data(); void importsInstalled(); void importsOrder_data(); @@ -805,6 +810,8 @@ void tst_qmllanguage::testType(const QString& qml, const QString& type) { QmlComponent component(&engine, qml.toUtf8(), TEST_FILE("empty.qml")); // just a file for relative local imports + QTRY_VERIFY(!component.isLoading()); + if (type.isEmpty()) { QVERIFY(component.isError()); } else { @@ -959,6 +966,27 @@ void tst_qmllanguage::importsLocal() testType(qml,type); } +void tst_qmllanguage::importsRemote_data() +{ + QTest::addColumn<QString>("qml"); + QTest::addColumn<QString>("type"); + + QString serverdir = "http://" + + QtNetworkSettings::serverName() + + "/qtest/declarative/qmllanguage"; + + QTest::newRow("remote import") << "import \""+serverdir+"\"\nTest {}" << "QFxRect"; + QTest::newRow("remote import with subdir") << "import \""+serverdir+"\"\nTestSubDir {}" << "QFxText"; + QTest::newRow("remote import with local") << "import \""+serverdir+"\"\nTestLocal {}" << "QFxImage"; +} + +void tst_qmllanguage::importsRemote() +{ + QFETCH(QString, qml); + QFETCH(QString, type); + testType(qml,type); +} + void tst_qmllanguage::importsInstalled_data() { QTest::addColumn<QString>("qml"); |