mirror of
https://github.com/denoland/deno.git
synced 2024-11-23 15:16:54 -05:00
f5e46c9bf2
This looks like a massive PR, but it's only a move from cli/tests -> tests, and updates of relative paths for files. This is the first step towards aggregate all of the integration test files under tests/, which will lead to a set of integration tests that can run without the CLI binary being built. While we could leave these tests under `cli`, it would require us to keep a more complex directory structure for the various test runners. In addition, we have a lot of complexity to ignore various test files in the `cli` project itself (cargo publish exclusion rules, autotests = false, etc). And finally, the `tests/` folder will eventually house the `test_ffi`, `test_napi` and other testing code, reducing the size of the root repo directory. For easier review, the extremely large and noisy "move" is in the first commit (with no changes -- just a move), while the remainder of the changes to actual files is in the second commit.
87 lines
2.1 KiB
TypeScript
87 lines
2.1 KiB
TypeScript
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
|
|
|
import * as colors from "@test_util/std/fmt/colors.ts";
|
|
export { colors };
|
|
import { join, resolve } from "@test_util/std/path/mod.ts";
|
|
export {
|
|
assert,
|
|
assertEquals,
|
|
assertFalse,
|
|
AssertionError,
|
|
assertIsError,
|
|
assertMatch,
|
|
assertNotEquals,
|
|
assertNotStrictEquals,
|
|
assertRejects,
|
|
assertStrictEquals,
|
|
assertStringIncludes,
|
|
assertThrows,
|
|
fail,
|
|
unimplemented,
|
|
unreachable,
|
|
} from "@test_util/std/assert/mod.ts";
|
|
export { delay } from "@test_util/std/async/delay.ts";
|
|
export { readLines } from "@test_util/std/io/read_lines.ts";
|
|
export { parse as parseArgs } from "@test_util/std/flags/mod.ts";
|
|
|
|
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 execCode2(code: string) {
|
|
const command = new Deno.Command(Deno.execPath(), {
|
|
args: [
|
|
"eval",
|
|
"--unstable",
|
|
"--no-check",
|
|
code,
|
|
],
|
|
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 tmpUnixSocketPath(): string {
|
|
const folder = Deno.makeTempDirSync();
|
|
return join(folder, "socket");
|
|
}
|