11import { fireEvent } from 'dom-testing-library'
22
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+
341const userEvent = {
442 click ( element ) {
543 const focusedElement = document . activeElement
@@ -11,30 +49,9 @@ const userEvent = {
1149 }
1250
1351 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 )
3153 } 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 )
3855 }
3956
4057 wasAnotherElementFocused && focusedElement . blur ( )
0 commit comments