mirror of
				https://hub.gitmirror.com/https://github.com/gradle/gradle-build-action
				synced 2025-10-31 10:00:07 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			419 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			419 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var assert = require('assert');
 | |
| var Chainsaw = require('../index');
 | |
| 
 | |
| exports.getset = function () {
 | |
|     var to = setTimeout(function () {
 | |
|         assert.fail('builder never fired');
 | |
|     }, 1000);
 | |
|     
 | |
|     var ch = Chainsaw(function (saw) {
 | |
|         clearTimeout(to);
 | |
|         var num = 0;
 | |
|         
 | |
|         this.get = function (cb) {
 | |
|             cb(num);
 | |
|             saw.next();
 | |
|         };
 | |
|         
 | |
|         this.set = function (n) {
 | |
|             num = n;
 | |
|             saw.next();
 | |
|         };
 | |
|         
 | |
|         var ti = setTimeout(function () {
 | |
|             assert.fail('end event not emitted');
 | |
|         }, 50);
 | |
|         
 | |
|         saw.on('end', function () {
 | |
|             clearTimeout(ti);
 | |
|             assert.equal(times, 3);
 | |
|         });
 | |
|     });
 | |
|     
 | |
|     var times = 0;
 | |
|     ch
 | |
|         .get(function (x) {
 | |
|             assert.equal(x, 0);
 | |
|             times ++;
 | |
|         })
 | |
|         .set(10)
 | |
|         .get(function (x) {
 | |
|             assert.equal(x, 10);
 | |
|             times ++;
 | |
|         })
 | |
|         .set(20)
 | |
|         .get(function (x) {
 | |
|             assert.equal(x, 20);
 | |
|             times ++;
 | |
|         })
 | |
|     ;
 | |
| };
 | |
| 
 | |
| exports.nest = function () {
 | |
|     var ch = (function () {
 | |
|         var vars = {};
 | |
|         return Chainsaw(function (saw) {
 | |
|             this.do = function (cb) {
 | |
|                 saw.nest(cb, vars);
 | |
|             };
 | |
|         });
 | |
|     })();
 | |
|     
 | |
|     var order = [];
 | |
|     var to = setTimeout(function () {
 | |
|         assert.fail("Didn't get to the end");
 | |
|     }, 50);
 | |
|     
 | |
|     ch
 | |
|         .do(function (vars) {
 | |
|             vars.x = 'y';
 | |
|             order.push(1);
 | |
|             
 | |
|             this
 | |
|                 .do(function (vs) {
 | |
|                     order.push(2);
 | |
|                     vs.x = 'x';
 | |
|                 })
 | |
|                 .do(function (vs) {
 | |
|                     order.push(3);
 | |
|                     vs.z = 'z';
 | |
|                 })
 | |
|             ;
 | |
|         })
 | |
|         .do(function (vars) {
 | |
|             vars.y = 'y';
 | |
|             order.push(4);
 | |
|         })
 | |
|         .do(function (vars) {
 | |
|             assert.eql(order, [1,2,3,4]);
 | |
|             assert.eql(vars, { x : 'x', y : 'y', z : 'z' });
 | |
|             clearTimeout(to);
 | |
|         })
 | |
|     ;
 | |
| };
 | |
| 
 | |
| exports.nestWait = function () {
 | |
|     var ch = (function () {
 | |
|         var vars = {};
 | |
|         return Chainsaw(function (saw) {
 | |
|             this.do = function (cb) {
 | |
|                 saw.nest(cb, vars);
 | |
|             };
 | |
|             
 | |
|             this.wait = function (n) {
 | |
|                 setTimeout(function () {
 | |
|                     saw.next();
 | |
|                 }, n);
 | |
|             };
 | |
|         });
 | |
|     })();
 | |
|     
 | |
|     var order = [];
 | |
|     var to = setTimeout(function () {
 | |
|         assert.fail("Didn't get to the end");
 | |
|     }, 1000);
 | |
|     
 | |
|     var times = {};
 | |
|     
 | |
|     ch
 | |
|         .do(function (vars) {
 | |
|             vars.x = 'y';
 | |
|             order.push(1);
 | |
|             
 | |
|             this
 | |
|                 .do(function (vs) {
 | |
|                     order.push(2);
 | |
|                     vs.x = 'x';
 | |
|                     times.x = Date.now();
 | |
|                 })
 | |
|                 .wait(50)
 | |
|                 .do(function (vs) {
 | |
|                     order.push(3);
 | |
|                     vs.z = 'z';
 | |
|                     
 | |
|                     times.z = Date.now();
 | |
|                     var dt = times.z - times.x;
 | |
|                     assert.ok(dt >= 50 && dt < 75);
 | |
|                 })
 | |
|             ;
 | |
|         })
 | |
|         .do(function (vars) {
 | |
|             vars.y = 'y';
 | |
|             order.push(4);
 | |
|             
 | |
|             times.y = Date.now();
 | |
|         })
 | |
|         .wait(100)
 | |
|         .do(function (vars) {
 | |
|             assert.eql(order, [1,2,3,4]);
 | |
|             assert.eql(vars, { x : 'x', y : 'y', z : 'z' });
 | |
|             clearTimeout(to);
 | |
|             
 | |
|             times.end = Date.now();
 | |
|             var dt = times.end - times.y;
 | |
|             assert.ok(dt >= 100 && dt < 125)
 | |
|         })
 | |
|     ;
 | |
| };
 | |
| 
 | |
| exports.nestNext = function () {
 | |
|     var ch = (function () {
 | |
|         var vars = {};
 | |
|         return Chainsaw(function (saw) {
 | |
|             this.do = function (cb) {
 | |
|                 saw.nest(false, function () {
 | |
|                     var args = [].slice.call(arguments);
 | |
|                     args.push(saw.next);
 | |
|                     cb.apply(this, args);
 | |
|                 }, vars);
 | |
|             };
 | |
|         });
 | |
|     })();
 | |
|     
 | |
|     var order = [];
 | |
|     var to = setTimeout(function () {
 | |
|         assert.fail("Didn't get to the end");
 | |
|     }, 500);
 | |
|     
 | |
|     var times = [];
 | |
|     
 | |
|     ch
 | |
|         .do(function (vars, next_) {
 | |
|             vars.x = 'y';
 | |
|             order.push(1);
 | |
|             
 | |
|             this
 | |
|                 .do(function (vs, next) {
 | |
|                     order.push(2);
 | |
|                     vs.x = 'x';
 | |
|                     setTimeout(next, 30);
 | |
|                 })
 | |
|                 .do(function (vs, next) {
 | |
|                     order.push(3);
 | |
|                     vs.z = 'z';
 | |
|                     setTimeout(next, 10);
 | |
|                 })
 | |
|                 .do(function () {
 | |
|                     setTimeout(next_, 20);
 | |
|                 })
 | |
|             ;
 | |
|         })
 | |
|         .do(function (vars, next) {
 | |
|             vars.y = 'y';
 | |
|             order.push(4);
 | |
|             setTimeout(next, 5);
 | |
|         })
 | |
|         .do(function (vars) {
 | |
|             assert.eql(order, [1,2,3,4]);
 | |
|             assert.eql(vars, { x : 'x', y : 'y', z : 'z' });
 | |
|             
 | |
|             clearTimeout(to);
 | |
|         })
 | |
|     ;
 | |
| };
 | |
| 
 | |
| exports.builder = function () {
 | |
|     var cx = Chainsaw(function (saw) {
 | |
|         this.x = function () {};
 | |
|     });
 | |
|     assert.ok(cx.x);
 | |
|     
 | |
|     var cy = Chainsaw(function (saw) {
 | |
|         return { y : function () {} };
 | |
|     });
 | |
|     assert.ok(cy.y);
 | |
|     
 | |
|     var cz = Chainsaw(function (saw) {
 | |
|         return { z : function (cb) { saw.nest(cb) } };
 | |
|     });
 | |
|     assert.ok(cz.z);
 | |
|     
 | |
|     var to = setTimeout(function () {
 | |
|         assert.fail("Nested z didn't run");
 | |
|     }, 50);
 | |
|     
 | |
|     cz.z(function () {
 | |
|         clearTimeout(to);
 | |
|         assert.ok(this.z);
 | |
|     });
 | |
| };
 | |
| 
 | |
| this.attr = function () {
 | |
|     var to = setTimeout(function () {
 | |
|         assert.fail("attr chain didn't finish");
 | |
|     }, 50);
 | |
|     
 | |
|     var xy = [];
 | |
|     var ch = Chainsaw(function (saw) {
 | |
|         this.h = {
 | |
|             x : function () { 
 | |
|                 xy.push('x');
 | |
|                 saw.next();
 | |
|             },
 | |
|             y : function () {
 | |
|                 xy.push('y');
 | |
|                 saw.next();
 | |
|                 assert.eql(xy, ['x','y']);
 | |
|                 clearTimeout(to);
 | |
|             }
 | |
|         };
 | |
|     });
 | |
|     assert.ok(ch.h);
 | |
|     assert.ok(ch.h.x);
 | |
|     assert.ok(ch.h.y);
 | |
|     
 | |
|     ch.h.x().h.y();
 | |
| };
 | |
| 
 | |
| exports.down = function () {
 | |
|     var error = null;
 | |
|     var s;
 | |
|     var ch = Chainsaw(function (saw) {
 | |
|         s = saw;
 | |
|         this.raise = function (err) {
 | |
|             error = err;
 | |
|             saw.down('catch');
 | |
|         };
 | |
|         
 | |
|         this.do = function (cb) {
 | |
|             cb.call(this);
 | |
|         };
 | |
|         
 | |
|         this.catch = function (cb) {
 | |
|             if (error) {
 | |
|                 saw.nest(cb, error);
 | |
|                 error = null;
 | |
|             }
 | |
|             else saw.next();
 | |
|         };
 | |
|     });
 | |
|     
 | |
|     var to = setTimeout(function () {
 | |
|         assert.fail(".do() after .catch() didn't fire");
 | |
|     }, 50);
 | |
|     
 | |
|     ch
 | |
|         .do(function () {
 | |
|             this.raise('pow');
 | |
|         })
 | |
|         .do(function () {
 | |
|             assert.fail("raise didn't skip over this do block");
 | |
|         })
 | |
|         .catch(function (err) {
 | |
|             assert.equal(err, 'pow');
 | |
|         })
 | |
|         .do(function () {
 | |
|             clearTimeout(to);
 | |
|         })
 | |
|     ;
 | |
| };
 | |
| 
 | |
| exports.trap = function () {
 | |
|     var error = null;
 | |
|     var ch = Chainsaw(function (saw) {
 | |
|         var pars = 0;
 | |
|         var stack = [];
 | |
|         var i = 0;
 | |
|         
 | |
|         this.par = function (cb) {
 | |
|             pars ++;
 | |
|             var j = i ++;
 | |
|             cb.call(function () {
 | |
|                 pars --;
 | |
|                 stack[j] = [].slice.call(arguments);
 | |
|                 saw.down('result');
 | |
|             });
 | |
|             saw.next();
 | |
|         };
 | |
|         
 | |
|         this.join = function (cb) {
 | |
|             saw.trap('result', function () {
 | |
|                 if (pars == 0) {
 | |
|                     cb.apply(this, stack);
 | |
|                     saw.next();
 | |
|                 }
 | |
|             });
 | |
|         };
 | |
|         
 | |
|         this.raise = function (err) {
 | |
|             error = err;
 | |
|             saw.down('catch');
 | |
|         };
 | |
|         
 | |
|         this.do = function (cb) {
 | |
|             cb.call(this);
 | |
|         };
 | |
|         
 | |
|         this.catch = function (cb) {
 | |
|             if (error) {
 | |
|                 saw.nest(cb, error);
 | |
|                 error = null;
 | |
|             }
 | |
|             else saw.next();
 | |
|         };
 | |
|     });
 | |
|     
 | |
|     var to = setTimeout(function () {
 | |
|         assert.fail(".do() after .join() didn't fire");
 | |
|     }, 100);
 | |
|     var tj = setTimeout(function () {
 | |
|         assert.fail('.join() never fired');
 | |
|     }, 100);
 | |
|     
 | |
|     var joined = false;
 | |
|     ch
 | |
|         .par(function () {
 | |
|             setTimeout(this.bind(null, 1), 50);
 | |
|         })
 | |
|         .par(function () {
 | |
|             setTimeout(this.bind(null, 2), 25);
 | |
|         })
 | |
|         .join(function (x, y) {
 | |
|             assert.equal(x[0], 1);
 | |
|             assert.equal(y[0], 2);
 | |
|             clearTimeout(tj);
 | |
|             joined = true;
 | |
|         })
 | |
|         .do(function () {
 | |
|             clearTimeout(to);
 | |
|             assert.ok(joined);
 | |
|         })
 | |
|     ;
 | |
| };
 | |
| 
 | |
| exports.jump = function () {
 | |
|     var to = setTimeout(function () {
 | |
|         assert.fail('builder never fired');
 | |
|     }, 50);
 | |
|     
 | |
|     var xs = [ 4, 5, 6, -4, 8, 9, -1, 8 ];
 | |
|     var xs_ = [];
 | |
|     
 | |
|     var ch = Chainsaw(function (saw) {
 | |
|         this.x = function (i) {
 | |
|             xs_.push(i);
 | |
|             saw.next();
 | |
|         };
 | |
|         
 | |
|         this.y = function (step) {
 | |
|             var x = xs.shift();
 | |
|             if (x > 0) saw.jump(step);
 | |
|             else saw.next();
 | |
|         };
 | |
|         
 | |
|         saw.on('end', function () {
 | |
|             clearTimeout(to);
 | |
|             assert.eql(xs, [ 8 ]);
 | |
|             assert.eql(xs_, [ 1, 1, 1, 1, 2, 3, 2, 3, 2, 3 ]);
 | |
|         });
 | |
|     });
 | |
|     
 | |
|     ch
 | |
|         .x(1)
 | |
|         .y(0)
 | |
|         .x(2)
 | |
|         .x(3)
 | |
|         .y(2)
 | |
|     ;
 | |
| };
 | 
