1 | 'use strict';
|
2 |
|
3 | require('../lib/init');
|
4 |
|
5 | var assert = require('assert'),
|
6 | utils = require('../lib/utils')
|
7 | ;
|
8 |
|
9 | var 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 |
|
76 | describe('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 |