123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- /// <reference path="../typings/index.d.ts"/>
- import Event from '../lib/Event';
- import * as assert from 'assert';
- suite('Event handling', function() {
- let event: Event<string>;
- setup(function() {
- event = new Event();
- });
- test('no handlers', function() {
- assert(!event.hasHandlers, 'event should report any registered handlers');
- assert.doesNotThrow(function() {
- event.dispatch('');
- }, 'dispatch should not throw');
- });
- suite('one handler', function() {
- test('no context', function() {
- let called = false;
- event.addHandler(function(payload: string) {
- assert.equal(payload, 'foo');
- called = true;
- });
- assert(event.hasHandlers, 'event should report registered handlers');
- event.dispatch('foo');
- assert(called, 'the handler should have been called');
- });
- test('with context', function() {
- let foo = 0;
- function handler(payload: string, context: number) {
- assert.equal(payload, 'foo');
- foo = context;
- };
- event.addHandler(handler, 5).dispatch('foo');
- assert.equal(foo, 5, 'context was not transferred correctly');
- assert(event.removeHandler(handler).hasHandlers, 'handler should only be remvoved if contet matches');
- assert(!event.removeHandler(handler, 5).hasHandlers, 'handler should be remvoved if contet matches');
- });
- test('one handler, no context, multiple attachments', function() {
- let i = 0;
- function handler(): void {
- i++;
- }
- event.addHandler(handler).addHandler(handler).dispatch('foo');
- assert.equal(i, 1, 'handler should have been called once');
- assert(event.isHandlerAttached(handler), 'handler should be reported as attached');
- event.removeHandler(handler);
- assert(!event.isHandlerAttached(handler), 'handler should be reported as not attached after removal');
- });
- test('one handler, different contexts, multiple attachments', function() {
- let i = 0;
- function handler(): void {
- i++;
- }
- event.addHandler(handler, 1).addHandler(handler, 2).dispatch('foo');
- assert.equal(i, 2, 'handler should have been called twice');
- assert(!event.isHandlerAttached(handler), 'handler should be reported as not attached w/o context');
- assert(event.isHandlerAttached(handler, 1), 'handler should be reported as attached with proper context');
- });
- });
- suite('two handlers', function() {
- let called1: boolean, called2: boolean,
- contexts: Array<number>;
- function handler1(payload: string) {
- assert.equal(payload, 'foo');
- called1 = true;
- };
- function handler2(payload: string) {
- assert.equal(payload, 'foo');
- called2 = true;
- };
- function ctxHandler(payload: string, context: any) {
- contexts[context] = context;
- assert.equal(payload, 'foo');
- }
- setup(function() {
- called1 = called2 = false;
- contexts = [0, 0, 0];
- event
- .addHandler(handler1)
- .addHandler(handler2);
- });
- test('both attached', function() {
- event.dispatch('foo');
- assert(called1, 'handler 1 should have been called');
- assert(called2, 'handler 2 should have been called');
- });
- test('handler 1 detached', function() {
- event.removeHandler(handler1);
- event.dispatch('foo');
- assert(!called1, 'handler 1 should not have been called');
- assert(called2, 'handler 2 should have been called');
- });
- test('handler 2 detached', function() {
- event.removeHandler(handler2);
- event.dispatch('foo');
- assert(called1, 'handler 1 should have been called');
- assert(!called2, 'handler 2 should not have been called');
- });
- test('context, both attached', function() {
- event
- .addHandler(ctxHandler, 1)
- .addHandler(ctxHandler, 2)
- .dispatch('foo');
- assert.equal(contexts[1], 1, 'context 1 was not transferred correctly');
- assert.equal(contexts[2], 2, 'context 2 was not transferred correctly');
- });
- test('context, handler 1 detached', function() {
- event
- .addHandler(ctxHandler, 1)
- .addHandler(ctxHandler, 2)
- .removeHandler(ctxHandler, 1)
- .dispatch('foo');
- assert.equal(contexts[1], 0, 'handler was not detached');
- assert.equal(contexts[2], 2, 'context 2 was not transferred correctly');
- });
- test('context, handler 2 detached', function() {
- event
- .addHandler(ctxHandler, 1)
- .addHandler(ctxHandler, 2)
- .removeHandler(ctxHandler, 2)
- .dispatch('foo');
- assert.equal(contexts[1], 1, 'context 1 was not transferred correctly');
- assert.equal(contexts[2], 0, 'handler was not detached');
- });
- });
- });
|