diff options
Diffstat (limited to 'cli/js/globals_test.ts')
-rw-r--r-- | cli/js/globals_test.ts | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/cli/js/globals_test.ts b/cli/js/globals_test.ts new file mode 100644 index 000000000..d7c50c5b1 --- /dev/null +++ b/cli/js/globals_test.ts @@ -0,0 +1,104 @@ +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +import { test, assert } from "./test_util.ts"; + +test(function globalThisExists(): void { + assert(globalThis != null); +}); + +test(function windowExists(): void { + assert(window != null); +}); + +test(function windowWindowExists(): void { + assert(window.window === window); +}); + +test(function globalThisEqualsWindow(): void { + assert(globalThis === window); +}); + +test(function DenoNamespaceExists(): void { + assert(Deno != null); +}); + +test(function DenoNamespaceEqualsWindowDeno(): void { + assert(Deno === window.Deno); +}); + +test(function DenoNamespaceIsFrozen(): void { + assert(Object.isFrozen(Deno)); +}); + +test(function webAssemblyExists(): void { + assert(typeof WebAssembly.compile === "function"); +}); + +test(function DenoNamespaceImmutable(): void { + const denoCopy = window.Deno; + try { + // @ts-ignore + Deno = 1; + } catch {} + assert(denoCopy === Deno); + try { + // @ts-ignore + window.Deno = 1; + } catch {} + assert(denoCopy === Deno); + try { + delete window.Deno; + } catch {} + assert(denoCopy === Deno); + + const { readFile } = Deno; + try { + // @ts-ignore + Deno.readFile = 1; + } catch {} + assert(readFile === Deno.readFile); + try { + delete window.Deno.readFile; + } catch {} + assert(readFile === Deno.readFile); + + // @ts-ignore + const { print } = Deno.core; + try { + // @ts-ignore + Deno.core.print = 1; + } catch {} + // @ts-ignore + assert(print === Deno.core.print); + try { + // @ts-ignore + delete Deno.core.print; + } catch {} + // @ts-ignore + assert(print === Deno.core.print); +}); + +test(async function windowQueueMicrotask(): Promise<void> { + let resolve1: () => void | undefined; + let resolve2: () => void | undefined; + let microtaskDone = false; + const p1 = new Promise( + (res): void => { + resolve1 = (): void => { + microtaskDone = true; + res(); + }; + } + ); + const p2 = new Promise( + (res): void => { + resolve2 = (): void => { + assert(microtaskDone); + res(); + }; + } + ); + window.queueMicrotask(resolve1!); + setTimeout(resolve2!, 0); + await p1; + await p2; +}); |