summaryrefslogtreecommitdiffstats
path: root/util/wasm/batchedtestrunner/qwasmjsruntime.js
diff options
context:
space:
mode:
Diffstat (limited to 'util/wasm/batchedtestrunner/qwasmjsruntime.js')
-rw-r--r--util/wasm/batchedtestrunner/qwasmjsruntime.js44
1 files changed, 26 insertions, 18 deletions
diff --git a/util/wasm/batchedtestrunner/qwasmjsruntime.js b/util/wasm/batchedtestrunner/qwasmjsruntime.js
index b8603f2618..3f2d421181 100644
--- a/util/wasm/batchedtestrunner/qwasmjsruntime.js
+++ b/util/wasm/batchedtestrunner/qwasmjsruntime.js
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
// Exposes platform capabilities as static properties
@@ -109,18 +109,19 @@ export class CompiledModule {
this.#resourceLocator = resourceLocator;
}
- static make(js, wasm, resourceLocator
- ) {
+ static make(js, wasm, entryFunctionName, resourceLocator)
+ {
const exports = {};
+ const module = {};
eval(js);
- if (!exports.createQtAppInstance) {
+ if (!module.exports) {
throw new Error(
- 'createQtAppInstance has not been exported by the main script'
+ '${entryFunctionName} has not been exported by the main script'
);
}
return new CompiledModule(
- exports.createQtAppInstance, js, wasm, resourceLocator
+ module.exports, js, wasm, resourceLocator
);
}
@@ -128,16 +129,9 @@ export class CompiledModule {
return await new Promise(async (resolve, reject) => {
let instance = undefined;
let result = undefined;
- const continuation = () => {
- if (!(instance && result))
- return;
- resolve({
- stdout: result.stdout,
- exitCode: result.exitCode,
- instance,
- });
- };
+ let testFinished = false;
+ const testFinishedEvent = new CustomEvent('testFinished');
instance = await this.#createQtAppInstanceFn((() => {
const params = this.#makeDefaultExecParams({
onInstantiationError: (error) => { reject(error); },
@@ -153,12 +147,26 @@ export class CompiledModule {
params.quit = (code, exception) => {
if (exception && exception.name !== 'ExitStatus')
reject(exception);
+ };
+ params.notifyTestFinished = (code) => {
result = { stdout: data, exitCode: code };
- continuation();
+ testFinished = true;
+ window.dispatchEvent(testFinishedEvent);
};
return params;
})());
- continuation();
+ if (!testFinished) {
+ await new Promise((resolve) => {
+ window.addEventListener('testFinished', () => {
+ resolve();
+ });
+ });
+ }
+ resolve({
+ stdout: result.stdout,
+ exitCode: result.exitCode,
+ instance,
+ });
});
}
@@ -218,6 +226,6 @@ export class ModuleLoader {
);
const [js, wasm] = await Promise.all([jsLoadPromise, wasmLoadPromise]);
- return CompiledModule.make(js, wasm, this.#resourceLocator);
+ return CompiledModule.make(js, wasm, `${moduleName}_entry`, this.#resourceLocator);
}
}