138 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var assert = require('assert');
 | |
| var Pend = require('./');
 | |
| 
 | |
| var tests = [
 | |
|   {
 | |
|     name: "basic",
 | |
|     fn: testBasic,
 | |
|   },
 | |
|   {
 | |
|     name: "max",
 | |
|     fn: testWithMax,
 | |
|   },
 | |
|   {
 | |
|     name: "callback twice",
 | |
|     fn: testCallbackTwice,
 | |
|   },
 | |
|   {
 | |
|     name: "calling wait twice",
 | |
|     fn: testCallingWaitTwice,
 | |
|   },
 | |
|   {
 | |
|     name: "hold()",
 | |
|     fn: testHoldFn,
 | |
|   },
 | |
| ];
 | |
| var testCount = tests.length;
 | |
| 
 | |
| doOneTest();
 | |
| 
 | |
| function doOneTest() {
 | |
|   var test = tests.shift();
 | |
|   if (!test) {
 | |
|     console.log(testCount + " tests passed.");
 | |
|     return;
 | |
|   }
 | |
|   process.stdout.write(test.name + "...");
 | |
|   test.fn(function() {
 | |
|     process.stdout.write("OK\n");
 | |
|     doOneTest();
 | |
|   });
 | |
| }
 | |
| 
 | |
| function testBasic(cb) {
 | |
|   var pend = new Pend();
 | |
|   var results = [];
 | |
|   pend.go(function(cb) {
 | |
|     results.push(1);
 | |
|     setTimeout(function() {
 | |
|       results.push(3);
 | |
|       cb();
 | |
|     }, 500);
 | |
|   });
 | |
|   pend.go(function(cb) {
 | |
|     results.push(2);
 | |
|     setTimeout(function() {
 | |
|       results.push(4);
 | |
|       cb();
 | |
|     }, 1000);
 | |
|   });
 | |
|   pend.wait(function(err) {
 | |
|     assert.deepEqual(results, [1,2,3,4]);
 | |
|     cb();
 | |
|   });
 | |
|   assert.deepEqual(results, [1, 2]);
 | |
| }
 | |
| 
 | |
| function testWithMax(cb) {
 | |
|   var pend = new Pend();
 | |
|   var results = [];
 | |
|   pend.max = 2;
 | |
|   pend.go(function(cb) {
 | |
|     results.push('a');
 | |
|     setTimeout(function() {
 | |
|       results.push(1);
 | |
|       cb();
 | |
|     }, 500);
 | |
|   });
 | |
|   pend.go(function(cb) {
 | |
|     results.push('b');
 | |
|     setTimeout(function() {
 | |
|       results.push(1);
 | |
|       cb();
 | |
|     }, 500);
 | |
|   });
 | |
|   pend.go(function(cb) {
 | |
|     results.push('c');
 | |
|     setTimeout(function() {
 | |
|       results.push(2);
 | |
|       cb();
 | |
|     }, 100);
 | |
|   });
 | |
|   pend.wait(function(err) {
 | |
|     assert.deepEqual(results, ['a', 'b', 1, 'c', 1, 2]);
 | |
|     cb();
 | |
|   });
 | |
|   assert.deepEqual(results, ['a', 'b']);
 | |
| }
 | |
| 
 | |
| function testCallbackTwice(cb) {
 | |
|   var pend = new Pend();
 | |
|   pend.go(function(cb) {
 | |
|     setTimeout(cb, 100);
 | |
|   });
 | |
|   pend.go(function(cb) {
 | |
|     cb();
 | |
|     assert.throws(cb, /callback called twice/);
 | |
|   });
 | |
|   pend.wait(cb);
 | |
| }
 | |
| 
 | |
| function testCallingWaitTwice(cb) {
 | |
|   var pend = new Pend();
 | |
|   pend.go(function(cb) {
 | |
|     setTimeout(cb, 100);
 | |
|   });
 | |
|   pend.wait(function() {
 | |
|     pend.go(function(cb) {
 | |
|       setTimeout(cb, 50);
 | |
|     });
 | |
|     pend.go(function(cb) {
 | |
|       setTimeout(cb, 10);
 | |
|     });
 | |
|     pend.go(function(cb) {
 | |
|       setTimeout(cb, 20);
 | |
|     });
 | |
|     pend.wait(cb);
 | |
|   });
 | |
| }
 | |
| 
 | |
| function testHoldFn(cb) {
 | |
|   var pend = new Pend();
 | |
|   setTimeout(pend.hold(), 100);
 | |
|   pend.go(function(cb) {
 | |
|     cb();
 | |
|   });
 | |
|   pend.wait(cb);
 | |
| }
 |