UNPKG

6.51 kBJavaScriptView Raw
1"use strict";
2
3var test = require('tape');
4
5var _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
14var assign = Object.assign;
15
16var sourceObject = function sourceObject() {
17 return {
18 foo: 'FOO',
19 bar: 'BAR',
20 quux: 'QUUX'
21 };
22}; // cloneWithout
23
24
25test('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}); // purge
46
47test('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}); // extract
57
58test('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}); // get
105
106test('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
162test('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}); //filterProperties
189
190test('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}); //filterPropertiesOnValues
224
225test('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