forked from codesandbox/codesandbox-client
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjson.test.ts
More file actions
110 lines (94 loc) · 2.62 KB
/
json.test.ts
File metadata and controls
110 lines (94 loc) · 2.62 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
/*---------------------------------------------------------
* Copyright (C) Microsoft Corporation. All rights reserved.
*--------------------------------------------------------*/
'use strict';
import * as assert from 'assert';
import { parse as JSONparse } from '../json';
describe('JSON', () => {
function isValid(json: string): void {
let expected = JSON.parse(json);
let actual = JSONparse(json, null, false);
assert.deepEqual(actual, expected);
// let actual2 = JSONparse(json, true);
// assert.deepEqual(actual2, expected);
}
function isInvalid(json: string): void {
let hadErr = false;
try {
JSONparse(json, null, false);
} catch (err) {
hadErr = true;
}
assert.equal(hadErr, true, 'expected invalid: ' + json);
}
it('Invalid body', function () {
isInvalid('{}[]');
isInvalid('*');
});
it('Trailing Whitespace', function () {
isValid('{}\n\n');
});
it('Objects', function () {
isValid('{}');
isValid('{"key": "value"}');
isValid('{"key1": true, "key2": 3, "key3": [null], "key4": { "nested": {}}}');
isValid('{"constructor": true }');
isInvalid('{');
isInvalid('{3:3}');
isInvalid('{\'key\': 3}');
isInvalid('{"key" 3}');
isInvalid('{"key":3 "key2": 4}');
isInvalid('{"key":42, }');
isInvalid('{"key:42');
});
it('Arrays', function () {
isValid('[]');
isValid('[1, 2]');
isValid('[1, "string", false, {}, [null]]');
isInvalid('[');
isInvalid('[,]');
isInvalid('[1 2]');
isInvalid('[true false]');
isInvalid('[1, ]');
isInvalid('[[]');
isInvalid('["something"');
isInvalid('[magic]');
});
it('Strings', function () {
isValid('["string"]');
isValid('["\\"\\\\\\/\\b\\f\\n\\r\\t\\u1234\\u12AB"]');
isValid('["\\\\"]');
isInvalid('["');
isInvalid('["]');
isInvalid('["\\z"]');
isInvalid('["\\u"]');
isInvalid('["\\u123"]');
isInvalid('["\\u123Z"]');
isInvalid('[\'string\']');
});
it('Numbers', function () {
isValid('[0, -1, 186.1, 0.123, -1.583e+4, 1.583E-4, 5e8]');
// isInvalid('[+1]');
// isInvalid('[01]');
// isInvalid('[1.]');
// isInvalid('[1.1+3]');
// isInvalid('[1.4e]');
// isInvalid('[-A]');
});
it('misc', function () {
isValid('{}');
isValid('[null]');
isValid('{"a":true}');
isValid('{\n\t"key" : {\n\t"key2": 42\n\t}\n}');
isValid('{"key":[{"key2":42}]}');
isValid('{\n\t\n}');
isValid('{\n"first":true\n\n}');
isValid('{\n"key":32,\n\n"key2":45}');
isValid('{"a": 1,\n\n"d": 2}');
isValid('{"a": 1, "a": 2}');
isValid('{"a": { "a": 2, "a": 3}}');
isValid('[{ "a": 2, "a": 3}]');
isValid('{"key1":"first string", "key2":["second string"]}');
isInvalid('{\n"key":32,\nerror\n}');
});
});