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);
							 | 
						||
| 
								 | 
							
								       }));
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								}
							 |