mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-02 07:15:27 +08:00
qt 6.5.1 original
This commit is contained in:
30
tests/manual/wasm/shared/run.sh
Normal file
30
tests/manual/wasm/shared/run.sh
Normal file
@ -0,0 +1,30 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Copyright (C) 2022 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
set -m
|
||||
|
||||
function removeServer()
|
||||
{
|
||||
kill $cleanupPid
|
||||
}
|
||||
|
||||
if [ -z "$1"]
|
||||
then
|
||||
echo "Usage: $0 testname, where testname is a test in the tests/manual/wasm directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
trap removeServer EXIT
|
||||
|
||||
script_dir=`dirname ${BASH_SOURCE[0]}`
|
||||
cd "$script_dir/../../../../"
|
||||
python3 -m http.server 8001 &
|
||||
cleanupPid=$!
|
||||
cd -
|
||||
|
||||
python3 -m webbrowser "http://localhost:8001/tests/manual/wasm/$1/tst_$1.html"
|
||||
|
||||
echo 'Press any key to continue...' >&2
|
||||
read -n 1
|
78
tests/manual/wasm/shared/testrunner.js
Normal file
78
tests/manual/wasm/shared/testrunner.js
Normal file
@ -0,0 +1,78 @@
|
||||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
|
||||
function output(message)
|
||||
{
|
||||
const outputLine = document.createElement('div');
|
||||
outputLine.style.fontFamily = 'monospace';
|
||||
outputLine.innerText = message;
|
||||
|
||||
document.body.appendChild(outputLine);
|
||||
|
||||
console.log(message);
|
||||
}
|
||||
|
||||
export class TestRunner
|
||||
{
|
||||
#testClassInstance
|
||||
|
||||
constructor(testClassInstance)
|
||||
{
|
||||
this.#testClassInstance = testClassInstance;
|
||||
}
|
||||
|
||||
async run(testCase)
|
||||
{
|
||||
const prototype = Object.getPrototypeOf(this.#testClassInstance);
|
||||
try {
|
||||
output(`Running ${testCase}`);
|
||||
if (!prototype.hasOwnProperty(testCase))
|
||||
throw new Error(`No such testcase ${testCase}`);
|
||||
|
||||
if (prototype.beforeEach) {
|
||||
await prototype.beforeEach.apply(this.#testClassInstance);
|
||||
}
|
||||
|
||||
await new Promise((resolve, reject) =>
|
||||
{
|
||||
let rejected = false;
|
||||
const timeout = window.setTimeout(() =>
|
||||
{
|
||||
rejected = true;
|
||||
reject(new Error('Timeout after 2 seconds'));
|
||||
}, 2000);
|
||||
prototype[testCase].apply(this.#testClassInstance).then(() =>
|
||||
{
|
||||
if (!rejected) {
|
||||
window.clearTimeout(timeout);
|
||||
output(`✅ Test passed ${testCase}`);
|
||||
resolve();
|
||||
}
|
||||
}).catch(reject);
|
||||
});
|
||||
} catch (e) {
|
||||
output(`❌ Failed ${testCase}: exception ${e} ${e.stack}`);
|
||||
} finally {
|
||||
if (prototype.afterEach) {
|
||||
await prototype.afterEach.apply(this.#testClassInstance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async runAll()
|
||||
{
|
||||
const SPECIAL_FUNCTIONS =
|
||||
['beforeEach', 'afterEach', 'beforeAll', 'afterAll', 'constructor'];
|
||||
const prototype = Object.getPrototypeOf(this.#testClassInstance);
|
||||
const testFunctions =
|
||||
Object.getOwnPropertyNames(prototype).filter(
|
||||
entry => SPECIAL_FUNCTIONS.indexOf(entry) === -1);
|
||||
|
||||
if (prototype.beforeAll)
|
||||
await prototype.beforeAll.apply(this.#testClassInstance);
|
||||
for (const fn of testFunctions)
|
||||
await this.run(fn);
|
||||
if (prototype.afterAll)
|
||||
await prototype.afterAll.apply(this.#testClassInstance);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user