diff --git a/libraries/script-engine/src/v8/ScriptEngineV8.cpp b/libraries/script-engine/src/v8/ScriptEngineV8.cpp index d10b1c2d159..1b92fa8c56d 100644 --- a/libraries/script-engine/src/v8/ScriptEngineV8.cpp +++ b/libraries/script-engine/src/v8/ScriptEngineV8.cpp @@ -664,6 +664,11 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure, } // "Script" API is context-dependent, so it needs to be recreated for each new context registerGlobalObject("Script", new ScriptManagerScriptingInterface(_manager), ScriptEngine::ScriptOwnership); + auto Script = globalObject().property("Script"); + auto require = Script.property("require"); + auto resolve = Script.property("_requireResolve"); + require.setProperty("resolve", resolve, ScriptValue::ReadOnly | ScriptValue::Undeletable); + globalObject().setProperty("require", require, ScriptValue::ReadOnly | ScriptValue::Undeletable); // Script.require properties need to be copied, since that's where the Script.require cache is // Get source and destination Script.require objects diff --git a/tests/script-engine/src/ScriptEngineNetworkedTests.cpp b/tests/script-engine/src/ScriptEngineNetworkedTests.cpp index 9648e88d56e..c757e009c6e 100644 --- a/tests/script-engine/src/ScriptEngineNetworkedTests.cpp +++ b/tests/script-engine/src/ScriptEngineNetworkedTests.cpp @@ -120,7 +120,7 @@ ScriptManagerPointer ScriptEngineNetworkedTests::makeManager(const QString &scri return sm; } -void ScriptEngineNetworkedTests::testRequire() { +void ScriptEngineNetworkedTests::testScriptRequire() { auto sm = makeManager( "print(\"Starting\");" "Script.require('./tests/c.js');" @@ -153,6 +153,38 @@ void ScriptEngineNetworkedTests::testRequire() { } } +void ScriptEngineNetworkedTests::testRequire() { + auto sm = makeManager( + "print(\"Starting\");" + "require('./tests/c_require.js');" + "print(\"Done\");" + "Script.stop(true);", "testRequire.js"); + QStringList printed; + QStringList expected {"Starting", "Value from A: 6", "Value from B: 6", "Done"}; + + + QVERIFY(!sm->isRunning()); + QVERIFY(!sm->isStopped()); + QVERIFY(!sm->isFinished()); + + connect(sm.get(), &ScriptManager::printedMessage, [&printed](const QString& message, const QString& engineName){ + printed.append(message); + }); + + + qInfo() << "About to run script"; + sm->run(); + + QVERIFY(!sm->isRunning()); + QVERIFY(!sm->isStopped()); + QVERIFY(sm->isFinished()); + + QVERIFY(printed.length() == expected.length()); + for(int i=0;i