UNPKG

genery

Version:

generator async executor and sugar function for generator

146 lines (103 loc) 3.51 kB
"use strict"; var g = require('../index.js'); g.debug = true; var assert = require('assert'); // create a promise function for testing purpose var promiseFunction = function(param) { if (param > 200) throw new Error(param); return new Promise(function(resolve, reject) { setTimeout(function() { // all parameter up to 100 will generate awill be rejected if (param > 100 && param < 200) return reject(param); resolve(param); }, 1); }); }; describe('Call Use Case:', function() { it('cal_test_1: should call within the given context', function(done) { var generator1 = function * () { var v1 = yield promiseFunction(this.valueToReturn); assert.equal(17, v1); return this.valueToReturn; }; var context = { valueToReturn: 17 }; g.call(context, generator1) .then(function(res) { assert.equal(17, res); done(); }) .catch(done); }); it('call_test_2: should call within the given context with master generator', function(done) { var generator1 = function * () { var v1 = yield g.call(this, subGenerator1); assert.equal(17, v1); return this.valueToReturn; }; var subGenerator1 = function * () { var v1 = yield promiseFunction(this.valueToReturn); assert.equal(17, v1); return this.valueToReturn; }; var context = { valueToReturn: 17 }; g.call(context, generator1) .then(function(res) { assert.equal(17, res); done(); }) .catch(done); }); it('call_test_3: should call within the given context with yield *', function(done) { var generator1 = function * () { var v1 = yield * subGenerator1.call(this); assert.equal(17, v1); return this.valueToReturn; }; var subGenerator1 = function * () { var v1 = yield promiseFunction(this.valueToReturn); assert.equal(17, v1); return this.valueToReturn; }; var context = { valueToReturn: 17 }; g.call(context, generator1) .then(function(res) { assert.equal(17, res); done(); }) .catch(done); }); it('call_test_4: should manage current context', function(done) { this.timeout(5000); g.traceContext = true; var generator1 = function * () { var v1 = yield * subGenerator1(); return g.currentContext.valueToReturn; }; var subGenerator1 = function * () { var v1 = yield promiseFunction(g.currentContext.valueToReturn); return g.currentContext.valueToReturn; }; g(function * () { for (let index = 1; index < 20; index++) { let context = { valueToReturn: index }; let result = yield g.call(context, generator1) //.then(function(res) { assert.equal(index, result); //}); } }) .then(function(res) { g.traceContext = false; done(); }) .catch(done); }); });