@@ -23,21 +23,6 @@ export default function allowClearTest(mode: any, value: any) {
2323 fireEvent ( clear , mouseDownEvent ) ;
2424 expect ( mouseDownEvent . defaultPrevented ) . toBe ( true ) ;
2525 } ) ;
26- it ( 'keeps Enter/Space on the clear button local to it' , ( ) => {
27- // The root handler prevents default on Enter/Space to open the dropdown.
28- // If it received them from the clear button, the native button activation
29- // would be canceled and no `click` (thus no clear) would ever happen.
30- [ 'Enter' , ' ' ] . forEach ( ( key ) => {
31- const { container } = render ( < Select mode = { mode } value = { value } allowClear /> ) ;
32- const clear = container . querySelector ( '.rc-select-clear' ) ;
33- const keyDownEvent = createEvent . keyDown ( clear , { key } ) ;
34-
35- fireEvent ( clear , keyDownEvent ) ;
36-
37- expect ( keyDownEvent . defaultPrevented ) . toBe ( false ) ;
38- expect ( container . querySelector ( '.rc-select-open' ) ) . toBeFalsy ( ) ;
39- } ) ;
40- } ) ;
4126
4227 it ( 'clears value' , ( ) => {
4328 const onClear = jest . fn ( ) ;
@@ -78,5 +63,47 @@ export default function allowClearTest(mode: any, value: any) {
7863 expect ( container . querySelector ( 'input' ) . value ) . toEqual ( '' ) ;
7964 expect ( onClear ) . toHaveBeenCalled ( ) ;
8065 } ) ;
66+
67+ it ( 'clears value with keyboard' , ( ) => {
68+ [ 'Enter' , ' ' ] . forEach ( ( key ) => {
69+ const onClear = jest . fn ( ) ;
70+ const onChange = jest . fn ( ) ;
71+ const onDeselect = jest . fn ( ) ;
72+ const useArrayValue = [ 'tags' , 'multiple' ] . includes ( mode ) ;
73+
74+ const { container } = render (
75+ < Select
76+ defaultValue = { useArrayValue ? [ '1' ] : '1' }
77+ mode = { mode }
78+ allowClear
79+ onClear = { onClear }
80+ onChange = { onChange }
81+ onDeselect = { onDeselect }
82+ >
83+ < Option value = "1" > 1</ Option >
84+ < Option value = "2" > 2</ Option >
85+ </ Select > ,
86+ ) ;
87+ const clear = container . querySelector ( '.rc-select-clear' ) ;
88+ const keyDownEvent = createEvent . keyDown ( clear , { key } ) ;
89+
90+ fireEvent ( clear , keyDownEvent ) ;
91+
92+ expect ( keyDownEvent . defaultPrevented ) . toBe ( false ) ;
93+ expect ( container . querySelector ( '.rc-select-open' ) ) . toBeFalsy ( ) ;
94+
95+ // The native button activation should fire a click
96+ fireEvent . click ( clear ) ;
97+
98+ if ( useArrayValue ) {
99+ expect ( onChange ) . toHaveBeenCalledWith ( [ ] , [ ] ) ;
100+ } else {
101+ expect ( onChange ) . toHaveBeenCalledWith ( undefined , undefined ) ;
102+ }
103+ expect ( onDeselect ) . not . toBeCalled ( ) ;
104+ expect ( container . querySelector ( 'input' ) . value ) . toEqual ( '' ) ;
105+ expect ( onClear ) . toHaveBeenCalled ( ) ;
106+ } ) ;
107+ } ) ;
81108 } ) ;
82109}
0 commit comments