@@ -132,4 +132,82 @@ test('promise', function (t) {
132132 function afterAllDone ( ) {
133133 t . is ( completed , 3 , 'All completed' )
134134 }
135- } )
135+ } )
136+
137+ test ( 'limit-promiseobj-method' , function ( t ) {
138+ t . plan ( 5 )
139+ var called = 0
140+ var completed = 0
141+ var finishers = [ ]
142+ var example = {
143+ test : function ( num ) {
144+ ++ called
145+ return new Promise ( resolve => {
146+ finishers . push ( resolve )
147+ } )
148+ }
149+ }
150+ limit . promise . method ( example , 'test' , 2 )
151+ for ( var ii = 0 ; ii < 3 ; ++ ii ) {
152+ example . test ( ii + 1 ) . then ( function ( ) {
153+ ++ completed
154+ } )
155+ }
156+ setImmediate ( function ( ) {
157+ t . is ( called , 2 , 'Immediately queued 2 callbacks' )
158+ t . is ( completed , 0 , 'With no completion yet' )
159+ // immediately complete one of them...
160+ finishers . shift ( ) ( )
161+ setImmediate ( afterCompletion )
162+ } )
163+ function afterCompletion ( ) {
164+ t . is ( completed , 1 , 'Calling the finisher completed the first one' )
165+ t . is ( called , 3 , 'Third action was started' )
166+ finishers . shift ( ) ( )
167+ finishers . shift ( ) ( )
168+ setImmediate ( afterAllDone )
169+ }
170+ function afterAllDone ( ) {
171+ t . is ( completed , 3 , 'All completed' )
172+ }
173+ } )
174+
175+ test ( 'limit-promiseclass-method' , function ( t ) {
176+ t . plan ( 5 )
177+ var called = 0
178+ var completed = 0
179+ var finishers = [ ]
180+ function Example ( ) { }
181+ Example . prototype = {
182+ test : function ( num , cb ) {
183+ ++ called
184+ return new Promise ( resolve => {
185+ finishers . push ( resolve )
186+ } )
187+ }
188+ }
189+ limit . promise . method ( Example , 'test' , 2 )
190+ var example = new Example ( )
191+ for ( var ii = 0 ; ii < 3 ; ++ ii ) {
192+ example . test ( ii + 1 ) . then ( function ( ) {
193+ ++ completed
194+ } )
195+ }
196+ setImmediate ( function ( ) {
197+ t . is ( called , 2 , 'Immediately queued 2 callbacks' )
198+ t . is ( completed , 0 , 'With no completion yet' )
199+ // immediately complete one of them...
200+ finishers . shift ( ) ( )
201+ setImmediate ( afterCompletion )
202+ } )
203+ function afterCompletion ( ) {
204+ t . is ( completed , 1 , 'Calling the finisher completed the first one' )
205+ t . is ( called , 3 , 'Third action was started' )
206+ finishers . shift ( ) ( )
207+ finishers . shift ( ) ( )
208+ setImmediate ( afterAllDone )
209+ }
210+ function afterAllDone ( ) {
211+ t . is ( completed , 3 , 'All completed' )
212+ }
213+ } )
0 commit comments