2021-01-10 21:59:07 -05:00
|
|
|
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
|
2020-09-26 11:54:26 -04:00
|
|
|
import { assertStrictEquals } from "../testing/asserts.ts";
|
|
|
|
import { dirname, fromFileUrl } from "../path/mod.ts";
|
2020-09-09 14:57:49 -04:00
|
|
|
|
2020-09-26 11:54:26 -04:00
|
|
|
const moduleDir = dirname(fromFileUrl(import.meta.url));
|
2020-02-24 08:31:40 -05:00
|
|
|
|
|
|
|
Deno.test("[examples/catj] print an array", async () => {
|
|
|
|
const decoder = new TextDecoder();
|
|
|
|
const process = catj("testdata/catj/array.json");
|
|
|
|
try {
|
2020-03-18 19:25:55 -04:00
|
|
|
const output = await process.output();
|
2020-02-24 08:31:40 -05:00
|
|
|
const actual = decoder.decode(output).trim();
|
|
|
|
const expected = [
|
|
|
|
'.[0] = "string"',
|
|
|
|
".[1] = 100",
|
|
|
|
'.[2].key = "value"',
|
|
|
|
'.[2].array[0] = "foo"',
|
2020-03-28 13:03:49 -04:00
|
|
|
'.[2].array[1] = "bar"',
|
2020-02-24 08:31:40 -05:00
|
|
|
].join("\n");
|
|
|
|
|
2020-06-05 23:43:00 -04:00
|
|
|
assertStrictEquals(actual, expected);
|
2020-02-24 08:31:40 -05:00
|
|
|
} finally {
|
2020-06-09 07:18:18 -04:00
|
|
|
process.stdin.close();
|
2020-02-24 08:31:40 -05:00
|
|
|
process.close();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
Deno.test("[examples/catj] print an object", async () => {
|
|
|
|
const decoder = new TextDecoder();
|
|
|
|
const process = catj("testdata/catj/object.json");
|
|
|
|
try {
|
2020-03-18 19:25:55 -04:00
|
|
|
const output = await process.output();
|
2020-02-24 08:31:40 -05:00
|
|
|
const actual = decoder.decode(output).trim();
|
|
|
|
const expected = [
|
|
|
|
'.string = "foobar"',
|
|
|
|
".number = 123",
|
2020-03-28 13:03:49 -04:00
|
|
|
'.array[0].message = "hello"',
|
2020-02-24 08:31:40 -05:00
|
|
|
].join("\n");
|
|
|
|
|
2020-06-05 23:43:00 -04:00
|
|
|
assertStrictEquals(actual, expected);
|
2020-02-24 08:31:40 -05:00
|
|
|
} finally {
|
2020-06-09 07:18:18 -04:00
|
|
|
process.stdin.close();
|
2020-02-24 08:31:40 -05:00
|
|
|
process.close();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
Deno.test("[examples/catj] print multiple files", async () => {
|
|
|
|
const decoder = new TextDecoder();
|
|
|
|
const process = catj(
|
|
|
|
"testdata/catj/simple-object.json",
|
2020-07-14 15:24:17 -04:00
|
|
|
"testdata/catj/simple-array.json",
|
2020-02-24 08:31:40 -05:00
|
|
|
);
|
|
|
|
try {
|
2020-03-18 19:25:55 -04:00
|
|
|
const output = await process.output();
|
2020-02-24 08:31:40 -05:00
|
|
|
const actual = decoder.decode(output).trim();
|
|
|
|
const expected = ['.message = "hello"', ".[0] = 1", ".[1] = 2"].join("\n");
|
|
|
|
|
2020-06-05 23:43:00 -04:00
|
|
|
assertStrictEquals(actual, expected);
|
2020-02-24 08:31:40 -05:00
|
|
|
} finally {
|
2020-06-09 07:18:18 -04:00
|
|
|
process.stdin.close();
|
2020-02-24 08:31:40 -05:00
|
|
|
process.close();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
Deno.test("[examples/catj] read from stdin", async () => {
|
|
|
|
const decoder = new TextDecoder();
|
|
|
|
const process = catj("-");
|
|
|
|
const input = `{ "foo": "bar" }`;
|
|
|
|
try {
|
2020-06-09 07:18:18 -04:00
|
|
|
await process.stdin.write(new TextEncoder().encode(input));
|
|
|
|
process.stdin.close();
|
2020-03-18 19:25:55 -04:00
|
|
|
const output = await process.output();
|
2020-02-24 08:31:40 -05:00
|
|
|
const actual = decoder.decode(output).trim();
|
|
|
|
|
2020-06-05 23:43:00 -04:00
|
|
|
assertStrictEquals(actual, '.foo = "bar"');
|
2020-02-24 08:31:40 -05:00
|
|
|
} finally {
|
|
|
|
process.close();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2020-06-09 07:18:18 -04:00
|
|
|
function catj(
|
|
|
|
...files: string[]
|
|
|
|
): Deno.Process<Deno.RunOptions & { stdin: "piped"; stdout: "piped" }> {
|
2020-02-24 08:31:40 -05:00
|
|
|
return Deno.run({
|
2020-11-20 12:01:58 -05:00
|
|
|
cmd: [
|
|
|
|
Deno.execPath(),
|
|
|
|
"run",
|
|
|
|
"--quiet",
|
|
|
|
"--allow-read",
|
|
|
|
"catj.ts",
|
|
|
|
...files,
|
|
|
|
],
|
2020-09-09 14:57:49 -04:00
|
|
|
cwd: moduleDir,
|
2020-02-24 08:31:40 -05:00
|
|
|
stdin: "piped",
|
|
|
|
stdout: "piped",
|
2020-03-28 13:03:49 -04:00
|
|
|
env: { NO_COLOR: "true" },
|
2020-02-24 08:31:40 -05:00
|
|
|
});
|
|
|
|
}
|