@@ -27,6 +27,7 @@ import { provideNoopAnimations } from '@angular/platform-browser/animations';
27
27
import {
28
28
createFakeEvent ,
29
29
createMouseEvent ,
30
+ dispatchFakeEvent ,
30
31
dispatchKeyboardEvent ,
31
32
dispatchMouseEvent
32
33
} from 'ng-zorro-antd/core/testing' ;
@@ -741,9 +742,9 @@ describe('cascader', () => {
741
742
expect ( testComponent . cascader . menuVisible ) . toBe ( true ) ;
742
743
expect ( getAllColumns ( ) . length ) . toBe ( 3 ) ;
743
744
744
- const itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
745
- const itemEl2 = getItemAtColumnAndRow ( 2 , 1 ) ! ;
746
- const itemEl3 = getItemAtColumnAndRow ( 3 , 1 ) ! ;
745
+ let itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
746
+ let itemEl2 = getItemAtColumnAndRow ( 2 , 1 ) ! ;
747
+ let itemEl3 = getItemAtColumnAndRow ( 3 , 1 ) ! ;
747
748
748
749
expect ( itemEl1 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
749
750
expect ( itemEl2 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
@@ -755,14 +756,17 @@ describe('cascader', () => {
755
756
fixture . detectChanges ( ) ;
756
757
dispatchKeyboardEvent ( cascader . nativeElement , 'keydown' , LEFT_ARROW ) ;
757
758
fixture . detectChanges ( ) ;
758
- expect ( getAllColumns ( ) . length ) . toBe ( 3 ) ;
759
+ itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
760
+ itemEl2 = getItemAtColumnAndRow ( 2 , 1 ) ! ;
761
+ itemEl3 = getItemAtColumnAndRow ( 3 , 1 ) ! ;
759
762
expect ( itemEl1 . classList ) . not . toContain ( 'ant-cascader-menu-item-active' ) ;
760
- expect ( itemEl2 . classList ) . not . toContain ( 'ant-cascader-menu-item-active' ) ;
761
- expect ( itemEl3 . classList ) . not . toContain ( 'ant-cascader-menu-item-active' ) ;
763
+ expect ( itemEl2 ) . toBeNull ( ) ;
764
+ expect ( itemEl3 ) . toBeNull ( ) ;
765
+ expect ( getAllColumns ( ) . length ) . toBe ( 1 ) ;
762
766
expect ( testComponent . values ! . join ( ',' ) ) . toBe ( 'zhejiang,hangzhou,xihu' ) ;
763
767
768
+ itemEl1 . click ( ) ;
764
769
const itemEl4 = getItemAtColumnAndRow ( 2 , 2 ) ! ;
765
-
766
770
itemEl4 . click ( ) ; // 选中一个叶子
767
771
fixture . detectChanges ( ) ;
768
772
tick ( 300 ) ;
@@ -870,6 +874,44 @@ describe('cascader', () => {
870
874
expect ( testComponent . cascader . menuVisible ) . toBe ( false ) ;
871
875
} ) ) ;
872
876
877
+ it ( 'should init menu when selecting cancel' , fakeAsync ( ( ) => {
878
+ // cancel select by ESCAPE
879
+ fixture . detectChanges ( ) ;
880
+ testComponent . cascader . setMenuVisible ( true ) ;
881
+ let itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
882
+ itemEl1 . click ( ) ;
883
+ let itemEl2 = getItemAtColumnAndRow ( 2 , 1 ) ! ;
884
+ itemEl2 . click ( ) ;
885
+ let itemEl3 = getItemAtColumnAndRow ( 3 , 1 ) ! ;
886
+ expect ( itemEl1 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
887
+ expect ( itemEl2 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
888
+ expect ( itemEl3 . classList ) . not . toContain ( 'ant-cascader-menu-item-active' ) ;
889
+ dispatchKeyboardEvent ( cascader . nativeElement , 'keydown' , ESCAPE ) ;
890
+ fixture . detectChanges ( ) ;
891
+ flush ( ) ;
892
+ fixture . detectChanges ( ) ;
893
+ expect ( testComponent . cascader . menuVisible ) . toBe ( false ) ;
894
+ expect ( testComponent . cascader . cascaderService . columns . length ) . toBe ( 1 ) ;
895
+
896
+ // cancel select by clicking outside
897
+ fixture . detectChanges ( ) ;
898
+ testComponent . cascader . setMenuVisible ( true ) ;
899
+ itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
900
+ itemEl1 . click ( ) ;
901
+ itemEl2 = getItemAtColumnAndRow ( 2 , 1 ) ! ;
902
+ itemEl2 . click ( ) ;
903
+ itemEl3 = getItemAtColumnAndRow ( 3 , 1 ) ! ;
904
+ expect ( itemEl1 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
905
+ expect ( itemEl2 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
906
+ expect ( itemEl3 . classList ) . not . toContain ( 'ant-cascader-menu-item-active' ) ;
907
+ dispatchFakeEvent ( document . body , 'click' ) ;
908
+ fixture . detectChanges ( ) ;
909
+ flush ( ) ;
910
+ fixture . detectChanges ( ) ;
911
+ expect ( testComponent . cascader . menuVisible ) . toBe ( false ) ;
912
+ expect ( testComponent . cascader . cascaderService . columns . length ) . toBe ( 1 ) ;
913
+ } ) ) ;
914
+
873
915
it ( 'should nzBackdrop works' , fakeAsync ( ( ) => {
874
916
testComponent . nzBackdrop = true ;
875
917
fixture . detectChanges ( ) ;
@@ -941,9 +983,9 @@ describe('cascader', () => {
941
983
fixture . detectChanges ( ) ;
942
984
expect ( getAllColumns ( ) . length ) . toBe ( 3 ) ;
943
985
944
- const itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
945
- const itemEl2 = getItemAtColumnAndRow ( 2 , 1 ) ! ;
946
- const itemEl3 = getItemAtColumnAndRow ( 3 , 1 ) ! ;
986
+ let itemEl1 = getItemAtColumnAndRow ( 1 , 1 ) ! ;
987
+ let itemEl2 = getItemAtColumnAndRow ( 2 , 1 ) ! ;
988
+ let itemEl3 = getItemAtColumnAndRow ( 3 , 1 ) ! ;
947
989
expect ( itemEl1 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
948
990
expect ( itemEl2 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
949
991
expect ( itemEl3 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
@@ -954,14 +996,17 @@ describe('cascader', () => {
954
996
expect ( itemEl3 . classList ) . not . toContain ( 'ant-cascader-menu-item-active' ) ;
955
997
dispatchKeyboardEvent ( cascader . nativeElement , 'keydown' , LEFT_ARROW ) ;
956
998
fixture . detectChanges ( ) ;
999
+ itemEl3 = getItemAtColumnAndRow ( 3 , 1 ) ! ;
957
1000
expect ( itemEl1 . classList ) . toContain ( 'ant-cascader-menu-item-active' ) ;
958
1001
expect ( itemEl2 . classList ) . not . toContain ( 'ant-cascader-menu-item-active' ) ;
959
- expect ( itemEl3 . classList ) . not . toContain ( 'ant-cascader-menu-item-active' ) ;
1002
+ expect ( itemEl3 ) . toBeNull ( ) ;
1003
+ expect ( getAllColumns ( ) . length ) . toBe ( 2 ) ;
960
1004
dispatchKeyboardEvent ( cascader . nativeElement , 'keydown' , LEFT_ARROW ) ;
961
1005
fixture . detectChanges ( ) ;
1006
+ itemEl2 = getItemAtColumnAndRow ( 2 , 1 ) ! ;
962
1007
expect ( itemEl1 . classList ) . not . toContain ( 'ant-cascader-menu-item-active' ) ;
963
- expect ( itemEl2 . classList ) . not . toContain ( 'ant-cascader-menu-item-active' ) ;
964
- expect ( itemEl3 . classList ) . not . toContain ( 'ant-cascader-menu-item-active' ) ;
1008
+ expect ( itemEl2 ) . toBeNull ( ) ;
1009
+ expect ( getAllColumns ( ) . length ) . toBe ( 1 ) ;
965
1010
} ) ) ;
966
1011
967
1012
it ( 'should select option when press ENTER' , fakeAsync ( ( ) => {
0 commit comments