feat(WebWorker) Add channel support to MessageBus
closes #3661 and #3686
This commit is contained in:
94
modules/angular2/test/web-workers/shared/message_bus_spec.ts
Normal file
94
modules/angular2/test/web-workers/shared/message_bus_spec.ts
Normal file
@ -0,0 +1,94 @@
|
||||
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);
|
||||
}));
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user