| 
									
										
										
										
											2015-07-10 16:09:18 -07:00
										 |  |  | 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, | 
					
						
							| 
									
										
										
										
											2015-07-28 16:38:55 -07:00
										 |  |  |                'eventName': eventName, | 
					
						
							|  |  |  |                'locals': {'$event': {'target': {value: null}}} | 
					
						
							| 
									
										
										
										
											2015-07-10 16:09:18 -07:00
										 |  |  |              } | 
					
						
							|  |  |  |            } | 
					
						
							|  |  |  |          }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |          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; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |