Skip to content

Commit a4c1c18

Browse files
author
刘欢
committed
test: add test coverage
1 parent 204809d commit a4c1c18

1 file changed

Lines changed: 66 additions & 1 deletion

File tree

tests/Range.test.tsx

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -943,9 +943,9 @@ describe('Range', () => {
943943
/>,
944944
);
945945

946-
// Cannot add between two disabled handles
947946
doMouseDown(container, 40, 'rc-slider', true);
948947
expect(onChange).not.toHaveBeenCalled();
948+
expect(onDisabledChange).not.toHaveBeenCalled();
949949

950950
// Can add when only one side is disabled
951951
rerender(
@@ -1016,5 +1016,70 @@ describe('Range', () => {
10161016
doMouseDown(container, 90, 'rc-slider', true);
10171017
expect(onChange).toHaveBeenCalledWith([20, 80, 80]);
10181018
});
1019+
1020+
it('pushable respects disabled handle boundaries', () => {
1021+
const onChange = jest.fn();
1022+
const { container } = render(
1023+
<Slider range defaultValue={[20, 40, 60, 80]} disabled={[false, true, false, false]} pushable onChange={onChange} />,
1024+
);
1025+
1026+
// Push first handle right - should stop at disabled handle (40)
1027+
for (let i = 0; i < 30; i++) {
1028+
fireEvent.keyDown(container.getElementsByClassName('rc-slider-handle')[0], { keyCode: keyCode.UP });
1029+
}
1030+
1031+
// First handle should not exceed 40 (position of disabled handle)
1032+
const lastCall = onChange.mock.calls[onChange.mock.calls.length - 1];
1033+
expect(lastCall[0][0]).toBeLessThanOrEqual(40);
1034+
// Second handle is disabled at 40
1035+
expect(lastCall[0][1]).toBe(40);
1036+
});
1037+
1038+
it('pushable revert respects disabled handles', () => {
1039+
const onChange = jest.fn();
1040+
const { container } = render(
1041+
<Slider range defaultValue={[10, 20, 90, 100]} disabled={[false, true, false, false]} pushable={5} onChange={onChange} />,
1042+
);
1043+
1044+
// Move last handle left - should push third handle but stop at disabled
1045+
fireEvent.keyDown(container.getElementsByClassName('rc-slider-handle')[3], { keyCode: keyCode.LEFT });
1046+
1047+
// Third handle should not go below disabled handle at 20
1048+
const lastCall = onChange.mock.calls[onChange.mock.calls.length - 1];
1049+
expect(lastCall[0][2]).toBeGreaterThanOrEqual(20);
1050+
});
1051+
1052+
it('keyboard home/end with disabled handles', () => {
1053+
const onChange = jest.fn();
1054+
const { container } = render(
1055+
<Slider range defaultValue={[20, 50, 80]} disabled={[true, false, true]} onChange={onChange} />,
1056+
);
1057+
1058+
// HOME key on enabled middle handle - should go to left disabled handle boundary (20)
1059+
fireEvent.keyDown(container.getElementsByClassName('rc-slider-handle')[1], { keyCode: keyCode.HOME });
1060+
expect(onChange).toHaveBeenCalledWith([20, 20, 80]);
1061+
1062+
onChange.mockClear();
1063+
1064+
// END key on enabled middle handle - should go to right disabled handle boundary (80)
1065+
fireEvent.keyDown(container.getElementsByClassName('rc-slider-handle')[1], { keyCode: keyCode.END });
1066+
expect(onChange).toHaveBeenCalledWith([20, 80, 80]);
1067+
});
1068+
1069+
it('allowCross false with disabled handles', () => {
1070+
const onChange = jest.fn();
1071+
const { container } = render(
1072+
<Slider range defaultValue={[20, 50, 80]} disabled={[false, true, false]} allowCross={false} onChange={onChange} />,
1073+
);
1074+
1075+
// Try to move first handle past disabled middle handle
1076+
for (let i = 0; i < 50; i++) {
1077+
fireEvent.keyDown(container.getElementsByClassName('rc-slider-handle')[0], { keyCode: keyCode.RIGHT });
1078+
}
1079+
1080+
// First handle should not cross disabled handle at 50
1081+
const lastCall = onChange.mock.calls[onChange.mock.calls.length - 1];
1082+
expect(lastCall[0][0]).toBeLessThanOrEqual(50);
1083+
});
10191084
});
10201085
});

0 commit comments

Comments
 (0)