1 | "use strict";
|
2 |
|
3 | var test = require('tape');
|
4 |
|
5 | var _require = require('./object'),
|
6 | cloneWithout = _require.cloneWithout,
|
7 | purge = _require.purge,
|
8 | extract = _require.extract,
|
9 | get = _require.get,
|
10 | filterProperties = _require.filterProperties,
|
11 | filterPropertiesOnValues = _require.filterPropertiesOnValues,
|
12 | performGetOnProperties = _require.performGetOnProperties;
|
13 |
|
14 | var assign = Object.assign;
|
15 |
|
16 | var sourceObject = function sourceObject() {
|
17 | return {
|
18 | foo: 'FOO',
|
19 | bar: 'BAR',
|
20 | quux: 'QUUX'
|
21 | };
|
22 | };
|
23 |
|
24 |
|
25 | test('cloneWithout()', function (assert) {
|
26 | {
|
27 | var actual = cloneWithout(sourceObject(), 'foo');
|
28 | var expected = {
|
29 | bar: 'BAR',
|
30 | quux: 'QUUX'
|
31 | };
|
32 | var message = 'can clone an object with one excluded property';
|
33 | assert.deepEqual(actual, expected, message);
|
34 | }
|
35 | {
|
36 | var _actual = cloneWithout(sourceObject(), 'foo', 'quux');
|
37 |
|
38 | var _expected = {
|
39 | bar: 'BAR'
|
40 | };
|
41 | var _message = 'can clone an object with multiple excluded properties';
|
42 | assert.deepEqual(_actual, _expected, _message);
|
43 | }
|
44 | assert.end();
|
45 | });
|
46 |
|
47 | test('purge()', function (assert) {
|
48 | var clone = assign({}, sourceObject());
|
49 | var actual = purge('foo', clone, 'quux');
|
50 | var expected = {
|
51 | bar: 'BAR'
|
52 | };
|
53 | var message = 'accepts its arguments in any order and returns an object without the supplied properties';
|
54 | assert.deepEqual(actual, expected, message);
|
55 | assert.end();
|
56 | });
|
57 |
|
58 | test('extract()', function (assert) {
|
59 | {
|
60 | var actual = extract('bar', sourceObject());
|
61 | var expected = ['BAR', {
|
62 | foo: 'FOO',
|
63 | quux: 'QUUX'
|
64 | }];
|
65 | var message = 'can extract a single property with the key as first argument';
|
66 | assert.deepEqual(actual, expected, message);
|
67 | }
|
68 | {
|
69 | var _actual2 = extract(sourceObject(), 'bar');
|
70 |
|
71 | var _expected2 = [{
|
72 | foo: 'FOO',
|
73 | quux: 'QUUX'
|
74 | }, 'BAR'];
|
75 | var _message2 = 'an extract a single property with the key as last argument';
|
76 | assert.deepEqual(_actual2, _expected2, _message2);
|
77 | }
|
78 | {
|
79 | var _actual3 = extract('quux', sourceObject(), 'foo');
|
80 |
|
81 | var _expected3 = ['QUUX', {
|
82 | bar: 'BAR'
|
83 | }, 'FOO'];
|
84 | var _message3 = 'can extract multiple properties in any argument order';
|
85 | assert.deepEqual(_actual3, _expected3, _message3);
|
86 | }
|
87 | {
|
88 | var func = function func() {
|
89 | extract('foo', 'bar');
|
90 | };
|
91 |
|
92 | var _message4 = 'throws if no argument is an object';
|
93 | assert.throws(func, null, _message4);
|
94 | }
|
95 | {
|
96 | var _func = function _func() {
|
97 | extract('quux', sourceObject(), 'foo', sourceObject());
|
98 | };
|
99 |
|
100 | var _message5 = 'throws if more than one argument is an object';
|
101 | assert.throws(_func, null, _message5);
|
102 | }
|
103 | assert.end();
|
104 | });
|
105 |
|
106 | test('get()', function (assert) {
|
107 | {
|
108 | var actual = get(sourceObject(), 'foo');
|
109 | var expected = 'FOO';
|
110 | var message = 'returns the value of an object property';
|
111 | assert.deepEqual(actual, expected, message);
|
112 | }
|
113 | {
|
114 | var object = {
|
115 | foo: {
|
116 | bar: 'quux'
|
117 | }
|
118 | };
|
119 |
|
120 | var _actual4 = get(object, 'foo.bar');
|
121 |
|
122 | var _expected4 = 'quux';
|
123 | var _message6 = 'returns the value of a deep object property';
|
124 | assert.deepEqual(_actual4, _expected4, _message6);
|
125 | }
|
126 | {
|
127 | var _object = {
|
128 | foo: {
|
129 | bar: 'quux'
|
130 | }
|
131 | };
|
132 |
|
133 | var _actual5 = get(_object, 'foo[bar]');
|
134 |
|
135 | var _expected5 = 'quux';
|
136 | var _message7 = 'supports bracket property accessors';
|
137 | assert.deepEqual(_actual5, _expected5, _message7);
|
138 | }
|
139 | {
|
140 | var _object2 = {};
|
141 |
|
142 | var _actual6 = get(_object2, 'nil');
|
143 |
|
144 | var _expected6;
|
145 |
|
146 | var _message8 = 'returns `undefined` for an object property that does not exist';
|
147 | assert.deepEqual(_actual6, _expected6, _message8);
|
148 | }
|
149 | {
|
150 | var _object3 = {};
|
151 |
|
152 | var _actual7 = get(_object3, 'foo.bar');
|
153 |
|
154 | var _expected7;
|
155 |
|
156 | var _message9 = 'returns `undefined` for a deep object property that does not exist';
|
157 | assert.deepEqual(_actual7, _expected7, _message9);
|
158 | }
|
159 | assert.end();
|
160 | }); // performGetOnProperties
|
161 |
|
162 | test('performGetOnProperties()', function (assert) {
|
163 | var getters = {
|
164 | one: 'one',
|
165 | two: 'two.second',
|
166 | three: 'three.third.tripple'
|
167 | };
|
168 | var object = {
|
169 | one: 'first',
|
170 | two: {
|
171 | second: 'double'
|
172 | },
|
173 | three: {
|
174 | third: {
|
175 | tripple: 'trio'
|
176 | }
|
177 | }
|
178 | };
|
179 | var actual = performGetOnProperties(object, getters);
|
180 | var expected = {
|
181 | one: 'first',
|
182 | two: 'double',
|
183 | three: 'trio'
|
184 | };
|
185 | var message = 'can perform a get on all the properties';
|
186 | assert.deepEqual(actual, expected, message);
|
187 | assert.end();
|
188 | });
|
189 |
|
190 | test('filterProperties()', function (assert) {
|
191 | {
|
192 | var clone = assign({}, sourceObject());
|
193 | var actual = filterProperties(clone, 'foo', 'bar');
|
194 | var expected = {
|
195 | foo: 'FOO',
|
196 | bar: 'BAR'
|
197 | };
|
198 | var message = 'returns the object with only the given properties';
|
199 | assert.deepEqual(actual, expected, message);
|
200 | }
|
201 | {
|
202 | var _clone = assign({}, sourceObject());
|
203 |
|
204 | var _actual8 = filterProperties(_clone, 'foo', 'bar', 'mismatch');
|
205 |
|
206 | var _expected8 = {
|
207 | foo: 'FOO',
|
208 | bar: 'BAR'
|
209 | };
|
210 | var _message10 = 'returns the object with only the given properties ignoring non-matching properties';
|
211 | assert.deepEqual(_actual8, _expected8, _message10);
|
212 | }
|
213 | {
|
214 | var _clone2 = assign({}, sourceObject());
|
215 |
|
216 | var _actual9 = filterProperties(_clone2, 'mismatch', 'different');
|
217 |
|
218 | var _expected9 = {};
|
219 | var _message11 = 'and returns an empty object when none of the properties match';
|
220 | assert.deepEqual(_actual9, _expected9, _message11);
|
221 | }
|
222 | assert.end();
|
223 | });
|
224 |
|
225 | test('filterPropertiesOnValues()', function (assert) {
|
226 | {
|
227 | var clone = assign({}, sourceObject());
|
228 | var actual = filterPropertiesOnValues(clone, function (value) {
|
229 | return value !== 'FOO';
|
230 | });
|
231 | var expected = {
|
232 | bar: 'BAR',
|
233 | quux: 'QUUX'
|
234 | };
|
235 | var message = 'and returns an object without the values for which the given function does not return true';
|
236 | assert.deepEqual(actual, expected, message);
|
237 | }
|
238 | {
|
239 | var _clone3 = assign({}, sourceObject());
|
240 |
|
241 | var _actual10 = filterPropertiesOnValues(_clone3, function (value) {
|
242 | return value !== 'mismatch';
|
243 | });
|
244 |
|
245 | var _expected10 = {
|
246 | foo: 'FOO',
|
247 | bar: 'BAR',
|
248 | quux: 'QUUX'
|
249 | };
|
250 | var _message12 = 'and returns an object without the values for which the given function does not return true';
|
251 | assert.deepEqual(_actual10, _expected10, _message12);
|
252 | }
|
253 | assert.end();
|
254 | }); |
\ | No newline at end of file |