-
Notifications
You must be signed in to change notification settings - Fork 5
/
tests.js
93 lines (81 loc) · 2.49 KB
/
tests.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
91
92
93
var assert = require("assert");
var arson = require("../index.js");
describe("encoding and decoding", function () {
it("should work with primitive values", function () {
function check(value) {
var enc = arson.encode(value);
var dec = arson.decode(enc);
if (isNaN(value)) {
assert.ok(isNaN(dec));
} else {
assert.deepEqual(value, dec);
}
}
check(0);
check(1234);
check(NaN);
check(Infinity);
check(-Infinity);
check(true);
check(false);
check("asdf");
check("");
check(null);
check(void 0);
check({ foo: void 0 });
});
it("should work with exotic object types", function () {
var r1 = /asdf/ig;
var r2 = arson.decode(arson.encode(r1));
assert.ok(r2 instanceof RegExp);
assert.strictEqual(r2.source, "asdf");
assert.strictEqual(r2.ignoreCase, true);
assert.strictEqual(r2.multiline, false);
assert.strictEqual(r2.global, true);
assert.ok(r2.test("xxx-asdf-yyy"));
var d1 = new Date;
var d2 = arson.decode(arson.encode(d1));
assert.ok(d2 instanceof Date);
assert.strictEqual(+d1, +d2);
var dObj = arson.decode(arson.encode({ foo: d1, bar: [d1, d1] }));
assert.strictEqual(+d1, +dObj.foo);
assert.strictEqual(+d1, +dObj.bar[0]);
assert.strictEqual(+d1, +dObj.bar[1]);
assert.strictEqual(dObj.foo, dObj.bar[0]);
assert.strictEqual(dObj.foo, dObj.bar[1]);
var b = new Buffer("asdf");
var bb = arson.decode(arson.encode([b, b]));
assert.strictEqual(bb[0], bb[1]);
assert.ok(bb[0] instanceof Buffer);
assert.strictEqual(bb[0].toString("utf8"), "asdf");
});
it("should work for sparse arrays", function () {
function check(array) {
assert.deepEqual(array, arson.decode(arson.encode(array)));
}
check([,]);
check([,,]);
check([,,,]);
check([1,,3]);
check([1,,3,,4]);
check([1,,3,,4,,]);
});
it("should work with circular references", function () {
var obj = {};
obj.self = obj;
var result = arson.decode(arson.encode(obj));
assert.notStrictEqual(result, obj);
assert.strictEqual(result.self, result);
});
it("should work with repeated references", function () {
var a = {};
var b = { foo: 42 };
a.x = a.y = b;
var result = arson.decode(arson.encode(a));
assert.strictEqual(result.x, result.y);
});
it("should work with the global object", function () {
var copy = arson.decode(arson.encode(global));
assert.strictEqual(copy.global, copy);
});
});