diff --git a/testsuite/tests/jsffi/all.T b/testsuite/tests/jsffi/all.T index aa84d3d34230c8e0aac1ef7356f28619a0926bf1..d482766abe17a51b82876e8edb0f6b82f57aaa55 100644 --- a/testsuite/tests/jsffi/all.T +++ b/testsuite/tests/jsffi/all.T @@ -11,6 +11,8 @@ setTestOpts([ extra_ways(['compacting_gc', 'nonmoving', 'sanity']) ]) +test('cancel', [], compile_and_run, ['-optl-Wl,--export=setTimeout']) + test('gameover', [], compile_and_run, ['-optl-Wl,--export=testJSException,--export=testHSException']) test('http', [], compile_and_run, ['-optl-Wl,--export=main']) diff --git a/testsuite/tests/jsffi/cancel.hs b/testsuite/tests/jsffi/cancel.hs new file mode 100644 index 0000000000000000000000000000000000000000..41b35c803e2d52e545380fe5207c0eac9c1bf749 --- /dev/null +++ b/testsuite/tests/jsffi/cancel.hs @@ -0,0 +1,12 @@ +module Test where + +import Control.Exception + +foreign import javascript safe "new Promise(res => setTimeout(res, $1))" + js_setTimeout :: Int -> IO () + +setTimeout :: Int -> IO () +setTimeout t = evaluate =<< js_setTimeout t + +foreign export javascript "setTimeout" + setTimeout :: Int -> IO () diff --git a/testsuite/tests/jsffi/cancel.mjs b/testsuite/tests/jsffi/cancel.mjs new file mode 100644 index 0000000000000000000000000000000000000000..875281535964bc02c161bfe1a1d9c2e7b2d0cf2a --- /dev/null +++ b/testsuite/tests/jsffi/cancel.mjs @@ -0,0 +1,13 @@ +export default async (__exports) => { + const test = new Promise((res) => { + const p = __exports.setTimeout(114514); + p.throwTo("1919810"); + p.catch((err) => { + console.log(`${err}`.split("\n")[0]); + res(); + }); + }); + + await test; + process.exit(); +}; diff --git a/testsuite/tests/jsffi/cancel.stdout b/testsuite/tests/jsffi/cancel.stdout new file mode 100644 index 0000000000000000000000000000000000000000..4d34c8f9d9395ca2f4d0db3b42b28a5907979cb8 --- /dev/null +++ b/testsuite/tests/jsffi/cancel.stdout @@ -0,0 +1 @@ +RuntimeError: JSException "1919810"