UNPKG

zensh

Version:

A javascript neural network: self-referential, evolution, interconnection...

268 lines (264 loc) 7.99 kB
'use strict'; /*global module, process, Promise, noneFn*/ var thunks = require('../thunks.js'), x = {}; exports.thunk1 = function (test) { // 测试 thunk 组合 var Thunk = thunks(); var thunk1 = Thunk(1); var thunk2 = thunk1(function (error, value) { test.strictEqual(error, null); test.strictEqual(value, 1); return 2; }); var thunk3 = thunk2(function (error, value) { test.strictEqual(error, null); test.strictEqual(value, 2); return Thunk(function (callback) { setImmediate(function () { callback(null, x); }); }); }); thunk3(function (error, value) { test.strictEqual(error, null); test.strictEqual(value, x); return Thunk(function (callback) { setImmediate(function () { callback(false, true); }); }); })(function (error, value) { test.strictEqual(error, false); test.strictEqual(value, undefined); return Thunk(function (callback) { callback(null, 1, 2, 3, x); }); })(function (error, value1, value2, value3, value4) { test.strictEqual(error, null); test.strictEqual(value1, 1); test.strictEqual(value2, 2); test.strictEqual(value3, 3); test.strictEqual(value4, x); return Thunk(function (callback) { setImmediate(function () {callback(null, 1);}); })(function (error, value) { test.strictEqual(value, 1); return value * 2; })(function (error, value) { test.strictEqual(value, 2); return Thunk(function (callback) { setImmediate(function () {callback(null, value * 2);}); }); })(function (error, value) { test.strictEqual(value, 4); return value * 2; }); })(function (error, value) { test.strictEqual(value, 8); return Thunk(Thunk(value * 2)); })(function (error, value) { test.strictEqual(value, 16); return Thunk.all([]); })(function (error, value) { test.deepEqual(value, []); return Thunk.all([1, 2, 3, 4, 5]); })(function (error, value) { test.deepEqual(value, [1, 2, 3, 4, 5]); return Thunk.all([ 0, Thunk(1), Thunk(Thunk(2)), Thunk(function (callback) { setImmediate(function () { callback(null, 3); }); }), Thunk(Thunk(function (callback) { setImmediate(function () { callback(null, 4); }); })), [5] ]); })(function (error, value) { test.deepEqual(value, [0, 1, 2, 3, 4, [5]]); return Thunk.all([ 0, Thunk(1), Thunk(Thunk(2)), Thunk(function (callback) { setImmediate(function () { callback(null, 3); }); }), Thunk(function (callback) { noneFn(); }), [5] ])(function (error, value) { test.strictEqual(error instanceof Error, true); test.strictEqual(value, undefined); return Thunk.all(1); })(function (error, value) { test.strictEqual(error instanceof Error, true); test.strictEqual(value, undefined); return Thunk.all(x); }); })(function (error, value) { test.notStrictEqual(value, x); test.deepEqual(value, {}); return Thunk.all({a: 1, b: 2, c: 3, d: 4, e: [5]}); })(function (error, value) { test.deepEqual(value, {a: 1, b: 2, c: 3, d: 4, e: [5]}); return Thunk.all({ a: 1, b: Thunk(2), c: typeof Promise === 'function'? Promise.resolve(3) : 3, d: Thunk(function (callback) { setImmediate(function () { callback(null, 4); }); }), e: [5] }); })(function (error, value) { test.deepEqual(value, {a: 1, b: 2, c: 3, d: 4, e: [5]}); return Thunk.all({ a: 1, b: Thunk(2), c: Thunk(Thunk(3)), d: Thunk(function (callback) { noneFn(); }), e: [5] })(function (error, value) { test.strictEqual(error instanceof Error, true); test.strictEqual(value, undefined); }); })(function (error, value) { if (typeof Promise === 'function') { return Thunk(Promise.resolve(1))(function (error, value) { test.strictEqual(error, null); test.strictEqual(value, 1); return Thunk(Promise.reject(false)); })(function (error, value) { test.strictEqual(error, false); test.strictEqual(value, undefined); var promise = new Promise(function (resolve, rejecct) { setImmediate(function () { resolve(x); }); }); return promise; })(function (error, value) { test.strictEqual(value, x); return 'TEST SUCCESS!'; }); } else { return 'TEST SUCCESS!'; } })(function (error, value) { test.strictEqual(value, 'TEST SUCCESS!'); return Thunk.call({x: x}, function (callback) { test.strictEqual(this.x, x); callback(); })(function (error, value) { test.strictEqual(error, null); test.strictEqual(value, undefined); test.strictEqual(this.x, x); return this.x; })(function (error, value) { test.strictEqual(error, null); test.strictEqual(value, x); test.strictEqual(this.x, x); return Thunk(1)(function (error, value) { test.strictEqual(error, null); test.strictEqual(value, 1); test.strictEqual(this, null); return x; }); }); })(function (error, value) { test.strictEqual(value, x); return Thunk.all.call({x: x}, [1, 2, 3, 4, 5])(function (error, value) { test.strictEqual(error, null); test.deepEqual(value, [1, 2, 3, 4, 5]); test.strictEqual(this.x, x); return Thunk(x)(function (error, value) { test.strictEqual(error, null); test.strictEqual(value, x); test.strictEqual(this, null); return x; }); }); })(function (error, value) { test.strictEqual(value, x); return Thunk.digest(1, 2); })(function (error, value) { test.strictEqual(error, 1); test.strictEqual(value, undefined); return Thunk.digest(null, 1, 2, 3); })(function (error, value1, value2, value3) { test.strictEqual(error, null); test.strictEqual(value1, 1); test.strictEqual(value2, 2); test.strictEqual(value3, 3); return Thunk.digest.call({x: x}, null, x)(function (error, value) { test.strictEqual(error, null); test.strictEqual(value, x); test.strictEqual(this.x, x); return x; }); })(function (error, value) { test.strictEqual(value, x); test.done(); }); }; exports.thunk2 = function (test) { // 测试 thunk 作用域内的 debug 模式和异常处理 test.notStrictEqual(thunks(), thunks()); var Thunk = thunks(); Thunk()(function (error) { var _error, e = {}; var thunk1 = thunks(function (error) { _error = error; }); thunk1(function (callback) { callback(e); })(function (error) { test.ok(false); }); test.strictEqual(_error, e); return; })(function (error) { test.strictEqual(error, null); test.strictEqual(arguments.length, 1); var _error, _debug, e = {}; var thunk1 = thunks({ onerror: function (error) { _error = error; }, debug: function () { _debug = arguments; } }); thunk1(function (callback) { callback(null, 1, e); })(function (error) { test.strictEqual(_debug[0], null); test.strictEqual(_debug[1], 1); test.strictEqual(_debug[2], e); return thunk1(function (callback) { callback(e, e); }); })(function (error) { test.ok(false); }); test.strictEqual(_error, e); test.strictEqual(_debug[0], e); test.strictEqual(_debug.length, 2); return Thunk(function (callback) { callback(1, 2, 3); }); })(function (error) { test.strictEqual(error, 1); test.strictEqual(arguments.length, 1); throw new Error('error!'); })(function (error, value) { test.strictEqual(value, undefined); test.ok(error instanceof Error); test.strictEqual(error.message, 'error!'); test.done(); }); };