diff --git a/mpromise/mpromise-tests.ts b/mpromise/mpromise-tests.ts new file mode 100644 index 000000000..cb09df475 --- /dev/null +++ b/mpromise/mpromise-tests.ts @@ -0,0 +1,134 @@ +/// +/// + +var assert = require('assert'); +import Promise = require('mpromise'); + +function ex1() { + var promise = new Promise; +} + +function ex2() { + var promise = new Promise (function(reason: string, ...args: number[]) { + return; + }); +} + +function ex3() { + var promise = new Promise(); + promise.onResolve(function(reason: string, ...args: number[]) { + return; + }); +} + +function fulfill() { + var promise = new Promise(); + promise.fulfill(1, 2, 3); +} + +function reject() { + var promise = new Promise(); + promise.reject('reason'); +} + +function onFulfill1() { + var promise = new Promise(); + promise.onFulfill(function (...args: number[]) { + assert.equal(3, args[0] + args[1]); + }); + promise.fulfill(1, 2); +} + +function onFulfill2() { + var promise = new Promise(); + promise.fulfill(" :D "); + promise.onFulfill(function (arg: string) { + console.log(arg); // logs " :D " + }); +} + +function onReject1() { + var promise = new Promise(); + promise.onReject(function (reason: string) { + assert.equal('sad', reason); + }); + promise.reject('sad'); +} + +function onReject2() { + var promise = new Promise(); + promise.reject(" :( "); + promise.onReject(function (reason: string) { + console.log(reason); // logs " :( " + }); +} + +function onResolve1() { + var promise = new Promise(); + promise.onResolve(function (err: R, ...args: number[]) { + console.log(args[0] + args[1]); // logs 3 + }); + promise.fulfill(1, 2); +} + +function onResolve2() { + // rejection + var promise = new Promise(); + promise.onResolve(function (err: Error) { + if (err) { + console.log(err.message); // logs "failed" + } + }); + promise.reject(new Error('failed')); +} + +function then() { + var promise = new Promise(); + + promise.then(function (arg: number) { + return arg + 1; + }).then(function (arg: number) { + throw new Error(arg + ' is an error!'); + }).then(null, function (err: Error) { + assert.ok(err instanceof Error); + assert.equal('2 is an error', err.message); + }); + promise.fulfill(1); +} + +function end1() { + var promise = new Promise(); + promise.then(function(){ throw new Error('shucks') }); + setTimeout(function () { + promise.fulfill(); + // error was caught and swallowed by the promise returned from + // p.then(). we either have to always register handlers on + // the returned promises or we can do the following... + }, 10); +} + +function end2() { + // this time we use .end() which prevents catching thrown errors + var promise = new Promise(); + setTimeout(function () { + promise.fulfill(); // throws "shucks" + }, 10); + return promise.then(function(){ throw new Error('shucks') }).end(); // <-- +} + +function chain() { + function makeMeAPromise(i: number) { + var p = new Promise(); + p.fulfill(i); + return p; + } + + var initialPromise = new Promise(); + var returnPromise = initialPromise; + for (var i=0; i<10; ++i) { + returnPromise = returnPromise.chain(makeMeAPromise(i)); + } + + initialPromise.fulfill(); + return returnPromise; +} diff --git a/mpromise/mpromise.d.ts b/mpromise/mpromise.d.ts new file mode 100644 index 000000000..ba6961362 --- /dev/null +++ b/mpromise/mpromise.d.ts @@ -0,0 +1,42 @@ +// Type definitions for mpromise 0.5.4 +// Project: https://github.com/aheckmann/mpromise +// Definitions by: Seulgi Kim +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +declare module "mpromise" { + interface IFulfillFunction { + (...args: F[]): void; + (arg: F): void; + } + interface IRejectFunction { + (err: R): void; + } + interface IResolveFunction { + (err: R, ...args: F[]): void; + (err: R, arg: F): void; + } + + class Promise { + constructor(fn?: IResolveFunction); + + static FAILURE: string; + static SUCCESS: string; + + fulfill(...args: F[]): Promise; + fulfill(arg: F): Promise; + reject(reason: R): Promise; + resolve(reason: R, ...args: F[]): Promise; + resolve(reason: R, arg: F): Promise; + + onFulfill(callback: IFulfillFunction): Promise; + onReject(callback: IRejectFunction): Promise; + onResolve(callback: IResolveFunction): Promise; + + then(onFulfilled: IFulfillFunction, onRejected?: IRejectFunction): Promise; + end(): void; + + chain(promise: Promise): Promise; + } + + export = Promise; +}