diff options
Diffstat (limited to 'testlib/talertest.ts')
-rw-r--r-- | testlib/talertest.ts | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/testlib/talertest.ts b/testlib/talertest.ts index 14074620b..16d8ec14e 100644 --- a/testlib/talertest.ts +++ b/testlib/talertest.ts @@ -19,7 +19,7 @@ * @author Florian Dold */ -type TestFn = (t: TestLib) => void; +type TestFn = (t: TestLib) => void | Promise<void>; interface Test { name: string; @@ -51,9 +51,15 @@ export async function run() { console.log(`1..${tests.length}`); for (let i in tests) { let t = tests[i]; + let passed = false; let lastMsg: string|undefined = undefined; let p = new Promise((resolve, reject) => { let pass = (msg?: string) => { + if (passed) { + reject(Error("called pass twice")); + return; + } + passed = true; lastMsg = msg; resolve(); }; @@ -69,7 +75,9 @@ export async function run() { throw Error("test failed"); } }; - t.testFn({pass,fail, assert}); + // Test might return a promise. If so, wait for it. + let r = t.testFn({pass,fail, assert}); + r.then(() => resolve(), (e) => reject(e)); }); console.log(`# ${t.name}`); @@ -80,6 +88,9 @@ export async function run() { try { await p; + if (passed) { + throw Error("test did not call 'pass'"); + } console.log(`ok ${Number(i) + 1} ${lastMsg}`); } catch (e) { console.error(e); |