@@ -84,65 +84,83 @@ function getParent(el: Element) {
84
84
return parent
85
85
}
86
86
87
- export const userEvent : UserEvent = {
88
- // TODO: actually setup userEvent with config options
89
- setup ( ) {
90
- return userEvent
91
- } ,
92
- click ( element : Element , options : UserEventClickOptions = { } ) {
93
- const css = convertElementToCssSelector ( element )
94
- return triggerCommand ( '__vitest_click' , css , options )
95
- } ,
96
- dblClick ( element : Element , options : UserEventClickOptions = { } ) {
97
- const css = convertElementToCssSelector ( element )
98
- return triggerCommand ( '__vitest_dblClick' , css , options )
99
- } ,
100
- tripleClick ( element : Element , options : UserEventClickOptions = { } ) {
101
- const css = convertElementToCssSelector ( element )
102
- return triggerCommand ( '__vitest_tripleClick' , css , options )
103
- } ,
104
- selectOptions ( element , value ) {
105
- const values = provider === 'webdriverio'
106
- ? getWebdriverioSelectOptions ( element , value )
107
- : getSimpleSelectOptions ( element , value )
108
- const css = convertElementToCssSelector ( element )
109
- return triggerCommand ( '__vitest_selectOptions' , css , values )
110
- } ,
111
- type ( element : Element , text : string , options : UserEventTypeOptions = { } ) {
112
- const css = convertElementToCssSelector ( element )
113
- return triggerCommand ( '__vitest_type' , css , text , options )
114
- } ,
115
- clear ( element : Element ) {
116
- const css = convertElementToCssSelector ( element )
117
- return triggerCommand ( '__vitest_clear' , css )
118
- } ,
119
- tab ( options : UserEventTabOptions = { } ) {
120
- return triggerCommand ( '__vitest_tab' , options )
121
- } ,
122
- keyboard ( text : string ) {
123
- return triggerCommand ( '__vitest_keyboard' , text )
124
- } ,
125
- hover ( element : Element ) {
126
- const css = convertElementToCssSelector ( element )
127
- return triggerCommand ( '__vitest_hover' , css )
128
- } ,
129
- unhover ( element : Element ) {
130
- const css = convertElementToCssSelector ( element . ownerDocument . body )
131
- return triggerCommand ( '__vitest_hover' , css )
132
- } ,
87
+ function createUserEvent ( ) : UserEvent {
88
+ const keyboard = {
89
+ unreleased : [ ] as string [ ] ,
90
+ }
133
91
134
- // non userEvent events, but still useful
135
- fill ( element : Element , text : string , options ) {
136
- const css = convertElementToCssSelector ( element )
137
- return triggerCommand ( '__vitest_fill' , css , text , options )
138
- } ,
139
- dragAndDrop ( source : Element , target : Element , options = { } ) {
140
- const sourceCss = convertElementToCssSelector ( source )
141
- const targetCss = convertElementToCssSelector ( target )
142
- return triggerCommand ( '__vitest_dragAndDrop' , sourceCss , targetCss , options )
143
- } ,
92
+ return {
93
+ setup ( ) {
94
+ return createUserEvent ( )
95
+ } ,
96
+ click ( element : Element , options : UserEventClickOptions = { } ) {
97
+ const css = convertElementToCssSelector ( element )
98
+ return triggerCommand ( '__vitest_click' , css , options )
99
+ } ,
100
+ dblClick ( element : Element , options : UserEventClickOptions = { } ) {
101
+ const css = convertElementToCssSelector ( element )
102
+ return triggerCommand ( '__vitest_dblClick' , css , options )
103
+ } ,
104
+ tripleClick ( element : Element , options : UserEventClickOptions = { } ) {
105
+ const css = convertElementToCssSelector ( element )
106
+ return triggerCommand ( '__vitest_tripleClick' , css , options )
107
+ } ,
108
+ selectOptions ( element , value ) {
109
+ const values = provider === 'webdriverio'
110
+ ? getWebdriverioSelectOptions ( element , value )
111
+ : getSimpleSelectOptions ( element , value )
112
+ const css = convertElementToCssSelector ( element )
113
+ return triggerCommand ( '__vitest_selectOptions' , css , values )
114
+ } ,
115
+ async type ( element : Element , text : string , options : UserEventTypeOptions = { } ) {
116
+ const css = convertElementToCssSelector ( element )
117
+ const { unreleased } = await triggerCommand < { unreleased : string [ ] } > (
118
+ '__vitest_type' ,
119
+ css ,
120
+ text ,
121
+ { ...options , unreleased : keyboard . unreleased } ,
122
+ )
123
+ keyboard . unreleased = unreleased
124
+ } ,
125
+ clear ( element : Element ) {
126
+ const css = convertElementToCssSelector ( element )
127
+ return triggerCommand ( '__vitest_clear' , css )
128
+ } ,
129
+ tab ( options : UserEventTabOptions = { } ) {
130
+ return triggerCommand ( '__vitest_tab' , options )
131
+ } ,
132
+ async keyboard ( text : string ) {
133
+ const { unreleased } = await triggerCommand < { unreleased : string [ ] } > (
134
+ '__vitest_keyboard' ,
135
+ text ,
136
+ keyboard ,
137
+ )
138
+ keyboard . unreleased = unreleased
139
+ } ,
140
+ hover ( element : Element ) {
141
+ const css = convertElementToCssSelector ( element )
142
+ return triggerCommand ( '__vitest_hover' , css )
143
+ } ,
144
+ unhover ( element : Element ) {
145
+ const css = convertElementToCssSelector ( element . ownerDocument . body )
146
+ return triggerCommand ( '__vitest_hover' , css )
147
+ } ,
148
+
149
+ // non userEvent events, but still useful
150
+ fill ( element : Element , text : string , options ) {
151
+ const css = convertElementToCssSelector ( element )
152
+ return triggerCommand ( '__vitest_fill' , css , text , options )
153
+ } ,
154
+ dragAndDrop ( source : Element , target : Element , options = { } ) {
155
+ const sourceCss = convertElementToCssSelector ( source )
156
+ const targetCss = convertElementToCssSelector ( target )
157
+ return triggerCommand ( '__vitest_dragAndDrop' , sourceCss , targetCss , options )
158
+ } ,
159
+ }
144
160
}
145
161
162
+ export const userEvent : UserEvent = createUserEvent ( )
163
+
146
164
function getWebdriverioSelectOptions ( element : Element , value : string | string [ ] | HTMLElement [ ] | HTMLElement ) {
147
165
const options = [ ...element . querySelectorAll ( 'option' ) ] as HTMLOptionElement [ ]
148
166
0 commit comments