1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-30 16:40:57 -05:00
denoland-deno/cli/tests/unit/test_util.ts
Florian Schwalm 0223ff36f1
chore(cli): Fix rename test for XFS (#21215)
Renaming a directory to a path where a non-empty directory already
exists was asserted to always fail with `ENOTEMPTY`
According to glibc manual the function may also fail with `EEXIST` on
"some other systems". One such case is using XFS [^1].

This commit handles the EEXIST case.

[^1]:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/xfs/xfs_inode.c?h=v4.18&id=94710cac0ef4ee177a63b5227664b38c95bbf703#n3082
2023-11-24 03:03:25 +01:00

89 lines
2.3 KiB
TypeScript

// Copyright 2018-2023 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/testing/asserts.ts";
export { deferred } from "../../../test_util/std/async/deferred.ts";
export type { Deferred } from "../../../test_util/std/async/deferred.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");
}