1
1
import type { RunnerTask } from 'vitest'
2
2
import type { BrowserRPC } from '@vitest/browser/client'
3
+ import type { UserEvent as TestingLibraryUserEvent } from '@testing-library/user-event'
3
4
import type {
4
5
BrowserPage ,
5
6
Locator ,
@@ -28,14 +29,14 @@ function triggerCommand<T>(command: string, ...args: any[]) {
28
29
return rpc ( ) . triggerCommand < T > ( contextId , command , filepath ( ) , args )
29
30
}
30
31
31
- function createUserEvent ( ) : UserEvent {
32
+ export function createUserEvent ( __tl_user_event__ ?: TestingLibraryUserEvent ) : UserEvent {
32
33
const keyboard = {
33
34
unreleased : [ ] as string [ ] ,
34
35
}
35
36
36
37
return {
37
- setup ( ) {
38
- return createUserEvent ( )
38
+ setup ( options ?: any ) {
39
+ return createUserEvent ( __tl_user_event__ ?. setup ( options ) )
39
40
} ,
40
41
click ( element : Element | Locator , options : UserEventClickOptions = { } ) {
41
42
return convertToLocator ( element ) . click ( processClickOptions ( options ) )
@@ -49,30 +50,9 @@ function createUserEvent(): UserEvent {
49
50
selectOptions ( element , value ) {
50
51
return convertToLocator ( element ) . selectOptions ( value )
51
52
} ,
52
- async type ( element : Element | Locator , text : string , options : UserEventTypeOptions = { } ) {
53
- const selector = convertToSelector ( element )
54
- const { unreleased } = await triggerCommand < { unreleased : string [ ] } > (
55
- '__vitest_type' ,
56
- selector ,
57
- text ,
58
- { ...options , unreleased : keyboard . unreleased } ,
59
- )
60
- keyboard . unreleased = unreleased
61
- } ,
62
53
clear ( element : Element | Locator ) {
63
54
return convertToLocator ( element ) . clear ( )
64
55
} ,
65
- tab ( options : UserEventTabOptions = { } ) {
66
- return triggerCommand ( '__vitest_tab' , options )
67
- } ,
68
- async keyboard ( text : string ) {
69
- const { unreleased } = await triggerCommand < { unreleased : string [ ] } > (
70
- '__vitest_keyboard' ,
71
- text ,
72
- keyboard ,
73
- )
74
- keyboard . unreleased = unreleased
75
- } ,
76
56
hover ( element : Element | Locator , options : UserEventHoverOptions = { } ) {
77
57
return convertToLocator ( element ) . hover ( processHoverOptions ( options ) )
78
58
} ,
@@ -92,11 +72,46 @@ function createUserEvent(): UserEvent {
92
72
const targetLocator = convertToLocator ( target )
93
73
return sourceLocator . dropTo ( targetLocator , processDragAndDropOptions ( options ) )
94
74
} ,
75
+
76
+ // testing-library user-event
77
+ async type ( element : Element | Locator , text : string , options : UserEventTypeOptions = { } ) {
78
+ if ( typeof __tl_user_event__ !== 'undefined' ) {
79
+ return __tl_user_event__ . type (
80
+ element instanceof Element ? element : element . element ( ) ,
81
+ text ,
82
+ options ,
83
+ )
84
+ }
85
+
86
+ const selector = convertToSelector ( element )
87
+ const { unreleased } = await triggerCommand < { unreleased : string [ ] } > (
88
+ '__vitest_type' ,
89
+ selector ,
90
+ text ,
91
+ { ...options , unreleased : keyboard . unreleased } ,
92
+ )
93
+ keyboard . unreleased = unreleased
94
+ } ,
95
+ tab ( options : UserEventTabOptions = { } ) {
96
+ if ( typeof __tl_user_event__ !== 'undefined' ) {
97
+ return __tl_user_event__ . tab ( options )
98
+ }
99
+ return triggerCommand ( '__vitest_tab' , options )
100
+ } ,
101
+ async keyboard ( text : string ) {
102
+ if ( typeof __tl_user_event__ !== 'undefined' ) {
103
+ return __tl_user_event__ . keyboard ( text )
104
+ }
105
+ const { unreleased } = await triggerCommand < { unreleased : string [ ] } > (
106
+ '__vitest_keyboard' ,
107
+ text ,
108
+ keyboard ,
109
+ )
110
+ keyboard . unreleased = unreleased
111
+ } ,
95
112
}
96
113
}
97
114
98
- export const userEvent = createUserEvent ( )
99
-
100
115
export function cdp ( ) {
101
116
return getBrowserState ( ) . cdp !
102
117
}
0 commit comments