프로젝트

일반

사용자정보

통계
| 개정판:

root / HServer / 00.Server / 00.Program / node_modules / pend / test.js

이력 | 보기 | 이력해설 | 다운로드 (2.39 KB)

1 39 HKM
var assert = require('assert');
2
var Pend = require('./');
3
4
var 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
];
26
var testCount = tests.length;
27
28
doOneTest();
29
30
function 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
43
function 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
67
function 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
99
function 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
111
function 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
130
function 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
}