80 lines
2.7 KiB
TypeScript
80 lines
2.7 KiB
TypeScript
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,
|
|
'locals': {'$event': {'target': {value: null}}}
|
|
}
|
|
}
|
|
});
|
|
|
|
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;
|
|
}
|
|
}
|