@@ -206,6 +206,76 @@ describe('TreeSelect.maxCount keyboard operations', () => {
206
206
// verify only two options are selected
207
207
expect ( container . querySelectorAll ( '.rc-tree-select-tree-treenode-selected' ) ) . toHaveLength ( 2 ) ;
208
208
} ) ;
209
+
210
+ it ( 'should cycle through selected options when maxCount is reached' , ( ) => {
211
+ const { container } = render (
212
+ < TreeSelect treeData = { treeData } multiple open maxCount = { 2 } value = { [ '0' , '2' ] } /> ,
213
+ ) ;
214
+
215
+ const input = container . querySelector ( 'input' ) ;
216
+
217
+ keyDown ( input , KeyCode . DOWN ) ;
218
+ expect (
219
+ container . querySelector ( '.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active' )
220
+ ?. textContent ,
221
+ ) . toBe ( '2 label' ) ;
222
+
223
+ // Move down again to cycle back to the first selected item
224
+ keyDown ( input , KeyCode . DOWN ) ;
225
+ expect (
226
+ container . querySelector ( '.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active' )
227
+ ?. textContent ,
228
+ ) . toBe ( '0 label' ) ;
229
+ } ) ;
230
+
231
+ it ( 'should cycle through selected options in reverse when using UP key' , ( ) => {
232
+ const { container } = render (
233
+ < TreeSelect treeData = { treeData } multiple open maxCount = { 2 } value = { [ '0' , '2' ] } /> ,
234
+ ) ;
235
+
236
+ const input = container . querySelector ( 'input' ) ;
237
+
238
+ // Initially activate the last selected item
239
+ keyDown ( input , KeyCode . UP ) ;
240
+ expect (
241
+ container . querySelector ( '.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active' )
242
+ ?. textContent ,
243
+ ) . toBe ( '2 label' ) ;
244
+
245
+ // Move up again to cycle back to the first selected item
246
+ keyDown ( input , KeyCode . UP ) ;
247
+ expect (
248
+ container . querySelector ( '.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active' )
249
+ ?. textContent ,
250
+ ) . toBe ( '0 label' ) ;
251
+
252
+ // Move up again to cycle back to the last selected item
253
+ keyDown ( input , KeyCode . UP ) ;
254
+ expect (
255
+ container . querySelector ( '.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active' )
256
+ ?. textContent ,
257
+ ) . toBe ( '2 label' ) ;
258
+ } ) ;
259
+
260
+ it ( 'should handle LEFT/RIGHT keys correctly when maxCount is reached' , ( ) => {
261
+ const { container } = render (
262
+ < TreeSelect treeData = { treeData } multiple open maxCount = { 2 } value = { [ '0' , '2' ] } /> ,
263
+ ) ;
264
+
265
+ const input = container . querySelector ( 'input' ) ;
266
+
267
+ keyDown ( input , KeyCode . RIGHT ) ;
268
+ expect (
269
+ container . querySelector ( '.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active' )
270
+ ?. textContent ,
271
+ ) . toBe ( '2 label' ) ;
272
+
273
+ keyDown ( input , KeyCode . LEFT ) ;
274
+ expect (
275
+ container . querySelector ( '.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active' )
276
+ ?. textContent ,
277
+ ) . toBe ( '0 label' ) ;
278
+ } ) ;
209
279
} ) ;
210
280
211
281
describe ( 'TreeSelect.maxCount with different strategies' , ( ) => {
0 commit comments