Skip to content

Commit a61c548

Browse files
authored
Fix VTU don't return key property to event when use trigger.('eventName.key') (#1808)
* Add key to events When trigger 'keydown.tab` - key does not exists. This affect case when in components we use w3c-keys for compare * fix: pass key proprety to event * refactor: remove console.log * fix: test describe
1 parent 245ba2a commit a61c548

File tree

2 files changed

+73
-9
lines changed

2 files changed

+73
-9
lines changed

packages/test-utils/src/create-dom-event.js

+28-1
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,35 @@ const modifiers = {
2424
pagedown: 34
2525
}
2626

27+
// get from https://github.com/ashubham/w3c-keys/blob/master/index.ts
28+
const w3cKeys = {
29+
enter: 'Enter',
30+
tab: 'Tab',
31+
delete: 'Delete',
32+
esc: 'Esc',
33+
escape: 'Escape',
34+
space: ' ',
35+
up: 'Up',
36+
left: 'Left',
37+
right: 'Right',
38+
down: 'Down',
39+
end: 'End',
40+
home: 'Home',
41+
backspace: 'Backspace',
42+
insert: 'Insert',
43+
pageup: 'PageUp',
44+
pagedown: 'PageDown'
45+
}
46+
47+
const codeToKeyNameMap = Object.entries(modifiers).reduce(
48+
(acc, [key, value]) => Object.assign(acc, { [value]: w3cKeys[key] }),
49+
{}
50+
)
51+
2752
function getOptions(eventParams) {
2853
const { modifier, meta, options } = eventParams
2954
const keyCode = modifiers[modifier] || options.keyCode || options.code
55+
const key = codeToKeyNameMap[keyCode]
3056

3157
return {
3258
...options, // What the user passed in as the second argument to #trigger
@@ -36,7 +62,8 @@ function getOptions(eventParams) {
3662

3763
// Any derived options should go here
3864
keyCode,
39-
code: keyCode
65+
code: keyCode,
66+
key
4067
}
4168
}
4269

test/specs/wrapper/trigger.spec.js

+45-8
Original file line numberDiff line numberDiff line change
@@ -43,23 +43,27 @@ describeWithShallowAndMount('trigger', mountingMethod => {
4343
expect(keydownHandler).toHaveBeenCalled()
4444
})
4545

46-
describe('causes keydown handler to fire with the appropriate keyCode when wrapper.trigger("keydown", { keyCode: 65 }) is fired on a Component', async () => {
46+
describe('causes keydown handler to fire with the appropriate keyCode when wrapper.trigger("keydown", { keyCode: 46 }) is fired on a Component', async () => {
4747
const keydownHandler = jest.fn()
4848
const wrapper = mountingMethod(ComponentWithEvents, {
4949
propsData: { keydownHandler }
5050
})
5151

52-
await wrapper.find('.keydown').trigger('keydown', { keyCode: 65 })
52+
await wrapper.find('.keydown').trigger('keydown', { keyCode: 46 })
5353

5454
const keyboardEvent = keydownHandler.mock.calls[0][0]
5555

5656
// Unfortunately, JSDom will give different types than PhantomJS for keyCodes (string vs number), so we have to use parseInt to normalize the types.
5757
it('contains the keyCode', () => {
58-
expect(parseInt(keyboardEvent.keyCode, 10)).toEqual(65)
58+
expect(parseInt(keyboardEvent.keyCode, 10)).toEqual(46)
59+
})
60+
61+
it('contains the key', () => {
62+
expect(keyboardEvent.key).toEqual('Delete')
5963
})
6064

6165
itDoNotRunIf(isRunningChrome, 'contains the code', () => {
62-
expect(parseInt(keyboardEvent.code, 10)).toEqual(65)
66+
expect(parseInt(keyboardEvent.code, 10)).toEqual(46)
6367
})
6468
})
6569

@@ -73,7 +77,7 @@ describeWithShallowAndMount('trigger', mountingMethod => {
7377
expect(keydownHandler).toHaveBeenCalled()
7478
})
7579

76-
it.skip('convert a registered key name to a key code', async () => {
80+
it('convert a registered key name to a key code and key', async () => {
7781
const modifiers = {
7882
enter: 13,
7983
esc: 27,
@@ -91,14 +95,47 @@ describeWithShallowAndMount('trigger', mountingMethod => {
9195
pageup: 33,
9296
pagedown: 34
9397
}
98+
99+
// get from https://github.com/ashubham/w3c-keys/blob/master/index.ts
100+
const w3cKeys = {
101+
enter: 'Enter',
102+
tab: 'Tab',
103+
delete: 'Delete',
104+
esc: 'Esc',
105+
escape: 'Escape',
106+
space: ' ',
107+
up: 'Up',
108+
left: 'Left',
109+
right: 'Right',
110+
down: 'Down',
111+
end: 'End',
112+
home: 'Home',
113+
backspace: 'Backspace',
114+
insert: 'Insert',
115+
pageup: 'PageUp',
116+
pagedown: 'PageDown'
117+
}
118+
119+
const codeToKeyNameMap = Object.entries(modifiers).reduce(
120+
(acc, [key, value]) => Object.assign(acc, { [value]: w3cKeys[key] }),
121+
{}
122+
)
123+
124+
const modifiersArray = Object.entries(modifiers)
125+
94126
const keyupHandler = jest.fn()
95127
const wrapper = mountingMethod(ComponentWithEvents, {
96128
propsData: { keyupHandler }
97129
})
98-
for (const keyName in modifiers) {
99-
const keyCode = modifiers[keyName]
130+
131+
for (let index = 0; index < modifiersArray.length; index++) {
132+
const [keyName, keyCode] = modifiersArray[index]
100133
await wrapper.find('.keydown').trigger(`keyup.${keyName}`)
101-
expect(keyupHandler.mock.calls[0][0].keyCode).toEqual(keyCode)
134+
135+
expect(keyupHandler.mock.calls[index][0].keyCode).toEqual(keyCode)
136+
expect(keyupHandler.mock.calls[index][0].key).toEqual(
137+
codeToKeyNameMap[keyCode]
138+
)
102139
}
103140
})
104141

0 commit comments

Comments
 (0)