You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							137 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							137 lines
						
					
					
						
							2.4 KiB
						
					
					
				
								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);
							 | 
						|
								}
							 | 
						|
								
							 |