summaryrefslogtreecommitdiff
path: root/cli/tests/unit/test_util.ts
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tests/unit/test_util.ts')
-rw-r--r--cli/tests/unit/test_util.ts47
1 files changed, 42 insertions, 5 deletions
diff --git a/cli/tests/unit/test_util.ts b/cli/tests/unit/test_util.ts
index 9a1b13038..ce945c7db 100644
--- a/cli/tests/unit/test_util.ts
+++ b/cli/tests/unit/test_util.ts
@@ -29,16 +29,53 @@ export function pathToAbsoluteFileUrl(path: string): URL {
return new URL(`file://${Deno.build.os === "windows" ? "/" : ""}${path}`);
}
-const decoder = new TextDecoder();
+export function execCode(code: string): Promise<readonly [number, string]> {
+ return execCode2(code).finished();
+}
-export async function execCode(code: string): Promise<[number, string]> {
- const output = await new Deno.Command(Deno.execPath(), {
+export function execCode2(code: string) {
+ const command = new Deno.Command(Deno.execPath(), {
args: [
"eval",
"--unstable",
"--no-check",
code,
],
- }).output();
- return [output.code, decoder.decode(output.stdout)];
+ 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;
+ },
+ };
}