diff options
Diffstat (limited to 'cli/tests')
7 files changed, 102 insertions, 13 deletions
diff --git a/cli/tests/node_compat/polyfill_globals.js b/cli/tests/node_compat/polyfill_globals.js new file mode 100644 index 000000000..493cec87a --- /dev/null +++ b/cli/tests/node_compat/polyfill_globals.js @@ -0,0 +1,25 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +import process from "node:process"; +import { Buffer } from "node:buffer"; +import { + clearImmediate, + clearInterval, + clearTimeout, + setImmediate, + setInterval, + setTimeout, +} from "node:timers"; +import { performance } from "node:perf_hooks"; +import console from "node:console"; +globalThis.Buffer = Buffer; +globalThis.clearImmediate = clearImmediate; +globalThis.clearInterval = clearInterval; +globalThis.clearTimeout = clearTimeout; +globalThis.console = console; +globalThis.global = globalThis; +globalThis.performance = performance; +globalThis.process = process; +globalThis.setImmediate = setImmediate; +globalThis.setInterval = setInterval; +globalThis.setTimeout = setTimeout; +delete globalThis.window; diff --git a/cli/tests/node_compat/runner.ts b/cli/tests/node_compat/runner.ts index f12cc69b0..93fca6548 100644 --- a/cli/tests/node_compat/runner.ts +++ b/cli/tests/node_compat/runner.ts @@ -1,4 +1,5 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +import "./polyfill_globals.js"; import { createRequire } from "node:module"; const file = Deno.args[0]; if (!file) { diff --git a/cli/tests/testdata/npm/compare_globals/main.out b/cli/tests/testdata/npm/compare_globals/main.out index 286834168..46900b882 100644 --- a/cli/tests/testdata/npm/compare_globals/main.out +++ b/cli/tests/testdata/npm/compare_globals/main.out @@ -4,7 +4,20 @@ Download http://localhost:4545/npm/registry/@denotest/globals/1.0.0.tgz Download http://localhost:4545/npm/registry/@types/node/node-18.8.2.tgz Check file:///[WILDCARD]/npm/compare_globals/main.ts true +true [] -5 -undefined +false +function +function +function undefined +false +false +true +true +true +true +false +false +bar +bar diff --git a/cli/tests/testdata/npm/compare_globals/main.ts b/cli/tests/testdata/npm/compare_globals/main.ts index 0468404a8..8d3ae1ea0 100644 --- a/cli/tests/testdata/npm/compare_globals/main.ts +++ b/cli/tests/testdata/npm/compare_globals/main.ts @@ -2,6 +2,8 @@ import * as globals from "npm:@denotest/globals"; console.log(globals.global === globals.globalThis); +// @ts-expect-error even though these are the same object, they have different types +console.log(globals.globalThis === globalThis); console.log(globals.process.execArgv); type AssertTrue<T extends true> = never; @@ -13,15 +15,36 @@ type _TestHasNodeJsGlobal = NodeJS.Architecture; const controller = new AbortController(); controller.abort("reason"); // in the NodeJS declaration it doesn't have a reason +// Some globals are not the same between Node and Deno. +// @ts-expect-error incompatible types between Node and Deno +console.log(globalThis.setTimeout === globals.getSetTimeout()); + // Super edge case where some Node code deletes a global where the // Node code has its own global and the Deno code has the same global, // but it's different. Basically if some Node code deletes // one of these globals then we don't want it to suddenly inherit -// the Deno global. -globals.withNodeGlobalThis((nodeGlobalThis: any) => { - (globalThis as any).setTimeout = 5; - console.log(setTimeout); - delete nodeGlobalThis["setTimeout"]; - console.log(nodeGlobalThis["setTimeout"]); // should be undefined - console.log(globalThis["setTimeout"]); // should be undefined -}); +// the Deno global (or touch the Deno global at all). +console.log(typeof globalThis.setTimeout); +console.log(typeof globals.getSetTimeout()); +globals.deleteSetTimeout(); +console.log(typeof globalThis.setTimeout); +console.log(typeof globals.getSetTimeout()); + +// In Deno, the process global is not defined, but in Node it is. +console.log("process" in globalThis); +console.log( + Object.getOwnPropertyDescriptor(globalThis, "process") !== undefined, +); +globals.checkProcessGlobal(); + +// In Deno, the window global is defined, but in Node it is not. +console.log("window" in globalThis); +console.log( + Object.getOwnPropertyDescriptor(globalThis, "window") !== undefined, +); +globals.checkWindowGlobal(); + +// "Non-managed" globals are shared between Node and Deno. +(globalThis as any).foo = "bar"; +console.log((globalThis as any).foo); +console.log(globals.getFoo()); diff --git a/cli/tests/testdata/npm/registry/@denotest/globals/1.0.0/index.d.ts b/cli/tests/testdata/npm/registry/@denotest/globals/1.0.0/index.d.ts index 3f3eeb92a..1bbb82047 100644 --- a/cli/tests/testdata/npm/registry/@denotest/globals/1.0.0/index.d.ts +++ b/cli/tests/testdata/npm/registry/@denotest/globals/1.0.0/index.d.ts @@ -12,4 +12,10 @@ type _TestHasProcessGlobal = AssertTrue< typeof globalThis extends { process: any } ? true : false >; -export function withNodeGlobalThis(action: (global: typeof globalThis) => void): void; +export function deleteSetTimeout(): void; +export function getSetTimeout(): typeof setTimeout; + +export function checkProcessGlobal(): void; +export function checkWindowGlobal(): void; + +export function getFoo(): string;
\ No newline at end of file diff --git a/cli/tests/testdata/npm/registry/@denotest/globals/1.0.0/index.js b/cli/tests/testdata/npm/registry/@denotest/globals/1.0.0/index.js index daac83c66..b946bbd2a 100644 --- a/cli/tests/testdata/npm/registry/@denotest/globals/1.0.0/index.js +++ b/cli/tests/testdata/npm/registry/@denotest/globals/1.0.0/index.js @@ -2,6 +2,24 @@ exports.globalThis = globalThis; exports.global = global; exports.process = process; -exports.withNodeGlobalThis = function (action) { - action(globalThis); +exports.deleteSetTimeout = function () { + delete globalThis.setTimeout; }; + +exports.getSetTimeout = function () { + return globalThis.setTimeout; +}; + +exports.checkProcessGlobal = function () { + console.log("process" in globalThis); + console.log(Object.getOwnPropertyDescriptor(globalThis, "process") !== undefined); +}; + +exports.checkWindowGlobal = function () { + console.log("window" in globalThis); + console.log(Object.getOwnPropertyDescriptor(globalThis, "window") !== undefined); +} + +exports.getFoo = function () { + return globalThis.foo; +}
\ No newline at end of file diff --git a/cli/tests/testdata/run/with_package_json/npm_binary/main.out b/cli/tests/testdata/run/with_package_json/npm_binary/main.out index 56cdae6f9..9e8e87bae 100644 --- a/cli/tests/testdata/run/with_package_json/npm_binary/main.out +++ b/cli/tests/testdata/run/with_package_json/npm_binary/main.out @@ -1,6 +1,9 @@ [WILDCARD]package.json file found at '[WILDCARD]with_package_json[WILDCARD]npm_binary[WILDCARD]package.json' [WILDCARD] this +[WILDCARD] is +[WILDCARD] a +[WILDCARD] test |