diff options
8 files changed, 39 insertions, 0 deletions
diff --git a/src/qml/jsruntime/qv4include.cpp b/src/qml/jsruntime/qv4include.cpp index 90c6738c46..93badb3ed8 100644 --- a/src/qml/jsruntime/qv4include.cpp +++ b/src/qml/jsruntime/qv4include.cpp @@ -183,6 +183,8 @@ QV4::ReturnedValue QV4Include::method_include(QV4::CallContext *ctx) V4THROW_ERROR("Qt.include(): Can only be called from JavaScript files"); QUrl url(scope.engine->resolvedUrl(ctx->args()[0].toQStringNoThrow())); + if (scope.engine->qmlEngine() && scope.engine->qmlEngine()->urlInterceptor()) + url = scope.engine->qmlEngine()->urlInterceptor()->intercept(url, QQmlAbstractUrlInterceptor::JavaScriptFile); QV4::ScopedValue callbackFunction(scope, QV4::Primitive::undefinedValue()); if (ctx->argc() >= 2 && ctx->args()[1].as<QV4::FunctionObject>()) diff --git a/tests/auto/qml/qqmlengine/data/interception/includes/Intercepted.qml b/tests/auto/qml/qqmlengine/data/interception/includes/Intercepted.qml new file mode 100644 index 0000000000..449207e0e3 --- /dev/null +++ b/tests/auto/qml/qqmlengine/data/interception/includes/Intercepted.qml @@ -0,0 +1,5 @@ +import QtQml 2.0 + +QtObject { + property string myStr: "base file" +} diff --git a/tests/auto/qml/qqmlengine/data/interception/includes/intercepted.js b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted.js new file mode 100644 index 0000000000..fef9f3cd44 --- /dev/null +++ b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted.js @@ -0,0 +1,3 @@ +Qt.include("intercepted/included.js") + +var myStr = myString() diff --git a/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/included.js b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/included.js new file mode 100644 index 0000000000..b6e141dfaa --- /dev/null +++ b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/included.js @@ -0,0 +1,3 @@ +function myString() { + return "base include file"; +} diff --git a/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted.js b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted.js new file mode 100644 index 0000000000..fef9f3cd44 --- /dev/null +++ b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted.js @@ -0,0 +1,3 @@ +Qt.include("intercepted/included.js") + +var myStr = myString() diff --git a/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted/included.js b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted/included.js new file mode 100644 index 0000000000..c0215ebbe5 --- /dev/null +++ b/tests/auto/qml/qqmlengine/data/interception/includes/intercepted/intercepted/included.js @@ -0,0 +1,3 @@ +function myString() { + return "intercepted include file"; +} diff --git a/tests/auto/qml/qqmlengine/data/interception/includes/urlInterceptor.qml b/tests/auto/qml/qqmlengine/data/interception/includes/urlInterceptor.qml new file mode 100644 index 0000000000..be86195bd8 --- /dev/null +++ b/tests/auto/qml/qqmlengine/data/interception/includes/urlInterceptor.qml @@ -0,0 +1,11 @@ +import QtQml 2.0 +import "intercepted.js" as Script + +QtObject { + property url filePath: "doesNotExist.file" + property url resolvedUrl: Qt.resolvedUrl("doesNotExist.file"); + property url absoluteUrl: Qt.resolvedUrl("file:///doesNotExist.file"); + property string childString: child.myStr + property string scriptString: Script.myStr + property Intercepted child: Intercepted {} +} diff --git a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp index 486a0b4e87..eb432f3cfa 100644 --- a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp +++ b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp @@ -746,6 +746,15 @@ void tst_qqmlengine::urlInterceptor_data() << QStringLiteral("base file") << testFileUrl("interception/strings/intercepted/doesNotExist.file").toString() << QStringLiteral("file:///intercepted/doesNotExist.file"); + + QTest::newRow("InterceptIncludes") + << testFileUrl("interception/includes/urlInterceptor.qml") + << (QList<QQmlAbstractUrlInterceptor::DataType>() << QQmlAbstractUrlInterceptor::JavaScriptFile) + << testFileUrl("interception/includes/doesNotExist.file").toString() + << QStringLiteral("base file") + << QStringLiteral("intercepted include file") + << testFileUrl("interception/includes/doesNotExist.file").toString() + << QStringLiteral("file:///doesNotExist.file"); } void tst_qqmlengine::urlInterceptor() |