95 lines
2.9 KiB
TypeScript
95 lines
2.9 KiB
TypeScript
|
import {
|
||
|
AsyncTestCompleter,
|
||
|
inject,
|
||
|
describe,
|
||
|
it,
|
||
|
expect,
|
||
|
beforeEach,
|
||
|
createTestInjector,
|
||
|
beforeEachBindings,
|
||
|
SpyObject,
|
||
|
proxy
|
||
|
} from 'angular2/test_lib';
|
||
|
import {ObservableWrapper} from 'angular2/src/facade/async';
|
||
|
import {MessageBusInterface} from 'angular2/src/web-workers/shared/message_bus';
|
||
|
import {createConnectedMessageBus} from './message_bus_util';
|
||
|
|
||
|
export function main() {
|
||
|
/**
|
||
|
* Tests the PostMessageBus in TypeScript and the IsolateMessageBus in Dart
|
||
|
*/
|
||
|
describe("MessageBus", () => {
|
||
|
var bus: MessageBusInterface;
|
||
|
|
||
|
beforeEach(() => { bus = createConnectedMessageBus(); });
|
||
|
|
||
|
it("should pass messages in the same channel from sink to source",
|
||
|
inject([AsyncTestCompleter], (async) => {
|
||
|
const CHANNEL = "CHANNEL 1";
|
||
|
const MESSAGE = "Test message";
|
||
|
|
||
|
var fromEmitter = bus.from(CHANNEL);
|
||
|
ObservableWrapper.subscribe(fromEmitter, (message: any) => {
|
||
|
expect(message).toEqual(MESSAGE);
|
||
|
async.done();
|
||
|
});
|
||
|
var toEmitter = bus.to(CHANNEL);
|
||
|
ObservableWrapper.callNext(toEmitter, MESSAGE);
|
||
|
}));
|
||
|
|
||
|
it("should broadcast", inject([AsyncTestCompleter], (async) => {
|
||
|
const CHANNEL = "CHANNEL 1";
|
||
|
const MESSAGE = "TESTING";
|
||
|
const NUM_LISTENERS = 2;
|
||
|
|
||
|
var callCount = 0;
|
||
|
var emitHandler = (message: any) => {
|
||
|
expect(message).toEqual(MESSAGE);
|
||
|
callCount++;
|
||
|
if (callCount == NUM_LISTENERS) {
|
||
|
async.done();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
for (var i = 0; i < NUM_LISTENERS; i++) {
|
||
|
var emitter = bus.from(CHANNEL);
|
||
|
ObservableWrapper.subscribe(emitter, emitHandler);
|
||
|
}
|
||
|
|
||
|
var toEmitter = bus.to(CHANNEL);
|
||
|
ObservableWrapper.callNext(toEmitter, MESSAGE);
|
||
|
}));
|
||
|
|
||
|
it("should keep channels independent", inject([AsyncTestCompleter], (async) => {
|
||
|
const CHANNEL_ONE = "CHANNEL 1";
|
||
|
const CHANNEL_TWO = "CHANNEL 2";
|
||
|
const MESSAGE_ONE = "This is a message on CHANNEL 1";
|
||
|
const MESSAGE_TWO = "This is a message on CHANNEL 2";
|
||
|
var callCount = 0;
|
||
|
|
||
|
var firstFromEmitter = bus.from(CHANNEL_ONE);
|
||
|
ObservableWrapper.subscribe(firstFromEmitter, (message) => {
|
||
|
expect(message).toEqual(MESSAGE_ONE);
|
||
|
callCount++;
|
||
|
if (callCount == 2) {
|
||
|
async.done();
|
||
|
}
|
||
|
});
|
||
|
var secondFromEmitter = bus.from(CHANNEL_TWO);
|
||
|
ObservableWrapper.subscribe(secondFromEmitter, (message) => {
|
||
|
expect(message).toEqual(MESSAGE_TWO);
|
||
|
callCount++;
|
||
|
if (callCount == 2) {
|
||
|
async.done();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
var firstToEmitter = bus.to(CHANNEL_ONE);
|
||
|
ObservableWrapper.callNext(firstToEmitter, MESSAGE_ONE);
|
||
|
|
||
|
var secondToEmitter = bus.to(CHANNEL_TWO);
|
||
|
ObservableWrapper.callNext(secondToEmitter, MESSAGE_TWO);
|
||
|
}));
|
||
|
});
|
||
|
}
|