From 9ede9acdcaf50ee9c9d0a99b3d034cc64f9a32ca Mon Sep 17 00:00:00 2001 From: Kitson Kelly Date: Wed, 12 Apr 2017 17:41:49 +0100 Subject: [PATCH 1/2] Allow target to be mocked in sendEvent --- src/support/sendEvent.ts | 8 ++++++++ tests/unit/support/sendEvent.ts | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/support/sendEvent.ts b/src/support/sendEvent.ts index 752b497..8017241 100644 --- a/src/support/sendEvent.ts +++ b/src/support/sendEvent.ts @@ -133,6 +133,14 @@ export default function sendEvent(target: Element, type: st (event as CustomEvent).initCustomEvent(type, bubbles!, cancelable!, {}); } try { + if ('target' in initProps) { + Object.defineProperty(event, 'target', { + value: ( initProps).target, + writable: false, + enumerable: true, + configurable: true + }); + } deepAssign(event, initProps); } catch (e) { /* swallowing assignment errors when trying to overwrite native event properties */ } diff --git a/tests/unit/support/sendEvent.ts b/tests/unit/support/sendEvent.ts index e89ad42..4c0266d 100644 --- a/tests/unit/support/sendEvent.ts +++ b/tests/unit/support/sendEvent.ts @@ -57,6 +57,30 @@ registerSuite({ }); }, + 'mock target'() { + const target = document.createElement('div'); + document.body.appendChild(target); + + const mockTarget = {} as HTMLDivElement; + let called = false; + + function listener(evt: CustomEvent) { + assert.strictEqual(evt.target, mockTarget, 'Target of event should be mock target'); + called = true; + } + + target.addEventListener('click', listener); + + sendEvent(target, 'click', { + eventInit: { + target: mockTarget + } + }); + assert.isTrue(called, 'listener should have been called'); + + document.body.removeChild(target); + }, + 'MouseEvents'() { const target = document.createElement('button'); document.body.appendChild(target); From 8ddbbfb3bc8930589cf2e75400e207c2ecb7b072 Mon Sep 17 00:00:00 2001 From: Kitson Kelly Date: Wed, 12 Apr 2017 18:11:55 +0100 Subject: [PATCH 2/2] Attempt to fix setting mock target on IE11 --- src/support/sendEvent.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/support/sendEvent.ts b/src/support/sendEvent.ts index 8017241..62aea95 100644 --- a/src/support/sendEvent.ts +++ b/src/support/sendEvent.ts @@ -138,7 +138,7 @@ export default function sendEvent(target: Element, type: st value: ( initProps).target, writable: false, enumerable: true, - configurable: true + configurable: false }); } deepAssign(event, initProps);