/
catj_test.ts
86 lines (72 loc) · 2.37 KB
/
catj_test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
import { assertStrictEquals } from "../testing/asserts.ts";
import { dirname, fromFileUrl } from "../path/mod.ts";
const moduleDir = dirname(fromFileUrl(import.meta.url));
Deno.test("[examples/catj] print an array", async () => {
const decoder = new TextDecoder();
const process = catj("testdata/catj/array.json");
await process.stdin.close();
const { stdout } = await process.output();
const actual = decoder.decode(stdout).trim();
const expected = [
'.[0] = "string"',
".[1] = 100",
'.[2].key = "value"',
'.[2].array[0] = "foo"',
'.[2].array[1] = "bar"',
].join("\n");
assertStrictEquals(actual, expected);
});
Deno.test("[examples/catj] print an object", async () => {
const decoder = new TextDecoder();
const process = catj("testdata/catj/object.json");
await process.stdin.close();
const { stdout } = await process.output();
const actual = decoder.decode(stdout).trim();
const expected = [
'.string = "foobar"',
".number = 123",
'.array[0].message = "hello"',
].join("\n");
assertStrictEquals(actual, expected);
});
Deno.test("[examples/catj] print multiple files", async () => {
const decoder = new TextDecoder();
const process = catj(
"testdata/catj/simple-object.json",
"testdata/catj/simple-array.json",
);
await process.stdin.close();
const { stdout } = await process.output();
const actual = decoder.decode(stdout).trim();
const expected = ['.message = "hello"', ".[0] = 1", ".[1] = 2"].join("\n");
assertStrictEquals(actual, expected);
});
Deno.test("[examples/catj] read from stdin", async () => {
const decoder = new TextDecoder();
const process = catj("-");
const input = `{ "foo": "bar" }`;
const writer = process.stdin.getWriter();
await writer.write(new TextEncoder().encode(input));
writer.releaseLock();
await process.stdin.close();
const { stdout } = await process.output();
const actual = decoder.decode(stdout).trim();
assertStrictEquals(actual, '.foo = "bar"');
});
function catj(...files: string[]): Deno.ChildProcess {
const process = new Deno.Command(Deno.execPath(), {
args: [
"run",
"--quiet",
"--allow-read",
"catj.ts",
...files,
],
cwd: moduleDir,
stdin: "piped",
stdout: "piped",
env: { NO_COLOR: "true" },
});
return process.spawn();
}