UNPKG

4.98 kBJavaScriptView Raw
1'use strict';
2
3require('../lib/init');
4
5var assert = require('assert'),
6 utils = require('../lib/utils')
7;
8
9var mergeTests = [
10 {
11 arguments: [
12 {a: 1},
13 {b: 2}
14 ],
15 expected: {
16 a: 1,
17 b: 2
18 }
19 },
20 {
21 arguments: [
22 {a: 1, b: {c: 3}},
23 {b: {d: 4}}
24 ],
25 expected: {
26 a: 1,
27 b: {d: 4}
28 }
29 },
30 {
31 arguments: [
32 {a: 1, b: {c: 3}},
33 {b: {d: 4}},
34 true
35 ],
36 expected: {
37 a: 1,
38 b: {c: 3, d: 4}
39 }
40 },
41 {
42 arguments: [
43 {a: 1, b: {c: 3}},
44 {b: {d: 4}},
45 {b: {e: 5}},
46 true
47 ],
48 expected: {
49 a: 1,
50 b: {c: 3, d: 4, e: 5}
51 }
52 },
53 {
54 arguments: [
55 {a: {b: {c: 3}}},
56 {a: {b: {d: 4}}},
57 1
58 ],
59 expected: {
60 a: {b: {d: 4}}
61 }
62 },
63 {
64 arguments: [
65 {a: {b: {c: 3}}},
66 {a: {b: {d: 4}}},
67 true
68 ],
69 expected: {
70 a: {b: {c: 3, d: 4}}
71 }
72 }
73 ]
74;
75
76describe('utils', function() {
77 mergeTests.forEach(function(test) {
78 it('"merge" should merge objects', function() {
79 var result = utils.merge.apply(this, test.arguments);
80
81 assert.deepEqual(result, test.expected);
82 })
83 });
84
85 it('"clone" should clone an object and its embedded objects', function() {
86 var object = {
87 a: 1,
88 b: 2,
89 c: {
90 d: 3,
91 e: 4
92 }
93 },
94 clone = utils.clone(object),
95 expected = {
96 a: 1,
97 b: 7,
98 c: {
99 d: 8,
100 e: 4
101 }
102 }
103 ;
104
105 object.a = 5;
106 object.a.e = 6;
107 clone.b = 7;
108 clone.c.d = 8;
109 object.a = 9;
110
111 assert.deepEqual(clone, expected);
112 })
113
114 it('"extends" should extend a function with another function (classes inheritance)', function() {
115 var Extender = function() {
116 this.b = 2;
117
118 Extended.call(this);
119 }
120
121 Extender.prototype.inc = function() {
122 this.a++;
123 };
124
125 var Extended = function() {
126 this.a = 1;
127 };
128
129 Extended.prototype.dec = function() {
130 this.a--;
131 };
132
133 utils.extend(Extended, Extender);
134
135 var object = new Extender();
136
137 assert(object.inc);
138 assert(object.dec);
139 assert.equal(object.a, 1);
140 assert.equal(object.b, 2);
141 object.inc();
142 assert.equal(object.a, 2);
143 object.dec();
144 assert.equal(object.a, 1);
145 })
146
147 it('"flatten" should flatten an object', function() {
148 var flattenObject = utils.flatten({
149 a: {
150 a: {
151 a: 2,
152 b: 3
153 },
154 b: 4,
155 },
156 foo: 'bar'
157 }),
158 expected = {
159 'a.a.a': 2,
160 'a.a.b': 3,
161 'a.b': 4,
162 foo: 'bar'
163 }
164 ;
165
166 assert.deepEqual(flattenObject, expected);
167 })
168
169 it('"clean" should return a cloned object cleaned of its operating properties', function() {
170 var object = {
171 a: {
172 a: {
173 __a: 2,
174 b: 3
175 },
176 __b: 4,
177 },
178 __foo: 'bar'
179 },
180 cleanedObject = utils.clean(object),
181 expected = {
182 a: {
183 a: {
184 b: 3
185 },
186 }
187 }
188 ;
189
190 assert.deepEqual(expected, cleanedObject);
191
192 assert.equal(cleanedObject.b, undefined);
193 assert.equal(object.b, undefined);
194 cleanedObject.b = 2;
195 assert.equal(cleanedObject.b, 2);
196 assert.equal(object.b, undefined);
197
198 cleanedObject = utils.clean(object, false);
199 assert.equal(cleanedObject.c, undefined);
200 assert.equal(object.c, undefined);
201 cleanedObject.c = 3;
202 assert.equal(cleanedObject.c, 3);
203 assert.equal(object.c, 3);
204 })
205})
\No newline at end of file