1
1
import { mocked } from "ts-jest/utils" ;
2
2
import focusElementWithin from "../focusElementWithin" ;
3
3
import getFocusableElements_ from "../getFocusableElements" ;
4
+ import scrollIntoView_ from "../../scrollIntoView" ;
4
5
5
6
jest . mock ( "../getFocusableElements" ) ;
7
+ jest . mock ( "../../scrollIntoView" ) ;
6
8
7
9
const getFocusableElements = mocked ( getFocusableElements_ ) ;
10
+ const scrollIntoView = mocked ( scrollIntoView_ ) ;
8
11
const ELEMENT = document . createElement ( "div" ) ;
9
12
const element1 = document . createElement ( "button" ) ;
10
13
element1 . className = "element element--1" ;
@@ -26,6 +29,7 @@ describe("focusElementWithin", () => {
26
29
focus2 . mockClear ( ) ;
27
30
focus3 . mockClear ( ) ;
28
31
getFocusableElements . mockClear ( ) ;
32
+ scrollIntoView . mockClear ( ) ;
29
33
} ) ;
30
34
31
35
it ( "should throw an error if it can not find a focusable element" , ( ) => {
@@ -132,4 +136,59 @@ describe("focusElementWithin", () => {
132
136
expect ( focus2 ) . not . toBeCalled ( ) ;
133
137
expect ( focus3 ) . toBeCalled ( ) ;
134
138
} ) ;
139
+
140
+ it ( "should call scrollIntoView if preventScroll is false and the container element is not the document" , ( ) => {
141
+ elements . forEach ( ( element ) => {
142
+ document . body . appendChild ( element ) ;
143
+ } ) ;
144
+ focusElementWithin ( document , "first" , false , false , elements ) ;
145
+ focusElementWithin ( document , "last" , false , false , elements ) ;
146
+ focusElementWithin ( document , ".element" , false , false , elements ) ;
147
+ focusElementWithin ( document , "first" , true , false , elements ) ;
148
+ focusElementWithin ( document , "last" , true , false , elements ) ;
149
+ focusElementWithin ( document , ".element" , true , false , elements ) ;
150
+ focusElementWithin ( document , "first" , false , true , elements ) ;
151
+ focusElementWithin ( document , "last" , false , true , elements ) ;
152
+ focusElementWithin ( document , ".element" , false , true , elements ) ;
153
+ focusElementWithin ( document , "first" , true , true , elements ) ;
154
+ focusElementWithin ( document , "last" , true , true , elements ) ;
155
+ focusElementWithin ( document , ".element" , true , true , elements ) ;
156
+ elements . forEach ( ( element ) => {
157
+ document . body . removeChild ( element ) ;
158
+ } ) ;
159
+
160
+ expect ( scrollIntoView ) . not . toBeCalled ( ) ;
161
+
162
+ const container = document . createElement ( "div" ) ;
163
+ elements . forEach ( ( element ) => {
164
+ container . appendChild ( element ) ;
165
+ } ) ;
166
+
167
+ focusElementWithin ( container , "first" , false , false , elements ) ;
168
+ expect ( scrollIntoView ) . toBeCalledWith ( container , elements [ 0 ] ) ;
169
+
170
+ focusElementWithin ( container , "last" , false , false , elements ) ;
171
+ expect ( scrollIntoView ) . toBeCalledWith ( container , elements [ 2 ] ) ;
172
+
173
+ focusElementWithin (
174
+ container ,
175
+ ".element:nth-child(2)" ,
176
+ false ,
177
+ false ,
178
+ elements
179
+ ) ;
180
+ expect ( scrollIntoView ) . toBeCalledWith ( container , elements [ 1 ] ) ;
181
+
182
+ scrollIntoView . mockClear ( ) ;
183
+ focusElementWithin ( container , "first" , false , true , elements ) ;
184
+ focusElementWithin ( container , "last" , false , true , elements ) ;
185
+ focusElementWithin (
186
+ container ,
187
+ ".element:nth-child(2)" ,
188
+ false ,
189
+ true ,
190
+ elements
191
+ ) ;
192
+ expect ( scrollIntoView ) . not . toBeCalled ( ) ;
193
+ } ) ;
135
194
} ) ;
0 commit comments