From 3ea04627e52e0ae546668ef66a27d0699a9222a4 Mon Sep 17 00:00:00 2001 From: kreuzerk Date: Thu, 18 Feb 2021 09:39:47 +0100 Subject: [PATCH 1/2] fix(cdk/testing): defineReadonlyEventProperty only if its not yet on the event --- src/cdk/testing/testbed/fake-events/event-objects.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cdk/testing/testbed/fake-events/event-objects.ts b/src/cdk/testing/testbed/fake-events/event-objects.ts index f211df2920f6..063ff053ad3a 100644 --- a/src/cdk/testing/testbed/fake-events/event-objects.ts +++ b/src/cdk/testing/testbed/fake-events/event-objects.ts @@ -46,7 +46,9 @@ export function createMouseEvent( // IE won't set `defaultPrevented` on synthetic events so we need to do it manually. event.preventDefault = function() { - defineReadonlyEventProperty(event, 'defaultPrevented', true); + if(!event.defaultPrevented) { + defineReadonlyEventProperty(event, 'defaultPrevented', true); + } return originalPreventDefault(); }; @@ -157,7 +159,9 @@ export function createKeyboardEvent(type: string, keyCode: number = 0, key: stri // IE won't set `defaultPrevented` on synthetic events so we need to do it manually. event.preventDefault = function() { - defineReadonlyEventProperty(event, 'defaultPrevented', true); + if(!event.defaultPrevented) { + defineReadonlyEventProperty(event, 'defaultPrevented', true); + } return originalPreventDefault(); }; From 3ea68c04555685e20a108ccfdd15ffdcf2126fe2 Mon Sep 17 00:00:00 2001 From: kreuzerk Date: Sat, 20 Feb 2021 21:21:45 +0100 Subject: [PATCH 2/2] refactor(cdk/testing): move originalPreventDefault call up --- .../testbed/fake-events/event-objects.ts | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/cdk/testing/testbed/fake-events/event-objects.ts b/src/cdk/testing/testbed/fake-events/event-objects.ts index 063ff053ad3a..6e3bf7c8f624 100644 --- a/src/cdk/testing/testbed/fake-events/event-objects.ts +++ b/src/cdk/testing/testbed/fake-events/event-objects.ts @@ -46,10 +46,15 @@ export function createMouseEvent( // IE won't set `defaultPrevented` on synthetic events so we need to do it manually. event.preventDefault = function() { - if(!event.defaultPrevented) { + /* + Calling originalPreventDefault before the if check ensures + that non IE apps never call defineReadonlyEventProperty + */ + const result = originalPreventDefault(); + if (!event.defaultPrevented) { defineReadonlyEventProperty(event, 'defaultPrevented', true); } - return originalPreventDefault(); + return result; }; return event; @@ -159,10 +164,15 @@ export function createKeyboardEvent(type: string, keyCode: number = 0, key: stri // IE won't set `defaultPrevented` on synthetic events so we need to do it manually. event.preventDefault = function() { - if(!event.defaultPrevented) { - defineReadonlyEventProperty(event, 'defaultPrevented', true); + /* + Calling originalPreventDefault before the if check ensures + that non IE apps never call defineReadonlyEventProperty + */ + const result = originalPreventDefault(); + if (!event.defaultPrevented) { + defineReadonlyEventProperty(event, 'defaultPrevented', true); } - return originalPreventDefault(); + return result; }; return event;