blob: 75c0f2ac7c2d31114f95e8b63ce92f2ac7f49079 [file] [log] [blame]
Leo Repp58b9f112021-11-22 11:57:47 +01001var assert = require('assert');
2var Pend = require('./');
3
4var tests = [
5 {
6 name: "basic",
7 fn: testBasic,
8 },
9 {
10 name: "max",
11 fn: testWithMax,
12 },
13 {
14 name: "callback twice",
15 fn: testCallbackTwice,
16 },
17 {
18 name: "calling wait twice",
19 fn: testCallingWaitTwice,
20 },
21 {
22 name: "hold()",
23 fn: testHoldFn,
24 },
25];
26var testCount = tests.length;
27
28doOneTest();
29
30function doOneTest() {
31 var test = tests.shift();
32 if (!test) {
33 console.log(testCount + " tests passed.");
34 return;
35 }
36 process.stdout.write(test.name + "...");
37 test.fn(function() {
38 process.stdout.write("OK\n");
39 doOneTest();
40 });
41}
42
43function testBasic(cb) {
44 var pend = new Pend();
45 var results = [];
46 pend.go(function(cb) {
47 results.push(1);
48 setTimeout(function() {
49 results.push(3);
50 cb();
51 }, 500);
52 });
53 pend.go(function(cb) {
54 results.push(2);
55 setTimeout(function() {
56 results.push(4);
57 cb();
58 }, 1000);
59 });
60 pend.wait(function(err) {
61 assert.deepEqual(results, [1,2,3,4]);
62 cb();
63 });
64 assert.deepEqual(results, [1, 2]);
65}
66
67function testWithMax(cb) {
68 var pend = new Pend();
69 var results = [];
70 pend.max = 2;
71 pend.go(function(cb) {
72 results.push('a');
73 setTimeout(function() {
74 results.push(1);
75 cb();
76 }, 500);
77 });
78 pend.go(function(cb) {
79 results.push('b');
80 setTimeout(function() {
81 results.push(1);
82 cb();
83 }, 500);
84 });
85 pend.go(function(cb) {
86 results.push('c');
87 setTimeout(function() {
88 results.push(2);
89 cb();
90 }, 100);
91 });
92 pend.wait(function(err) {
93 assert.deepEqual(results, ['a', 'b', 1, 'c', 1, 2]);
94 cb();
95 });
96 assert.deepEqual(results, ['a', 'b']);
97}
98
99function testCallbackTwice(cb) {
100 var pend = new Pend();
101 pend.go(function(cb) {
102 setTimeout(cb, 100);
103 });
104 pend.go(function(cb) {
105 cb();
106 assert.throws(cb, /callback called twice/);
107 });
108 pend.wait(cb);
109}
110
111function testCallingWaitTwice(cb) {
112 var pend = new Pend();
113 pend.go(function(cb) {
114 setTimeout(cb, 100);
115 });
116 pend.wait(function() {
117 pend.go(function(cb) {
118 setTimeout(cb, 50);
119 });
120 pend.go(function(cb) {
121 setTimeout(cb, 10);
122 });
123 pend.go(function(cb) {
124 setTimeout(cb, 20);
125 });
126 pend.wait(cb);
127 });
128}
129
130function testHoldFn(cb) {
131 var pend = new Pend();
132 setTimeout(pend.hold(), 100);
133 pend.go(function(cb) {
134 cb();
135 });
136 pend.wait(cb);
137}