rx.async: added tests; added toPromise operator

This commit is contained in:
Igor Oleinikov 2014-01-06 22:49:12 +04:00
parent 6d32569306
commit f121d2eecc
2 changed files with 102 additions and 4 deletions

80
rx.js/rx.async-tests.ts Normal file
View File

@ -0,0 +1,80 @@
// Tests for RxJS-Async TypeScript definitions
// Tests by Igor Oleinikov <https://github.com/Igorbek>
/// <reference path="rx.async.d.ts" />
module Rx.Tests.Async {
var obsNum: Rx.Observable<number>;
var obsStr: Rx.Observable<string>;
var sch: Rx.IScheduler;
function start() {
obsNum = Rx.Observable.start(()=> 10, sch, obsStr);
obsNum = Rx.Observable.start(()=> 10, sch);
obsNum = Rx.Observable.start(()=> 10);
}
function toAsync() {
obsNum = Rx.Observable.toAsync(()=> 1, sch)();
obsNum = Rx.Observable.toAsync((a1: number)=> a1)(1);
obsStr = Rx.Observable.toAsync((a1: string, a2: number)=> a1 + a2.toFixed(0))("", 1);
obsStr = Rx.Observable.toAsync((a1: string, a2: number, a3: Date)=> a1 + a2.toFixed(0) + a3.toDateString())("", 1, new Date());
obsStr = Rx.Observable.toAsync((a1: string, a2: number, a3: Date, a4: boolean)=> a1 + a2.toFixed(0) + a3.toDateString() + (a4 ? 1 : 0))("", 1, new Date(), false);
}
function fromCallback() {
// 0 arguments
var func0: (cb: (result: number)=> void)=> void;
obsNum = Rx.Observable.fromCallback(func0)();
obsNum = Rx.Observable.fromCallback(func0, sch)();
obsNum = Rx.Observable.fromCallback(func0, sch, obsStr)();
obsNum = Rx.Observable.fromCallback(func0, sch, obsStr, (results: number[]) => results[0])();
// 1 argument
var func1: (a: string, cb: (result: number)=> void)=> number;
obsNum = Rx.Observable.fromCallback(func1)("");
obsNum = Rx.Observable.fromCallback(func1, sch)("");
obsNum = Rx.Observable.fromCallback(func1, sch, {})("");
obsNum = Rx.Observable.fromCallback(func1, sch, {}, (results: number[]) => results[0])("");
// 2 arguments
var func2: (a: number, b: string, cb: (result: string) => number) => Date;
obsStr = Rx.Observable.fromCallback(func2)(1, "");
obsStr = Rx.Observable.fromCallback(func2, sch)(1, "");
obsStr = Rx.Observable.fromCallback(func2, sch, {})(1, "");
obsStr = Rx.Observable.fromCallback(func2, sch, {}, (results: string[]) => results[0])(1, "");
// 3 arguments
var func3: (a: number, b: string, c: boolean, cb: (result: string) => number) => Date;
obsStr = Rx.Observable.fromCallback(func3)(1, "", true);
obsStr = Rx.Observable.fromCallback(func3, sch)(1, "", true);
obsStr = Rx.Observable.fromCallback(func3, sch, {})(1, "", true);
obsStr = Rx.Observable.fromCallback(func3, sch, {}, (results: string[]) => results[0])(1, "", true);
// multiple results
var func0m: (cb: (result1: number, result2: number, result3: number) => void) => void;
obsNum = Rx.Observable.fromCallback(func0m, sch, obsStr, (results: number[]) => results[0])();
var func1m: (a: string, cb: (result1: number, result2: number, result3: number) => void) => void;
obsNum = Rx.Observable.fromCallback(func1m, sch, obsStr, (results: number[]) => results[0])("");
var func2m: (a: string, b: number, cb: (result1: string, result2: string, result3: string) => void) => void;
obsStr = Rx.Observable.fromCallback(func2m, sch, obsStr, (results: string[]) => results[0])("", 10);
}
function toPromise() {
var promiseImpl: {
new<T>(resolver: (resolvePromise: (value: T)=> void, rejectPromise: (reason: any)=> void)=> void): Rx.IPromise<T>;
};
var p: IPromise<number> = obsNum.toPromise(promiseImpl);
p = p.then(x=> x);
p = p.then(x=> p);
p = p.then(undefined, reason=> 10);
p = p.then(undefined, reason=> p);
var ps: IPromise<string> = p.then(undefined, reason=> "error");
ps = p.then(x=> "");
ps = p.then(x=> ps);
}
}

26
rx.js/rx.async.d.ts vendored
View File

@ -1,6 +1,6 @@
///<reference path="rx.d.ts" />
// Type definitions for RxJS-Async package 2.2
// Type definitions for RxJS-Async package 2.2.11
// Project: http://rx.codeplex.com/
// Definitions by: zoetrope <https://github.com/zoetrope>
// Revision by: Igor Oleinikov <https://github.com/Igorbek>
@ -84,11 +84,29 @@ declare module Rx {
fromEvent<T>(element: Node, eventName: string, selector?: (arguments: any[]) => T): Observable<T>;
fromEventPattern<T>(addHandler: (handler: Function) => void, removeHandler: (handler: Function) => void, selector?: (arguments: any[])=>T): Observable<T>;
fromPromise<T>(promise: Promise<T>): Observable<T>;
fromPromise<T>(promise: IPromise<T>): Observable<T>;
fromPromise<T>(promise: any): Observable<T>;
}
interface Promise<T> {
then(onFulfill: (value: T) => any, onReject?: (reason: any) => any): any;
interface Observable<T> {
/**
* Converts an existing observable sequence to an ES6 Compatible Promise
* @example
* var promise = Rx.Observable.return(42).toPromise(RSVP.Promise);
* @param The constructor of the promise
* @returns An ES6 compatible promise with the last value from the observable sequence.
*/
toPromise<TPromise extends IPromise<T>>(promiseCtor: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): TPromise; }): TPromise;
toPromise(promiseCtor: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise<T>; }): IPromise<T>;
}
/**
* Promise A+
*/
export interface IPromise<T> {
then<R>(onFulfilled?: (value: T) => IPromise<R>, onRejected?: (reason: any) => IPromise<R>): IPromise<R>;
then<R>(onFulfilled?: (value: T) => IPromise<R>, onRejected?: (reason: any) => R): IPromise<R>;
then<R>(onFulfilled?: (value: T) => R, onRejected?: (reason: any) => IPromise<R>): IPromise<R>;
then<R>(onFulfilled?: (value: T) => R, onRejected?: (reason: any) => R): IPromise<R>;
}
}