Skip to content

Commit 464f05e

Browse files
committed
Add tests
1 parent 4d0641e commit 464f05e

1 file changed

Lines changed: 42 additions & 15 deletions

File tree

tests/shared/allowClearTest.tsx

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)