1
1
import { fireEvent } from 'dom-testing-library'
2
2
3
+ function findTagInParents ( element , tagName ) {
4
+ if ( element . parentNode == null ) return undefined
5
+ if ( element . parentNode . tagName === tagName ) return element . parentNode
6
+ return findTagInParents ( element . parentNode , tagName )
7
+ }
8
+
9
+ function clickLabel ( label ) {
10
+ fireEvent . mouseOver ( label )
11
+ fireEvent . mouseMove ( label )
12
+ fireEvent . mouseDown ( label )
13
+ fireEvent . mouseUp ( label )
14
+ fireEvent . click ( label )
15
+
16
+ if ( label . htmlFor ) {
17
+ const input = document . getElementById ( label . htmlFor )
18
+ input . focus ( )
19
+ fireEvent . click ( label )
20
+ } else {
21
+ const input = label . querySelector ( 'input' )
22
+ input . focus ( )
23
+ label . focus ( )
24
+ fireEvent . click ( input )
25
+ fireEvent . click ( label )
26
+ }
27
+ }
28
+
29
+ function clickElement ( element ) {
30
+ fireEvent . mouseOver ( element )
31
+ fireEvent . mouseMove ( element )
32
+ fireEvent . mouseDown ( element )
33
+ element . focus ( )
34
+ fireEvent . mouseUp ( element )
35
+ fireEvent . click ( element )
36
+
37
+ const labelAncestor = findTagInParents ( element , 'LABEL' )
38
+ labelAncestor && clickLabel ( labelAncestor )
39
+ }
40
+
3
41
const userEvent = {
4
42
click ( element ) {
5
43
const focusedElement = document . activeElement
@@ -11,30 +49,9 @@ const userEvent = {
11
49
}
12
50
13
51
if ( element . tagName === 'LABEL' ) {
14
- fireEvent . mouseOver ( element )
15
- fireEvent . mouseMove ( element )
16
- fireEvent . mouseDown ( element )
17
- fireEvent . mouseUp ( element )
18
- fireEvent . click ( element )
19
-
20
- if ( element . htmlFor ) {
21
- const input = document . getElementById ( element . htmlFor )
22
- input . focus ( )
23
- fireEvent . click ( element )
24
- } else {
25
- const input = element . querySelector ( 'input' )
26
- input . focus ( )
27
- element . focus ( )
28
- fireEvent . click ( input )
29
- fireEvent . click ( element )
30
- }
52
+ clickLabel ( element )
31
53
} else {
32
- fireEvent . mouseOver ( element )
33
- fireEvent . mouseMove ( element )
34
- fireEvent . mouseDown ( element )
35
- element . focus ( )
36
- fireEvent . mouseUp ( element )
37
- fireEvent . click ( element )
54
+ clickElement ( element )
38
55
}
39
56
40
57
wasAnotherElementFocused && focusedElement . blur ( )
0 commit comments