diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-03-03 18:22:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-03 18:22:53 +0100 |
commit | ee452ad883c1c711839655a307b39e8eea5bf410 (patch) | |
tree | 2812a5201beb2b52c92d6e3c958f2288b0253b68 /cli/js/timers_test.ts | |
parent | 4dc004f0a24fdc81026ec03326b9943a95f1a31d (diff) |
add assertOps sanitizer in cli/js/ unit tests (#4209)
* add "assertOps" test assertion which makes sure test case
is not "leaking" ops - ie. after test finishes there are no
pending async ops
* apply "assertOps" to all tests in "cli/js/"
* fix numerous tests leaking ops
* document problem with edge case in "clearInterval"
and "clearTimeout" implementation where they
may leak async ops
* move "cli/js/worker_test.ts" to "cli/tests/worker_test.ts" and
run as integration test; workers leak ops because of missing
"terminate" implementation
Diffstat (limited to 'cli/js/timers_test.ts')
-rw-r--r-- | cli/js/timers_test.ts | 66 |
1 files changed, 33 insertions, 33 deletions
diff --git a/cli/js/timers_test.ts b/cli/js/timers_test.ts index 06367fc6d..8cb505ee4 100644 --- a/cli/js/timers_test.ts +++ b/cli/js/timers_test.ts @@ -1,5 +1,11 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -import { test, assert, assertEquals, assertNotEquals } from "./test_util.ts"; +import { + test, + createResolvable, + assert, + assertEquals, + assertNotEquals +} from "./test_util.ts"; function deferred(): { promise: Promise<{}>; @@ -178,8 +184,6 @@ test(async function timeoutCallbackThis(): Promise<void> { }); test(async function timeoutBindThis(): Promise<void> { - function noop(): void {} - const thisCheckPassed = [null, undefined, window, globalThis]; const thisCheckFailed = [ @@ -194,41 +198,37 @@ test(async function timeoutBindThis(): Promise<void> { Object.prototype ]; - thisCheckPassed.forEach( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (thisArg: any): void => { - let hasThrown = 0; - try { - setTimeout.call(thisArg, noop, 1); - hasThrown = 1; - } catch (err) { - if (err instanceof TypeError) { - hasThrown = 2; - } else { - hasThrown = 3; - } + for (const thisArg of thisCheckPassed) { + const resolvable = createResolvable(); + let hasThrown = 0; + try { + setTimeout.call(thisArg, () => resolvable.resolve(), 1); + hasThrown = 1; + } catch (err) { + if (err instanceof TypeError) { + hasThrown = 2; + } else { + hasThrown = 3; } - assertEquals(hasThrown, 1); } - ); + await resolvable; + assertEquals(hasThrown, 1); + } - thisCheckFailed.forEach( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (thisArg: any): void => { - let hasThrown = 0; - try { - setTimeout.call(thisArg, noop, 1); - hasThrown = 1; - } catch (err) { - if (err instanceof TypeError) { - hasThrown = 2; - } else { - hasThrown = 3; - } + for (const thisArg of thisCheckFailed) { + let hasThrown = 0; + try { + setTimeout.call(thisArg, () => {}, 1); + hasThrown = 1; + } catch (err) { + if (err instanceof TypeError) { + hasThrown = 2; + } else { + hasThrown = 3; } - assertEquals(hasThrown, 2); } - ); + assertEquals(hasThrown, 2); + } }); test(async function clearTimeoutShouldConvertToNumber(): Promise<void> { |