78
modules/angular2/test/web-workers/worker/broker_spec.ts
Normal file
78
modules/angular2/test/web-workers/worker/broker_spec.ts
Normal file
@ -0,0 +1,78 @@
|
||||
import {
|
||||
AsyncTestCompleter,
|
||||
inject,
|
||||
describe,
|
||||
it,
|
||||
expect,
|
||||
beforeEach,
|
||||
createTestInjector,
|
||||
beforeEachBindings,
|
||||
SpyObject,
|
||||
proxy
|
||||
} from 'angular2/test_lib';
|
||||
import {IMPLEMENTS} from 'angular2/src/facade/lang';
|
||||
import {Serializer} from 'angular2/src/web-workers/shared/serializer';
|
||||
import {NgZone} from 'angular2/src/core/zone/ng_zone';
|
||||
import {MessageBroker} from 'angular2/src/web-workers/worker/broker';
|
||||
import {MockMessageBus, MockMessageBusSink, MockMessageBusSource} from './worker_test_util';
|
||||
import {ON_WEBWORKER} from 'angular2/src/web-workers/shared/api';
|
||||
import {bind} from 'angular2/di';
|
||||
import {RenderProtoViewRefStore} from 'angular2/src/web-workers/shared/render_proto_view_ref_store';
|
||||
import {
|
||||
RenderViewWithFragmentsStore,
|
||||
WorkerRenderViewRef
|
||||
} from 'angular2/src/web-workers/shared/render_view_with_fragments_store';
|
||||
import {RenderEventDispatcher, RenderViewRef} from 'angular2/src/render/api';
|
||||
|
||||
export function main() {
|
||||
describe("MessageBroker", () => {
|
||||
beforeEachBindings(() => [
|
||||
bind(ON_WEBWORKER)
|
||||
.toValue(true),
|
||||
RenderProtoViewRefStore,
|
||||
RenderViewWithFragmentsStore
|
||||
]);
|
||||
|
||||
it("should dispatch events", inject([Serializer, NgZone], (serializer, zone) => {
|
||||
var bus = new MockMessageBus(new MockMessageBusSink(), new MockMessageBusSource());
|
||||
var broker = new MessageBroker(bus, serializer, zone);
|
||||
|
||||
var eventDispatcher = new SpyEventDispatcher();
|
||||
var viewRef = new WorkerRenderViewRef(0);
|
||||
serializer.allocateRenderViews(0); // serialize the ref so it's in the store
|
||||
viewRef =
|
||||
serializer.deserialize(serializer.serialize(viewRef, RenderViewRef), RenderViewRef);
|
||||
broker.registerEventDispatcher(viewRef, eventDispatcher);
|
||||
|
||||
var elementIndex = 15;
|
||||
var eventName = 'click';
|
||||
|
||||
bus.source.receive({
|
||||
'data': {
|
||||
'type': 'event',
|
||||
'value': {
|
||||
'viewRef': viewRef.serialize(),
|
||||
'elementIndex': elementIndex,
|
||||
'eventName': eventName
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
expect(eventDispatcher.wasDispatched).toBeTruthy();
|
||||
expect(eventDispatcher.elementIndex).toEqual(elementIndex);
|
||||
expect(eventDispatcher.eventName).toEqual(eventName);
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
class SpyEventDispatcher implements RenderEventDispatcher {
|
||||
wasDispatched: boolean = false;
|
||||
elementIndex: number;
|
||||
eventName: string;
|
||||
|
||||
dispatchRenderEvent(elementIndex: number, eventName: string, locals: Map<string, any>) {
|
||||
this.wasDispatched = true;
|
||||
this.elementIndex = elementIndex;
|
||||
this.eventName = eventName;
|
||||
}
|
||||
}
|
@ -26,12 +26,6 @@ import {
|
||||
RenderViewRef,
|
||||
RenderFragmentRef
|
||||
} from "angular2/src/render/api";
|
||||
import {
|
||||
MessageBus,
|
||||
MessageBusSource,
|
||||
MessageBusSink,
|
||||
SourceListener
|
||||
} from "angular2/src/web-workers/shared/message_bus";
|
||||
import {
|
||||
RenderProtoViewRefStore,
|
||||
WebworkerRenderProtoViewRef
|
||||
@ -44,6 +38,7 @@ import {resolveInternalDomProtoView} from 'angular2/src/render/dom/view/proto_vi
|
||||
import {someComponent} from '../../render/dom/dom_renderer_integration_spec';
|
||||
import {WebWorkerMain} from 'angular2/src/web-workers/ui/impl';
|
||||
import {AnchorBasedAppRootUrl} from 'angular2/src/services/anchor_based_app_root_url';
|
||||
import {MockMessageBus, MockMessageBusSink, MockMessageBusSource} from './worker_test_util';
|
||||
|
||||
export function main() {
|
||||
function createBroker(workerSerializer: Serializer, uiSerializer: Serializer, tb: DomTestbed,
|
||||
@ -56,7 +51,7 @@ export function main() {
|
||||
workerMessageBus.attachToBus(uiMessageBus);
|
||||
|
||||
// set up the worker side
|
||||
var broker = new MessageBroker(workerMessageBus, workerSerializer);
|
||||
var broker = new MessageBroker(workerMessageBus, workerSerializer, null);
|
||||
|
||||
// set up the ui side
|
||||
var webWorkerMain = new WebWorkerMain(tb.compiler, tb.renderer, uiRenderViewStore, uiSerializer,
|
||||
@ -118,7 +113,6 @@ export function main() {
|
||||
});
|
||||
|
||||
describe("Web Worker Renderer", () => {
|
||||
beforeEachBindings(() => [DomTestbed]);
|
||||
var renderer: WorkerRenderer;
|
||||
var workerSerializer: Serializer;
|
||||
var workerRenderViewStore: RenderViewWithFragmentsStore;
|
||||
@ -145,7 +139,6 @@ export function main() {
|
||||
workerRenderViewStore);
|
||||
});
|
||||
|
||||
|
||||
it('should create and destroy root host views while using the given elements in place',
|
||||
inject([AsyncTestCompleter], (async) => {
|
||||
tb.compiler.compileHost(someComponent)
|
||||
@ -313,32 +306,3 @@ function createSerializer(protoViewRefStore: RenderProtoViewRefStore,
|
||||
]);
|
||||
return injector.get(Serializer);
|
||||
}
|
||||
|
||||
class MockMessageBusSource implements MessageBusSource {
|
||||
private _listenerStore: Map<int, SourceListener> = new Map<int, SourceListener>();
|
||||
private _numListeners: number = 0;
|
||||
|
||||
addListener(fn: SourceListener): int {
|
||||
this._listenerStore.set(++this._numListeners, fn);
|
||||
return this._numListeners;
|
||||
}
|
||||
|
||||
removeListener(index: int): void { MapWrapper.delete(this._listenerStore, index); }
|
||||
|
||||
receive(message: Object): void {
|
||||
MapWrapper.forEach(this._listenerStore, (fn: SourceListener, key: int) => { fn(message); });
|
||||
}
|
||||
}
|
||||
|
||||
class MockMessageBusSink implements MessageBusSink {
|
||||
private _sendTo: MockMessageBusSource;
|
||||
|
||||
send(message: Object): void { this._sendTo.receive({'data': message}); }
|
||||
|
||||
attachToSource(source: MockMessageBusSource) { this._sendTo = source; }
|
||||
}
|
||||
|
||||
class MockMessageBus implements MessageBus {
|
||||
constructor(public sink: MockMessageBusSink, public source: MockMessageBusSource) {}
|
||||
attachToBus(bus: MockMessageBus) { this.sink.attachToSource(bus.source); }
|
||||
}
|
||||
|
36
modules/angular2/test/web-workers/worker/worker_test_util.ts
Normal file
36
modules/angular2/test/web-workers/worker/worker_test_util.ts
Normal file
@ -0,0 +1,36 @@
|
||||
import {
|
||||
MessageBus,
|
||||
MessageBusSource,
|
||||
MessageBusSink,
|
||||
SourceListener
|
||||
} from "angular2/src/web-workers/shared/message_bus";
|
||||
import {MapWrapper} from "angular2/src/facade/collection";
|
||||
|
||||
export class MockMessageBusSource implements MessageBusSource {
|
||||
private _listenerStore: Map<int, SourceListener> = new Map<int, SourceListener>();
|
||||
private _numListeners: number = 0;
|
||||
|
||||
addListener(fn: SourceListener): int {
|
||||
this._listenerStore.set(++this._numListeners, fn);
|
||||
return this._numListeners;
|
||||
}
|
||||
|
||||
removeListener(index: int): void { MapWrapper.delete(this._listenerStore, index); }
|
||||
|
||||
receive(message: Object): void {
|
||||
MapWrapper.forEach(this._listenerStore, (fn: SourceListener, key: int) => { fn(message); });
|
||||
}
|
||||
}
|
||||
|
||||
export class MockMessageBusSink implements MessageBusSink {
|
||||
private _sendTo: MockMessageBusSource;
|
||||
|
||||
send(message: Object): void { this._sendTo.receive({'data': message}); }
|
||||
|
||||
attachToSource(source: MockMessageBusSource) { this._sendTo = source; }
|
||||
}
|
||||
|
||||
export class MockMessageBus implements MessageBus {
|
||||
constructor(public sink: MockMessageBusSink, public source: MockMessageBusSource) {}
|
||||
attachToBus(bus: MockMessageBus) { this.sink.attachToSource(bus.source); }
|
||||
}
|
Reference in New Issue
Block a user