it('should be able to delegate with custom event names', function () { var source = new EventTarget(); var target = new EventTarget(); spyOn(source, 'on').andCallThrough(); spyOn(target, 'fire').andCallThrough(); Event.delegate(source, 'foo', target, 'bar'); source.fire('foo'); expect(target.fire).toHaveBeenCalled(); expect(target.fire.mostRecentCall.args[0]).toBe('bar'); });
it('should preserve all data if `preserveData` is specified when delegate custom event', function () { var source = new EventTarget(); var target = new EventTarget(); spyOn(source, 'on').andCallThrough(); spyOn(target, 'fire').andCallThrough(); Event.delegate(source, 'foo', target, 'bar', { preserveData: true }); var event = { x: 1 }; source.fire('foo', event); expect(target.fire).toHaveBeenCalled(); expect(target.fire.mostRecentCall.args[0]).toBe('bar'); expect(target.fire.mostRecentCall.args[1].x).toBe(1); });
it('should delegate `type` from `source` to `target`', function () { var source = new EventTarget(); var target = new EventTarget(); spyOn(source, 'on').andCallThrough(); spyOn(target, 'fire').andCallThrough(); Event.delegate(source, target, 'foo'); expect(source.on).toHaveBeenCalled(); expect(source.on.mostRecentCall.args[0]).toBe('foo'); source.fire('foo'); expect(target.fire).toHaveBeenCalled(); expect(target.fire.mostRecentCall.args[0]).toBe('foo'); });
it('should sync the state between 2 event objects `syncState` is specified when delegate custom event', function () { var source = new EventTarget(); var target = new EventTarget(); spyOn(source, 'on').andCallThrough(); spyOn(target, 'fire').andCallThrough(); var handler = function (event) { event.stopPropagation(); event.preventDefault(); event.stopImmediatePropagation(); }; target.on('bar', handler); Event.delegate(source, 'foo', target, 'bar', { syncState: true }); var event = source.fire('foo', { x: 1 }); expect(target.fire).toHaveBeenCalled(); expect(target.fire.mostRecentCall.args[0]).toBe('bar'); expect(event.isPropagationStopped()).toBe(true); expect(event.isDefaultPrevented()).toBe(true); expect(event.isImmediatePropagationStopped()).toBe(true); });