-
-
Notifications
You must be signed in to change notification settings - Fork 20
/
gate.js
111 lines (107 loc) · 2.77 KB
/
gate.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
'use strict';
var toArray = require('es5-ext/lib/Array/from')
, deferred = require('../../../deferred');
module.exports = function (t) {
var fn, gfn, x = {}, y = {}, z = {}, args, dx, dy, dz, hz, resolved, released;
fn = function (p) {
args = toArray(arguments);
return p;
};
return {
"Limit": function (a) {
var invoked, x = {};
gfn = t.call(fn, 2);
dx = deferred();
a(gfn(dx.promise, 'x'), dx.promise, "#1"); // x
dy = deferred();
a(gfn(dy.promise, 'y'), dy.promise, "#2"); // y
dz = deferred();
a.not(hz = gfn(dz.promise, 'z'), dz.promise, "#3 blocked");
hz.on('test', function (arg) { invoked = arg; });
hz.end(function (r) {
released = true;
a(r, z, "Held resolution");
a(resolved, true, "Held timing");
});
gfn(x, y, z);
dz.resolve(z);
resolved = true;
dy.resolve(y); // z, 4
dz.promise.emit('test', x);
a(invoked, x, "Events unified");
a(released, true, "Released");
resolved = false;
dx.resolve(x);
a.deep(args, [x, y, z], "Held Arguments");
},
"No args": function (a) {
gfn = t.call(fn);
dx = deferred();
a(gfn(dx.promise), dx.promise, "#1");
dz = deferred();
a.not(hz = gfn(dz.promise), dz.promise, "#2 blocked");
hz.end(function (r) {
a(r, z, "Held resolution");
a(resolved, true, "Held timing");
});
dz.resolve(z);
resolved = true;
dx.resolve(x);
resolved = false;
},
"Queue limit 0": function (a) {
gfn = t.call(fn, 2, 0);
dx = deferred();
a(gfn(dx.promise), dx.promise, "#1");
dy = deferred();
a(gfn(dy.promise), dy.promise, "#2");
gfn(x).end(null, function (err) {
a(err.type, 'deferred-gate-rejected', "Reject error");
});
dy.resolve(y);
dz = deferred();
a(gfn(dz.promise), dz.promise, "#3");
gfn(x).end(null, function (err) {
a(err.type, 'deferred-gate-rejected', "Reject error");
});
dx.resolve(x);
dz.resolve(z);
},
"Queue limit 2": function (a) {
gfn = t.call(fn, 2, 1);
// x
dx = deferred();
a(gfn(dx.promise), dx.promise, "#1");
// x, y
dy = deferred();
a(gfn(dy.promise), dy.promise, "#2");
// x, y, z
dz = deferred();
a.not(hz = gfn(dz.promise), dz.promise, "#3 blocked");
hz.end(function (r) { a(r, z, "#3 held"); });
// x, y, z
gfn(x).end(null, function (err) {
a(err.type, 'deferred-gate-rejected', "Reject error");
});
dz.resolve(z);
dy.resolve(y);
// x
// x, y
dy = deferred();
a(gfn(dy.promise), dy.promise, "#2");
// x, y, z
dz = deferred();
a.not(hz = gfn(dz.promise), dz.promise, "#3 blocked");
hz.end(function (r) {
a(r, z, "#3 held");
});
// x, y, z
gfn(x).end(null, function (err) {
a(err.type, 'deferred-gate-rejected', "Reject error");
});
dz.resolve(z);
dy.resolve(y);
dx.resolve(x);
}
};
};