1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-22 07:14:47 -05:00
denoland-deno/tests/unit/test_util.ts
Bartek Iwańczuk b1c6142f74
BREAKING: DENO_FUTURE=1 by default, or welcome to Deno 2.0 (#25213)
This commit effectively turns Deno into Deno 2.0.

This is done by forcing `DENO_FUTURE=1` env var, that was available in
the past few months to try Deno 2 changes.

This commit contains several breaking changes scheduled for Deno 2:
- all deprecated JavaScript APIs are not available any more, mostly
`Deno.*` APIs
- `window` global is removed
- FFI, WebGPU and FS APIs are now stable and don't require
`--unstable-*` flags
- import assertions are no longer supported
- "bring your own node modules" is enabled by default

This is the first commit in a series that are scheduled before the Deno
2 release.

Follow up work is tracked in
https://github.com/denoland/deno/issues/25241.

---------

Co-authored-by: Asher Gomez <ashersaupingomez@gmail.com>
Co-authored-by: Nayeem Rahman <nayeemrmn99@gmail.com>
Co-authored-by: Nathan Whitaker <nathan@deno.com>
2024-08-30 13:58:58 -04:00

122 lines
3.1 KiB
TypeScript

// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
import * as colors from "@std/fmt/colors";
import { assert } from "@std/assert";
export { colors };
import { join, resolve } from "@std/path";
export {
assert,
assertEquals,
assertFalse,
AssertionError,
assertIsError,
assertMatch,
assertNotEquals,
assertNotStrictEquals,
assertRejects,
assertStrictEquals,
assertStringIncludes,
assertThrows,
fail,
unimplemented,
unreachable,
} from "@std/assert";
export { delay } from "@std/async/delay";
export { readLines } from "@std/io/read-lines";
export { parseArgs } from "@std/cli/parse-args";
// TODO(2.0): remove this and all the tests that depend on it.
export const DENO_FUTURE = true;
export function pathToAbsoluteFileUrl(path: string): URL {
path = resolve(path);
return new URL(`file://${Deno.build.os === "windows" ? "/" : ""}${path}`);
}
export function execCode(code: string): Promise<readonly [number, string]> {
return execCode2(code).finished();
}
export function execCode3(cmd: string, args: string[]) {
const command = new Deno.Command(cmd, {
args,
stdout: "piped",
stderr: "inherit",
});
const child = command.spawn();
const stdout = child.stdout.pipeThrough(new TextDecoderStream()).getReader();
let output = "";
return {
async waitStdoutText(text: string) {
while (true) {
const readData = await stdout.read();
if (readData.value) {
output += readData.value;
if (output.includes(text)) {
return;
}
}
if (readData.done) {
throw new Error(`Did not find text '${text}' in stdout.`);
}
}
},
async finished() {
while (true) {
const readData = await stdout.read();
if (readData.value) {
output += readData.value;
}
if (readData.done) {
break;
}
}
const status = await child.status;
return [status.code, output] as const;
},
};
}
export function execCode2(code: string) {
return execCode3(Deno.execPath(), ["eval", "--unstable", "--no-check", code]);
}
export function tmpUnixSocketPath(): string {
const folder = Deno.makeTempDirSync();
return join(folder, "socket");
}
export async function curlRequest(args: string[]) {
const { success, stdout, stderr } = await new Deno.Command("curl", {
args,
stdout: "piped",
stderr: "piped",
}).output();
const decoder = new TextDecoder();
assert(
success,
`Failed to cURL ${args}: stdout\n\n${
decoder.decode(stdout)
}\n\nstderr:\n\n${decoder.decode(stderr)}`,
);
return decoder.decode(stdout);
}
export async function curlRequestWithStdErr(args: string[]) {
const { success, stdout, stderr } = await new Deno.Command("curl", {
args,
stdout: "piped",
stderr: "piped",
}).output();
const decoder = new TextDecoder();
assert(
success,
`Failed to cURL ${args}: stdout\n\n${
decoder.decode(stdout)
}\n\nstderr:\n\n${decoder.decode(stderr)}`,
);
return [decoder.decode(stdout), decoder.decode(stderr)];
}