UNPKG

2.72 kBJavaScriptView Raw
1'use strict'
2var test = require('tap').test
3var limit = require('../index.js')
4
5
6test('limit', function (t) {
7 t.plan(5)
8 var called = 0
9 var completed = 0
10 var finishers = []
11 var limited = limit(function (num, cb) {
12 ++ called
13 finishers.push(cb)
14 }, 2)
15 ;[1,2,3].forEach(function (num) { limited(num, function () { ++ completed }) })
16 setImmediate(function () {
17 t.is(called, 2, 'Immediately queued 2 callbacks')
18 t.is(completed, 0, 'With no completion yet')
19 // immediately complete one of them...
20 finishers.shift()()
21 setImmediate(afterCompletion)
22 })
23 function afterCompletion () {
24 t.is(completed, 1, 'Calling the finisher completed the first one')
25 t.is(called, 3,'Third action was started')
26 finishers.shift()()
27 finishers.shift()()
28 setImmediate(afterAllDone)
29 }
30 function afterAllDone () {
31 t.is(completed, 3, 'All completed')
32 }
33})
34
35test('limit-obj-method', function (t) {
36 t.plan(5)
37 var called = 0
38 var completed = 0
39 var finishers = []
40 var example = {
41 test: function (num, cb) {
42 ++ called
43 finishers.push(cb)
44 }
45 }
46 limit.method(example, 'test', 2)
47 ;[1,2,3].forEach(function (num) { example.test(num, function () { ++ completed }) })
48 setImmediate(function () {
49 t.is(called, 2, 'Immediately queued 2 callbacks')
50 t.is(completed, 0, 'With no completion yet')
51 // immediately complete one of them...
52 finishers.shift()()
53 setImmediate(afterCompletion)
54 })
55 function afterCompletion () {
56 t.is(completed, 1, 'Calling the finisher completed the first one')
57 t.is(called, 3,'Third action was started')
58 finishers.shift()()
59 finishers.shift()()
60 setImmediate(afterAllDone)
61 }
62 function afterAllDone () {
63 t.is(completed, 3, 'All completed')
64 }
65})
66
67test('limit-class-method', function (t) {
68 t.plan(5)
69 var called = 0
70 var completed = 0
71 var finishers = []
72 function Example () {}
73 Example.prototype = {
74 test: function (num, cb) {
75 ++ called
76 finishers.push(cb)
77 }
78 }
79 limit.method(Example, 'test', 2)
80 var example = new Example()
81 ;[1,2,3].forEach(function (num) { example.test(num, function () { ++ completed }) })
82 setImmediate(function () {
83 t.is(called, 2, 'Immediately queued 2 callbacks')
84 t.is(completed, 0, 'With no completion yet')
85 // immediately complete one of them...
86 finishers.shift()()
87 setImmediate(afterCompletion)
88 })
89 function afterCompletion () {
90 t.is(completed, 1, 'Calling the finisher completed the first one')
91 t.is(called, 3,'Third action was started')
92 finishers.shift()()
93 finishers.shift()()
94 setImmediate(afterAllDone)
95 }
96 function afterAllDone () {
97 t.is(completed, 3, 'All completed')
98 }
99})