(userEventBase: TestingLibraryUserEvent, options?: TestingLibraryOptions)
| 144 | } |
| 145 | |
| 146 | function createPreviewUserEvent(userEventBase: TestingLibraryUserEvent, options?: TestingLibraryOptions): UserEvent { |
| 147 | let userEvent = userEventBase.setup({ |
| 148 | advanceTimers: delay => vi.advanceTimersByTimeAsync(delay), |
| 149 | ...options, |
| 150 | }) |
| 151 | let clipboardData: DataTransfer | undefined |
| 152 | |
| 153 | function toElement(element: Element | Locator) { |
| 154 | return element instanceof Element ? element : element.element() |
| 155 | } |
| 156 | |
| 157 | const vitestUserEvent: UserEvent = { |
| 158 | setup(options?: any) { |
| 159 | return createPreviewUserEvent(userEventBase, options) |
| 160 | }, |
| 161 | async cleanup() { |
| 162 | userEvent = userEventBase.setup({ |
| 163 | advanceTimers: delay => vi.advanceTimersByTimeAsync(delay), |
| 164 | ...options, |
| 165 | }) |
| 166 | }, |
| 167 | async click(element) { |
| 168 | await userEvent.click(toElement(element)) |
| 169 | }, |
| 170 | async dblClick(element) { |
| 171 | await userEvent.dblClick(toElement(element)) |
| 172 | }, |
| 173 | async tripleClick(element) { |
| 174 | await userEvent.tripleClick(toElement(element)) |
| 175 | }, |
| 176 | async selectOptions(element, value) { |
| 177 | const options = (Array.isArray(value) ? value : [value]).map((option) => { |
| 178 | if (typeof option !== 'string') { |
| 179 | return toElement(option) |
| 180 | } |
| 181 | return option |
| 182 | }) |
| 183 | await userEvent.selectOptions( |
| 184 | toElement(element), |
| 185 | options as string[] | HTMLElement[], |
| 186 | ) |
| 187 | }, |
| 188 | async clear(element) { |
| 189 | await userEvent.clear(toElement(element)) |
| 190 | }, |
| 191 | async hover(element: Element | Locator) { |
| 192 | await userEvent.hover(toElement(element)) |
| 193 | }, |
| 194 | async unhover(element: Element | Locator) { |
| 195 | await userEvent.unhover(toElement(element)) |
| 196 | }, |
| 197 | async upload(element, files: string | string[] | File | File[]) { |
| 198 | const uploadPromise = (Array.isArray(files) ? files : [files]).map(async (file) => { |
| 199 | if (typeof file !== 'string') { |
| 200 | return file |
| 201 | } |
| 202 | |
| 203 | const { content: base64, basename, mime } = await triggerCommand<{ |
no test coverage detected