-
Notifications
You must be signed in to change notification settings - Fork 252
/
Copy pathselect.ts
48 lines (37 loc) · 1.39 KB
/
select.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import {isJsdomEnv, render} from '#testHelpers'
import {waitFor} from '@testing-library/dom'
test('`Selection.setBaseAndExtent()` resets input selection in browser', async () => {
const {element} = render<HTMLInputElement>(`<input value="foo"/>`, {
selection: {focusOffset: 3},
})
expect(element.selectionStart).toBe(3)
element.ownerDocument.getSelection()?.setBaseAndExtent(element, 0, element, 0)
expect(element.selectionStart).toBe(isJsdomEnv() ? 3 : 0)
})
test('events are not dispatched on same microtask in browser', async () => {
const {element} = render<HTMLInputElement>(`<input value="foo"/>`)
const onSelect = mocks.fn()
element.addEventListener('select', onSelect)
element.setSelectionRange(1, 2)
expect(onSelect).toBeCalledTimes(isJsdomEnv() ? 1 : 0)
await waitFor(() => expect(onSelect).toBeCalledTimes(1))
})
test('`HTMLInputElement.focus()` in contenteditable changes `Selection` in browser', () => {
const {element, xpathNode} = render<HTMLInputElement>(
`<div contenteditable="true"><input/></div><span></span>`,
{
selection: {
focusNode: '//span',
},
},
)
expect(element.ownerDocument.getSelection()).toHaveProperty(
'anchorNode',
xpathNode('//span'),
)
xpathNode('//input').focus()
expect(element.ownerDocument.getSelection()).toHaveProperty(
'anchorNode',
isJsdomEnv() ? xpathNode('//span') : element,
)
})