-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparser.test.js
More file actions
127 lines (120 loc) · 2.29 KB
/
Copy pathparser.test.js
File metadata and controls
127 lines (120 loc) · 2.29 KB
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// https://nodejs.org/api/assert.html
const fs = require("fs");
const assert = require("assert/strict");
const Parser = require("./parser");
const testFilter = process.argv[2];
if (testFilter) {
console.log(`Filter by: ${testFilter}`);
}
function runTest({ what, input }) {
// Run specific test
if (testFilter && !what.includes(testFilter)) {
console.log(`Skipped: ${what}`);
return;
}
try {
const actual = Parser.parse(input);
assert.deepEqual(actual, JSON.parse(input));
console.log(`✅ ${what}`);
} catch (error) {
console.error(`❌ ${what}`, error);
}
}
const simpleTests = [
// Empty value
{
what: "Empty Array",
input: "[]",
},
{
what: "Empty Object",
input: "{}",
},
{
what: "Empty String",
input: '""',
},
{
what: "Single Number",
input: "0",
},
{
what: "True",
input: "true",
},
{
what: "False",
input: "false",
},
{
what: "Null",
input: "null",
},
// Element
{
what: "Element (maybe whiteSpace between values)",
input: " \n\t\r[]\r\t\n ",
},
// String
{
what: "String Simple",
input: `"uno dos tres"`,
},
{
what: "String scaped quote",
input: `"A \\"quote\\" B"`,
},
{
what: "String scapemagedon",
input: `"A \\",\\n,\\r\\t\\b\\f\\/B"`,
},
// Array
{
what: "Array numbers",
input: "[1, 2, 3]",
},
{
what: "Array mixed",
input: '[[], {}, "", 0, true, false, null]',
},
{
what: "Array nested",
input: "[[1, [2, [3]]]]",
},
// Number
{
what: "Number positive integer",
input: "1984",
},
{
what: "Number negative integer",
input: "-37",
},
{
what: "Number positive with fraction",
input: "3.14",
},
{
what: "Number negative with fraction",
input: "-0.97463",
},
// Object
{
what: "Object flat",
input: `{ "type": "Beer", "style": "IPA", "name": "Hopster", "price": 10, "inStock": true }`,
},
{
what: "Object nested",
input: `{ "a": { "b": { "c": "OK" } } }`,
},
];
simpleTests.forEach(runTest);
// Grab example json files
const exampleTests = fs
.readdirSync(".")
.filter((f) => /^t\..*json/.exec(f))
.map((what) => {
const input = fs.readFileSync(what).toString();
return { what, input };
});
exampleTests.forEach(runTest);