forked from crcn/sift.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathasync-test.js
63 lines (60 loc) · 1.53 KB
/
async-test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const assert = require("assert");
const sift = require("../lib");
describe(__filename + "#", () => {
[
[
"can use a simple async $eq filter",
{
$eq: function(value) {
return new Promise(function(resolve) {
resolve(value > 2);
});
}
},
[1, 2, 3, 4, 5],
[3, 4, 5]
]
// [
// "can use a simple async $or filter",
// {
// $and: [
// function(value) {
// new Promise(function(resolve) {
// resolve(value > 2);
// })
// },
// function(value) {
// new Promise(function(resolve) {
// resolve(value < 5);
// })
// }
// ]
// }, [1, 2, 3, 4, 5], [3, 4]]
].forEach(function([description, query, values, result]) {
xit(description, function() {
return new Promise(function(resolve, reject) {
var filter = asyncFilter(sift(query));
filter(values).then(function(filteredValues) {
try {
assert.equal(
JSON.stringify(filteredValues),
JSON.stringify(result)
);
resolve();
} catch (e) {
reject(e);
}
});
});
});
});
});
function asyncFilter(filter) {
return function(values) {
return new Promise(function(resolve, reject) {
Promise.all(values.map(filter)).then(function(filtered) {
resolve(values.filter((value, index) => filtered[index]));
});
});
};
}