Skip to content

Commit 315c3a0

Browse files
devversionjelbourn
authored andcommitted
fix(cdk/testing/testbed): set defined event properties as configurable
For a couple of events, we update properties using `defineProperty` or `defineProperties`. These by default use `configurable: false`. This does not match the behavior of native event properties we just overwrote. Those properties are readonly, but still configurable. We should match that behavior so that the synthetic events behave similar to actual event objects.
1 parent 469dd54 commit 315c3a0

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

src/cdk/testing/testbed/fake-events/event-objects.ts

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export function createMouseEvent(type: string, clientX = 0, clientY = 0, button
4141

4242
// `initMouseEvent` doesn't allow us to pass the `buttons` and
4343
// defaults it to 0 which looks like a fake event.
44-
Object.defineProperty(event, 'buttons', {get: () => 1});
44+
defineReadonlyEventProperty(event, 'buttons', 1);
4545

4646
// IE won't set `defaultPrevented` on synthetic events so we need to do it manually.
4747
event.preventDefault = function() {
@@ -89,11 +89,9 @@ export function createTouchEvent(type: string, pageX = 0, pageY = 0) {
8989

9090
// Most of the browsers don't have a "initTouchEvent" method that can be used to define
9191
// the touch details.
92-
Object.defineProperties(event, {
93-
touches: {value: [touchDetails]},
94-
targetTouches: {value: [touchDetails]},
95-
changedTouches: {value: [touchDetails]}
96-
});
92+
defineReadonlyEventProperty(event, 'touches', [touchDetails]);
93+
defineReadonlyEventProperty(event, 'targetTouches', [touchDetails]);
94+
defineReadonlyEventProperty(event, 'changedTouches', [touchDetails]);
9795

9896
return event;
9997
}
@@ -145,15 +143,13 @@ export function createKeyboardEvent(type: string, keyCode: number = 0, key: stri
145143

146144
// Webkit Browsers don't set the keyCode when calling the init function.
147145
// See related bug https://bugs.webkit.org/show_bug.cgi?id=16735
148-
Object.defineProperties(event, {
149-
keyCode: { get: () => keyCode },
150-
key: { get: () => key },
151-
target: { get: () => target },
152-
ctrlKey: { get: () => !!modifiers.control },
153-
altKey: { get: () => !!modifiers.alt },
154-
shiftKey: { get: () => !!modifiers.shift },
155-
metaKey: { get: () => !!modifiers.meta }
156-
});
146+
defineReadonlyEventProperty(event, 'keyCode', keyCode);
147+
defineReadonlyEventProperty(event, 'key', key);
148+
defineReadonlyEventProperty(event, 'target', target);
149+
defineReadonlyEventProperty(event, 'ctrlKey', !!modifiers.control);
150+
defineReadonlyEventProperty(event, 'altKey', !!modifiers.alt);
151+
defineReadonlyEventProperty(event, 'shiftKey', !!modifiers.shift);
152+
defineReadonlyEventProperty(event, 'metaKey', !!modifiers.meta);
157153

158154
// IE won't set `defaultPrevented` on synthetic events so we need to do it manually.
159155
event.preventDefault = function() {

0 commit comments

Comments
 (0)