-
Notifications
You must be signed in to change notification settings - Fork 29
/
test.js
90 lines (74 loc) · 1.63 KB
/
test.js
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
87
88
89
90
/** @format */
const tape = require('tape');
const jqPromise = require('./jq.js');
tape('jq behavior', async function(t) {
doJQTests(t, await jqPromise);
});
/*
tape('detect memory leaks', async function(t) {
const iterations = 1000;
t.plan(iterations);
const jq = await jqPromise;
[...Array(iterations)].forEach( (_, i) => {
t.doesNotThrow(
() => {
jq.raw(
`{"foo": 1, "bar": 2, "deep": { "qux": 3 } }`,
`.foo`,
);
},
);
t.throws(
() => {
jq.raw(
`{"foo": 1, "bar": 2, "deep": { "qux": 3 } }`,
`.foo,`,
);
},
/exit code/i,
);
});
});
*/
function doJQTests(t, jq) {
t.plan(8);
t.deepEqual(
Object.keys(jq).sort(),
["json", "raw"],
"expected API",
);
t.deepEquals(
jq.json(
{a: 'a letter', b: 'other letter', '%': null},
'[.a, .["%"]] | {res: .}'
),
{res: ['a letter', null]}
);
t.equals(
jq.raw('["a", {"12": "üñìçôdẽ"}]', '.[1]["12"] | {"what?": .}'),
`{\n "what?": "üñìçôdẽ"\n}`
);
t.equals(
jq.json({message: 'This is an emoji test 🙏'}, '.message'),
'This is an emoji test 🙏'
);
t.throws(
() => { jq.raw('invalid JSON', '.') },
null,
"Invalid JSON triggers an exception.",
);
t.equals(
jq.raw('123', '.'),
'123',
"raw() works after invalid JSON.",
);
t.deepEqual(
jq.json([123], '.'),
[123],
);
t.equals(
jq.raw(Number.MAX_SAFE_INTEGER + "000", '.'),
Number.MAX_SAFE_INTEGER + "000",
'Number that exceeds MAX_SAFE_INTEGER round-trips.',
);
}