UNPKG

genery

Version:

generator async executor and sugar function for generator

241 lines (185 loc) 6.35 kB
"use strict"; var g = require('../index.js'); g.debug = true; var assert = require('assert'); var _ = require('lodash'); // dummy promise var promiseFunction = function(param) { return new Promise(function(resolve, reject) { resolve(param); }); }; describe('Doc Example:', function() { it('example_1', function(done) { g(function * () { var result1 = yield promiseFunction('hello'); var result2 = yield promiseFunction(' genery'); return result1 + result2; }).then(function(value) { // log 'hello genery' assert.equal('hello genery', value); done(); }); }); it('example_2', function(done) { var generatorFct = function * (arg1, arg2) { var result1 = yield promiseFunction(arg1); var result2 = yield promiseFunction(arg2); return result1 + ' ' + result2; }; g(generatorFct, 'hello', 'genery') .then(function(value) { // log 'hello genery' assert.equal('hello genery', value); done(); }); }); it('example_3', function(done) { var generatorFct = function * (arg1, arg2) { var result1 = yield promiseFunction(arg1); var result2 = yield promiseFunction(arg2); return result1 + ' ' + result2; }; g(function * () { var value = yield * generatorFct('hello', 'genery'); // log 'hello genery' assert.equal('hello genery', value); done(); }); }); it('example_4_1', function(done) { var generatorFct1 = function * () { var result = yield promiseFunction('hello'); return result; }; var generatorFct2 = function * () { var result = yield promiseFunction('genery'); return result; }; g(function * () { var value = yield g.all([generatorFct1, generatorFct2]); // log 'hello genery' assert.equal('hello genery', (value[0] + ' ' + value[1])); done(); }); }); it('example_4_2', function(done) { var generatorFct1 = function * () { var result = yield promiseFunction('hello'); return result; }; var generatorFct2 = function * () { var result = yield promiseFunction('genery'); return result; }; // or g.all([generatorFct1, generatorFct2]) .then(function(value) { // log 'hello genery' assert.equal('hello genery', (value[0] + ' ' + value[1])); done(); }); }); it('example_5_map_reduce', function(done) { var promiseFunction = function(param) { return new Promise(function(resolve, reject) { resolve(param * param); }); }; var otherPromiseFunction = function(current, value) { return new Promise(function(resolve, reject) { resolve(current + value); }); }; var mapper = function * (value) { var result = yield promiseFunction(value); return result; }; var reducer = function * (currentResult, value) { var result = yield otherPromiseFunction(currentResult, value); return result; }; g(function * () { var mapResult = yield g.map([1, 2, 3, 4, 5, 6, 7, 8, 9], mapper); var initialValue = 0; var result = yield g.reduce(mapResult, reducer, initialValue); assert.equal(285, result); done(); }); }); it('example_6_call', function(done) { var context = { param1: 'hello', param2: ' genery' }; g.call(context, function * () { var result1 = yield promiseFunction(this.param1); var result2 = yield promiseFunction(this.param2); return result1 + result2; }).then(function(value) { // log 'hello genery' assert.equal('hello genery', value); done(); }).catch(done); }); it('example_7_filter', function(done) { var filterPromise = function(param) { return new Promise(function(resolve, reject) { if (param > 4) resolve(true); else resolve(false); }); }; var filter = function * (value) { var v1 = yield filterPromise(value); return (v1 > 4); }; var expected = [10, 13, 14, 16, 7, 9]; g.filter([10, 2, 13, 14, 3, 16, 7, 0, 9], filter) .then(function(res) { assert(_.difference(expected, res), res + ' is not equal to ' + expected); done(); }) .catch(done); }); it('example_8_currentContext', function(done) { var logger = { info: function(message) { console.log('[INFO] ' + JSON.stringify(g.currentContext.logInfo) + ' ' + message); } }; var process = function() { logger.info('process'); return new Promise(function(resolve, reject) { resolve(); }); }; var generator = function * () { logger.info('call sub generator 1'); yield * subGenerator(); yield process(); logger.info('call sub generator 2'); yield * subGenerator(); }; var subGenerator = function * () { logger.info('call sub-sub generator '); yield * subSubGenerator(); }; var subSubGenerator = function * () { logger.info('call process'); yield process(); }; g.map([1, 2, 3, 4, 5, 6, 7], function * (index) { let context = { logInfo: { sessionId: index, event: 'PROCESS' } }; yield g.call(context, generator); }) .then(function() { done(); }) .catch(done); }); });