@@ -4,7 +4,7 @@ import { spyElementPrototypes } from 'rc-util/lib/test/domHook';
44import { resetWarned } from 'rc-util/lib/warning' ;
55import React from 'react' ;
66import Cascader from '../src' ;
7- import { addressOptions , optionsForActiveMenuItems } from './demoOptions' ;
7+ import { addressOptions , addressOptionsForUneven , optionsForActiveMenuItems } from './demoOptions' ;
88import { mount } from './enzyme' ;
99
1010describe ( 'Cascader.Basic' , ( ) => {
@@ -648,6 +648,44 @@ describe('Cascader.Basic', () => {
648648 expect ( menus . render ( ) ) . toMatchSnapshot ( ) ;
649649 } ) ;
650650
651+ // https://github.com/ant-design/ant-design/issues/41134
652+ it ( 'hover to no secondary menu should hide the previous secondary menu' , ( ) => {
653+ const wrapper = mount (
654+ < Cascader
655+ changeOnSelect
656+ expandTrigger = "hover"
657+ options = { addressOptionsForUneven }
658+ onChange = { onChange } >
659+ < input readOnly />
660+ </ Cascader > ,
661+ ) ;
662+
663+ wrapper . find ( 'input' ) . simulate ( 'click' ) ;
664+ const menus = wrapper . find ( '.rc-cascader-menu' ) ;
665+ expect ( menus . length ) . toBe ( 1 ) ;
666+ const menu1Items = menus . at ( 0 ) . find ( '.rc-cascader-menu-item' ) ;
667+ expect ( menu1Items . length ) . toBe ( 5 ) ;
668+ wrapper . clickOption ( 0 , 3 , 'mouseEnter' ) ;
669+
670+ const menus2 = wrapper . find ( '.rc-cascader-menu' ) ;
671+ expect ( menus2 . length ) . toBe ( 2 ) ;
672+ const menu2Items = menus2 . at ( 1 ) . find ( '.rc-cascader-menu-item' ) ;
673+ expect ( menu2Items . length ) . toBe ( 2 ) ;
674+ wrapper . clickOption ( 1 , 0 , 'mouseEnter' ) ;
675+
676+ expect ( wrapper . find ( '.rc-cascader-menu' ) ) . toHaveLength ( 3 ) ;
677+ wrapper . clickOption ( 1 , 1 , 'mouseEnter' ) ;
678+ expect ( wrapper . find ( '.rc-cascader-menu' ) ) . toHaveLength ( 2 ) ; // should hide the previous secondary menu
679+
680+ wrapper . clickOption ( 0 , 4 , 'mouseEnter' ) ;
681+ expect ( wrapper . find ( '.rc-cascader-menu' ) ) . toHaveLength ( 1 ) ; // should hide the previous secondary menu
682+
683+ jest . runAllTimers ( ) ;
684+ wrapper . update ( ) ;
685+ expect ( selectedValue ) . toBeFalsy ( ) ;
686+ expect ( wrapper . isOpen ( ) ) . toBeTruthy ( ) ;
687+ } )
688+
651689 describe ( 'focus test' , ( ) => {
652690 let domSpy ;
653691 let focusTimes = 0 ;
@@ -746,6 +784,28 @@ describe('Cascader.Basic', () => {
746784 expect ( wrapper . find ( 'li.rc-cascader-menu-item-active' ) ) . toHaveLength ( 1 ) ;
747785 expect ( wrapper . find ( 'li.rc-cascader-menu-item-active' ) . first ( ) . text ( ) ) . toEqual ( 'Bamboo' ) ;
748786 } ) ;
787+
788+ describe ( 'the defaultValue should be activated the first time it is opened' , ( ) => {
789+ ( [ 'click' , 'hover' ] as const ) . forEach ( expandTrigger => {
790+ it ( `expandTrigger: ${ expandTrigger } ` , ( ) => {
791+ const wrapper = mount (
792+ < Cascader
793+ expandTrigger = { expandTrigger }
794+ defaultValue = { [ 'tw' , 'gaoxiong' ] }
795+ options = { addressOptionsForUneven }
796+ >
797+ < input readOnly />
798+ </ Cascader > ,
799+ ) ;
800+
801+ wrapper . find ( 'input' ) . simulate ( 'click' ) ;
802+ const activeItems = wrapper . find ( 'li.rc-cascader-menu-item-active' ) ;
803+ expect ( activeItems ) . toHaveLength ( 2 ) ;
804+ expect ( activeItems . last ( ) . text ( ) ) . toEqual ( '高雄' ) ;
805+ } ) ;
806+ } )
807+ } ) ;
808+
749809 } ) ;
750810
751811 it ( 'defaultValue not exist' , ( ) => {
0 commit comments