UNPKG

2.98 kBJavaScriptView Raw
1var assert = require('assert');
2var Traverse = require('../');
3var deepEqual = require('./lib/deep_equal');
4var util = require('util');
5
6exports.circular = function () {
7 var obj = { x : 3 };
8 obj.y = obj;
9 var foundY = false;
10 Traverse(obj).forEach(function (x) {
11 if (this.path.join('') == 'y') {
12 assert.equal(
13 util.inspect(this.circular.node),
14 util.inspect(obj)
15 );
16 foundY = true;
17 }
18 });
19 assert.ok(foundY);
20};
21
22exports.deepCirc = function () {
23 var obj = { x : [ 1, 2, 3 ], y : [ 4, 5 ] };
24 obj.y[2] = obj;
25
26 var times = 0;
27 Traverse(obj).forEach(function (x) {
28 if (this.circular) {
29 assert.deepEqual(this.circular.path, []);
30 assert.deepEqual(this.path, [ 'y', 2 ]);
31 times ++;
32 }
33 });
34
35 assert.deepEqual(times, 1);
36};
37
38exports.doubleCirc = function () {
39 var obj = { x : [ 1, 2, 3 ], y : [ 4, 5 ] };
40 obj.y[2] = obj;
41 obj.x.push(obj.y);
42
43 var circs = [];
44 Traverse(obj).forEach(function (x) {
45 if (this.circular) {
46 circs.push({ circ : this.circular, self : this, node : x });
47 }
48 });
49
50 assert.deepEqual(circs[0].self.path, [ 'x', 3, 2 ]);
51 assert.deepEqual(circs[0].circ.path, []);
52
53 assert.deepEqual(circs[1].self.path, [ 'y', 2 ]);
54 assert.deepEqual(circs[1].circ.path, []);
55
56 assert.deepEqual(circs.length, 2);
57};
58
59exports.circDubForEach = function () {
60 var obj = { x : [ 1, 2, 3 ], y : [ 4, 5 ] };
61 obj.y[2] = obj;
62 obj.x.push(obj.y);
63
64 Traverse(obj).forEach(function (x) {
65 if (this.circular) this.update('...');
66 });
67
68 assert.deepEqual(obj, { x : [ 1, 2, 3, [ 4, 5, '...' ] ], y : [ 4, 5, '...' ] });
69};
70
71exports.circDubMap = function () {
72 var obj = { x : [ 1, 2, 3 ], y : [ 4, 5 ] };
73 obj.y[2] = obj;
74 obj.x.push(obj.y);
75
76 var c = Traverse(obj).map(function (x) {
77 if (this.circular) {
78 this.update('...');
79 }
80 });
81
82 assert.deepEqual(c, { x : [ 1, 2, 3, [ 4, 5, '...' ] ], y : [ 4, 5, '...' ] });
83};
84
85exports.circClone = function () {
86 var obj = { x : [ 1, 2, 3 ], y : [ 4, 5 ] };
87 obj.y[2] = obj;
88 obj.x.push(obj.y);
89
90 var clone = Traverse.clone(obj);
91 assert.ok(obj !== clone);
92
93 assert.ok(clone.y[2] === clone);
94 assert.ok(clone.y[2] !== obj);
95 assert.ok(clone.x[3][2] === clone);
96 assert.ok(clone.x[3][2] !== obj);
97 assert.deepEqual(clone.x.slice(0,3), [1,2,3]);
98 assert.deepEqual(clone.y.slice(0,2), [4,5]);
99};
100
101exports.circMapScrub = function () {
102 var obj = { a : 1, b : 2 };
103 obj.c = obj;
104
105 var scrubbed = Traverse(obj).map(function (node) {
106 if (this.circular) this.remove();
107 });
108 assert.deepEqual(
109 Object.keys(scrubbed).sort(),
110 [ 'a', 'b' ]
111 );
112 assert.ok(deepEqual(scrubbed, { a : 1, b : 2 }));
113
114 assert.equal(obj.c, obj);
115};