Skip to content

Commit 4f027ba

Browse files
committed
Add tests for iterable support
PR-URL: #415
1 parent 68ea25d commit 4f027ba

12 files changed

+250
-104
lines changed

test/array.asyncMap.js

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,32 @@
33
const metasync = require('..');
44
const metatests = require('metatests');
55

6-
metatests.test('succesfull map', test => {
7-
test.plan(2);
8-
6+
metatests.test('successful asyncMap with array', test => {
97
const arr = [1, 2, 3];
108
const expectedArr = [2, 4, 6];
119

1210
metasync.asyncMap(
1311
arr,
14-
item => item * 2,
12+
(item, callback) => process.nextTick(() => callback(null, item * 2)),
1513
(err, newArr) => {
1614
test.error(err);
1715
test.strictSame(newArr, expectedArr);
16+
test.end();
17+
}
18+
);
19+
});
20+
21+
metatests.test('successful asyncMap with another iterable', test => {
22+
const set = new Set([1, 2, 3]);
23+
const expectedSet = new Set([2, 4, 6]);
24+
25+
metasync.asyncMap(
26+
set,
27+
(item, callback) => process.nextTick(() => callback(null, item * 2)),
28+
(err, newSet) => {
29+
test.error(err);
30+
test.strictSame([...newSet], [...expectedSet]);
31+
test.end();
1832
}
1933
);
2034
});
@@ -38,7 +52,10 @@ metatests.test('Non-blocking', test => {
3852
const begin = Date.now();
3953
metasync.asyncMap(
4054
arr,
41-
() => doSmth(ITEM_TIME),
55+
(x, callback) => {
56+
doSmth(ITEM_TIME);
57+
callback();
58+
},
4259
{ percent: EXPECTED_PERCENT },
4360
() => {
4461
clearInterval(timer);
@@ -52,3 +69,14 @@ metatests.test('Non-blocking', test => {
5269
}
5370
);
5471
});
72+
73+
metatests.test('asyncMap with not iterable', test => {
74+
const obj = { a: '1', b: '2', c: '3' };
75+
76+
test.throws(
77+
() => metasync.asyncMap(obj, test.mustNotCall(), test.mustNotCall()),
78+
new TypeError('Base is not Iterable')
79+
);
80+
81+
test.end();
82+
});

test/array.each.js

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -45,29 +45,35 @@ metatests.test('each with empty array', test => {
4545
);
4646
});
4747

48+
metatests.test('successful each with another iterable', test => {
49+
const map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
50+
const mapCopy = new Map();
51+
52+
metasync.each(
53+
map,
54+
(entry, callback) =>
55+
process.nextTick(() => {
56+
mapCopy.set(...entry);
57+
callback(null);
58+
}),
59+
err => {
60+
test.error(err);
61+
test.strictSame([...mapCopy], [...map]);
62+
test.end();
63+
}
64+
);
65+
});
66+
4867
metatests.test('each with error', test => {
4968
const arr = [1, 2, 3, 4];
50-
let count = 0;
51-
52-
const elementsSet = new Set();
53-
const expectedElementsCount = 2;
5469
const eachError = new Error('Each error');
5570

5671
metasync.each(
5772
arr,
58-
(el, callback) =>
59-
process.nextTick(() => {
60-
elementsSet.add(el);
61-
count++;
62-
if (count === expectedElementsCount) {
63-
callback(eachError);
64-
} else {
65-
callback(null);
66-
}
67-
}),
73+
(item, callback) =>
74+
process.nextTick(() => callback(item === 2 ? eachError : null)),
6875
err => {
69-
test.strictSame(err, eachError);
70-
test.strictSame(elementsSet.size, expectedElementsCount);
76+
test.isError(err, eachError);
7177
test.end();
7278
}
7379
);

test/array.every.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ metatests.test('every with error', test => {
3535
};
3636

3737
metasync.every(data, predicate, err => {
38-
test.strictSame(err, everyErr);
38+
test.isError(err, everyErr);
3939
test.end();
4040
});
4141
});
@@ -60,14 +60,26 @@ metatests.test('every with two-element arrays', test =>
6060
)
6161
);
6262

63+
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
64+
6365
metatests.test('every', test => {
64-
const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
66+
const predicate = (item, callback) =>
67+
process.nextTick(() => callback(null, item > 0));
6568

66-
const predicate = (item, callback) => {
69+
metasync.every(arr, predicate, (err, result) => {
70+
test.error(err);
71+
test.strictSame(result, true);
72+
test.end();
73+
});
74+
});
75+
76+
metatests.test('every with another iterable', test => {
77+
const set = new Set(arr);
78+
79+
const predicate = (item, callback) =>
6780
process.nextTick(() => callback(null, item > 0));
68-
};
6981

70-
metasync.every(data, predicate, (err, result) => {
82+
metasync.every(set, predicate, (err, result) => {
7183
test.error(err);
7284
test.strictSame(result, true);
7385
test.end();

test/array.filter.js

Lines changed: 33 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ metatests.test('successful filter', test => {
5050
);
5151
});
5252

53-
metatests.test('filter with empty array', test => {
53+
metatests.test('filter with empty array ', test => {
5454
const arr = [];
5555
const expectedArr = [];
5656

@@ -65,54 +65,44 @@ metatests.test('filter with empty array', test => {
6565
);
6666
});
6767

68-
metatests.test('successful filter', test => {
69-
const arr = [
70-
'Lorem',
71-
'ipsum',
72-
'dolor',
73-
'sit',
74-
'amet',
75-
'consectetur',
76-
'adipiscing',
77-
'elit',
78-
'sed',
79-
'do',
80-
'eiusmod',
81-
'tempor',
82-
'incididunt',
83-
'ut',
84-
'labore',
85-
'et',
86-
'dolore',
87-
'magna',
88-
'aliqua',
89-
];
68+
metatests.test('successful filter with another iterable', test => {
69+
const set = new Set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
70+
const expectedSet = new Set([2, 4, 6, 8, 10]);
71+
72+
metasync.filter(
73+
set,
74+
(x, callback) => process.nextTick(() => callback(null, x % 2 === 0)),
75+
(err, res) => {
76+
test.error(err);
77+
test.strictSame([...res], [...expectedSet]);
78+
test.end();
79+
}
80+
);
81+
});
82+
83+
metatests.test('filter with error', test => {
84+
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
9085
const filterError = new Error('Filter error');
91-
const expectedArr = [
92-
'Lorem',
93-
'ipsum',
94-
'dolor',
95-
'sit',
96-
'amet',
97-
'elit',
98-
'sed',
99-
'magna',
100-
];
10186

10287
metasync.filter(
10388
arr,
104-
(str, callback) =>
105-
process.nextTick(() => {
106-
if (str.length === 2) {
107-
callback(filterError);
108-
return;
109-
}
110-
callback(null, str.length < 6);
111-
}),
89+
(x, callback) =>
90+
process.nextTick(() => callback(x === 5 ? filterError : null, x % 2)),
11291
(err, res) => {
113-
test.error(err);
114-
test.same(res.join(), expectedArr.join());
92+
test.isError(err, filterError);
93+
test.assertNot(res);
11594
test.end();
11695
}
11796
);
11897
});
98+
99+
metatests.test('filter with not iterable', test => {
100+
const obj = { a: '1', b: '2', c: '3' };
101+
102+
test.throws(
103+
() => metasync.filter(obj, test.mustNotCall(), test.mustNotCall()),
104+
new TypeError('Base is not Iterable')
105+
);
106+
107+
test.end();
108+
});

test/array.find.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
const metasync = require('..');
44
const metatests = require('metatests');
55

6+
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
7+
68
metatests.test('find with error', test => {
79
const data = [1, 2, 3];
810
const expectedErrorMessage = 'Intentional error';
@@ -23,12 +25,11 @@ metatests.test('find with error', test => {
2325
});
2426

2527
metatests.test('find', test => {
26-
const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
2728
const expected = 15;
2829
const predicate = (item, callback) =>
2930
process.nextTick(() => callback(null, item % 3 === 0 && item % 5 === 0));
3031

31-
metasync.find(data, predicate, (err, result) => {
32+
metasync.find(arr, predicate, (err, result) => {
3233
test.error(err, 'must not return an error');
3334
test.strictSame(result, expected, `result should be: ${expected}`);
3435
test.end();
@@ -48,9 +49,8 @@ metatests.test('with empty array', test => {
4849
});
4950

5051
metatests.test('with array without element which is searching', test => {
51-
const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
5252
metasync.find(
53-
data,
53+
arr,
5454
(el, callback) => process.nextTick(() => callback(null, el === 20)),
5555
(err, result) => {
5656
test.error(err);
@@ -59,3 +59,16 @@ metatests.test('with array without element which is searching', test => {
5959
}
6060
);
6161
});
62+
63+
metatests.test('find with another iterable', test => {
64+
const map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
65+
const expected = [3, 'c'];
66+
const predicate = (item, callback) =>
67+
process.nextTick(() => callback(null, item[1] === 'c'));
68+
69+
metasync.find(map, predicate, (err, result) => {
70+
test.error(err);
71+
test.strictSame(result, expected);
72+
test.end();
73+
});
74+
});

test/array.map.js

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
const metasync = require('..');
44
const metatests = require('metatests');
55

6-
metatests.test('succesfull map', test => {
6+
metatests.test('successful map', test => {
77
const arr = [1, 2, 3];
88
const expectedArr = [1, 4, 9];
99

@@ -33,6 +33,21 @@ metatests.test('map with empty array', test => {
3333
);
3434
});
3535

36+
metatests.test('successful map with another iterable', test => {
37+
const set = new Set([1, 2, 3]);
38+
const expectedSet = new Set([1, 4, 9]);
39+
40+
metasync.map(
41+
set,
42+
(x, callback) => process.nextTick(() => callback(null, x * x)),
43+
(err, res) => {
44+
test.error(err);
45+
test.strictSame([...res], [...expectedSet]);
46+
test.end();
47+
}
48+
);
49+
});
50+
3651
metatests.test('map with error', test => {
3752
const arr = [1, 2, 3];
3853
const mapError = new Error('Map error');
@@ -50,9 +65,20 @@ metatests.test('map with error', test => {
5065
callback(null, x * x);
5166
}),
5267
(err, res) => {
53-
test.strictSame(err, mapError);
68+
test.isError(err, mapError);
5469
test.strictSame(res, undefined);
5570
test.end();
5671
}
5772
);
5873
});
74+
75+
metatests.test('map with not iterable', test => {
76+
const obj = { a: '1', b: '2', c: '3' };
77+
78+
test.throws(
79+
() => metasync.map(obj, test.mustNotCall(), test.mustNotCall()),
80+
new TypeError('Base is not Iterable')
81+
);
82+
83+
test.end();
84+
});

0 commit comments

Comments
 (0)