@@ -46,9 +46,10 @@ function queryAllByLabelText(
4646 normalizer : matchNormalizer ,
4747 } )
4848 const labelledElements = labels
49- . map ( label => {
49+ . reduce ( ( matchedElements , label ) => {
50+ const elementsForLabel = [ ]
5051 if ( label . control ) {
51- return label . control
52+ elementsForLabel . push ( label . control )
5253 }
5354 /* istanbul ignore if */
5455 if ( label . getAttribute ( 'for' ) ) {
@@ -57,21 +58,27 @@ function queryAllByLabelText(
5758 // <label for="someId">text</label><input id="someId" />
5859
5960 // .control support has landed in jsdom (https://github.com/jsdom/jsdom/issues/2175)
60- return container . querySelector ( `[id="${ label . getAttribute ( 'for' ) } "]` )
61+ elementsForLabel . push (
62+ container . querySelector ( `[id="${ label . getAttribute ( 'for' ) } "]` ) ,
63+ )
6164 }
6265 if ( label . getAttribute ( 'id' ) ) {
6366 // <label id="someId">text</label><input aria-labelledby="someId" />
64- return container . querySelector (
65- `[aria-labelledby~="${ label . getAttribute ( 'id' ) } "]` ,
66- )
67+ container
68+ . querySelectorAll ( `[aria-labelledby~="${ label . getAttribute ( 'id' ) } "]` )
69+ . forEach ( element => elementsForLabel . push ( element ) )
6770 }
6871 if ( label . childNodes . length ) {
6972 // <label>text: <input /></label>
70- return label . querySelector ( selector )
73+ const formControlSelector =
74+ 'button, input, meter, output, progress, select, textarea'
75+ label
76+ . querySelectorAll ( formControlSelector )
77+ . forEach ( element => elementsForLabel . push ( element ) )
7178 }
72- return null
73- } )
74- . filter ( label => label !== null )
79+ return matchedElements . concat ( elementsForLabel )
80+ } , [ ] )
81+ . filter ( element => element !== null )
7582 . concat ( queryAllByAttribute ( 'aria-label' , container , text , { exact} ) )
7683
7784 const possibleAriaLabelElements = queryAllByText ( container , text , {
@@ -95,7 +102,9 @@ function queryAllByLabelText(
95102 [ ] ,
96103 )
97104
98- return Array . from ( new Set ( [ ...labelledElements , ...ariaLabelledElements ] ) )
105+ return Array . from (
106+ new Set ( [ ...labelledElements , ...ariaLabelledElements ] ) ,
107+ ) . filter ( element => element . matches ( selector ) )
99108}
100109
101110// the getAll* query would normally look like this:
0 commit comments