Skip to content

Commit a536a73

Browse files
committed
test: cover touch drag completion
1 parent 88b4752 commit a536a73

1 file changed

Lines changed: 79 additions & 13 deletions

File tree

tests/Range.test.tsx

Lines changed: 79 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,28 @@ describe('Range', () => {
9494
fireEvent(container.getElementsByClassName(element)[0], touchMove);
9595
}
9696

97+
it('prevents the native default action when a touch drag ends', () => {
98+
const onChangeComplete = jest.fn();
99+
const { container } = render(
100+
<Slider range defaultValue={[20, 40]} onChangeComplete={onChangeComplete} />,
101+
);
102+
const handle = container.getElementsByClassName('rc-slider-handle')[0];
103+
const touchStart = createEvent.touchStart(handle, {
104+
touches: [{}],
105+
targetTouches: [{}],
106+
});
107+
(touchStart as any).targetTouches[0].pageX = 20;
108+
fireEvent(handle, touchStart);
109+
110+
const touchEnd = createEvent.touchEnd(handle);
111+
const preventDefault = jest.fn();
112+
Object.defineProperty(touchEnd, 'preventDefault', { value: preventDefault });
113+
fireEvent(handle, touchEnd);
114+
115+
expect(preventDefault).toHaveBeenCalledTimes(1);
116+
expect(onChangeComplete).toHaveBeenCalledWith([20, 40]);
117+
});
118+
97119
it('should render Range with correct DOM structure', () => {
98120
const { asFragment } = render(<Slider range />);
99121
expect(asFragment().firstChild).toMatchSnapshot();
@@ -140,9 +162,7 @@ describe('Range', () => {
140162
});
141163

142164
it('should render Range without tabIndex (equal null) correctly', () => {
143-
const { container } = render(
144-
<Slider range tabIndex={[null, null] as any} />,
145-
);
165+
const { container } = render(<Slider range tabIndex={[null, null] as any} />);
146166
expect(container.getElementsByClassName('rc-slider-handle')[0]).not.toHaveAttribute('tabIndex');
147167
expect(container.getElementsByClassName('rc-slider-handle')[1]).not.toHaveAttribute('tabIndex');
148168
});
@@ -872,7 +892,12 @@ describe('Range', () => {
872892
it('respects handle disabled state and boolean disabled fallback', () => {
873893
const onChange = jest.fn();
874894
const { container, rerender } = render(
875-
<Slider range defaultValue={[0, 50, 100]} disabled={[true, false, true]} onChange={onChange} />,
895+
<Slider
896+
range
897+
defaultValue={[0, 50, 100]}
898+
disabled={[true, false, true]}
899+
onChange={onChange}
900+
/>,
876901
);
877902

878903
const disabledHandle = getHandle(container, 0);
@@ -909,17 +934,23 @@ describe('Range', () => {
909934
expect(onChange).toHaveBeenCalledWith([0, 10, 100]);
910935

911936
onChange.mockClear();
912-
rerender(<Slider range value={[20, 50, 80]} disabled={[true, false, false]} onChange={onChange} />);
937+
rerender(
938+
<Slider range value={[20, 50, 80]} disabled={[true, false, false]} onChange={onChange} />,
939+
);
913940
doMouseDown(container, 10, 'rc-slider', true);
914941
fireEvent.mouseUp(document);
915942
expect(onChange).not.toHaveBeenCalled();
916943

917-
rerender(<Slider range value={[20, 50, 80]} disabled={[false, false, true]} onChange={onChange} />);
944+
rerender(
945+
<Slider range value={[20, 50, 80]} disabled={[false, false, true]} onChange={onChange} />,
946+
);
918947
doMouseDown(container, 90, 'rc-slider', true);
919948
fireEvent.mouseUp(document);
920949
expect(onChange).not.toHaveBeenCalled();
921950

922-
rerender(<Slider range value={[0, 50, 100]} disabled={[true, true, true]} onChange={onChange} />);
951+
rerender(
952+
<Slider range value={[0, 50, 100]} disabled={[true, true, true]} onChange={onChange} />,
953+
);
923954
doMouseDown(container, 10, 'rc-slider', true);
924955
fireEvent.mouseUp(document);
925956
expect(onChange).not.toHaveBeenCalled();
@@ -963,7 +994,12 @@ describe('Range', () => {
963994
it('disables draggableTrack only when rendered handles are disabled', () => {
964995
const onChange = jest.fn();
965996
const { container, unmount } = render(
966-
<Slider range={{ draggableTrack: true }} defaultValue={[0, 50]} disabled={[false, true]} onChange={onChange} />,
997+
<Slider
998+
range={{ draggableTrack: true }}
999+
defaultValue={[0, 50]}
1000+
disabled={[false, true]}
1001+
onChange={onChange}
1002+
/>,
9671003
);
9681004

9691005
const track = container.getElementsByClassName('rc-slider-track')[0];
@@ -1002,7 +1038,12 @@ describe('Range', () => {
10021038
it('keeps keyboard movement inside disabled handle boundaries', () => {
10031039
const onChange = jest.fn();
10041040
const { container, unmount } = render(
1005-
<Slider range defaultValue={[20, 50, 80]} disabled={[false, true, false]} onChange={onChange} />,
1041+
<Slider
1042+
range
1043+
defaultValue={[20, 50, 80]}
1044+
disabled={[false, true, false]}
1045+
onChange={onChange}
1046+
/>,
10061047
);
10071048

10081049
repeatKeyDown(getHandle(container, 0), keyCode.RIGHT, 50);
@@ -1012,7 +1053,12 @@ describe('Range', () => {
10121053
onChange.mockClear();
10131054

10141055
const { container: boundaryContainer } = render(
1015-
<Slider range defaultValue={[20, 50, 80]} disabled={[true, false, true]} onChange={onChange} />,
1056+
<Slider
1057+
range
1058+
defaultValue={[20, 50, 80]}
1059+
disabled={[true, false, true]}
1060+
onChange={onChange}
1061+
/>,
10161062
);
10171063
const middleHandle = getHandle(boundaryContainer, 1);
10181064

@@ -1029,7 +1075,13 @@ describe('Range', () => {
10291075
it('respects pushable boundaries around disabled handles', () => {
10301076
const onChange = jest.fn();
10311077
const { container } = render(
1032-
<Slider range defaultValue={[20, 40, 60, 80]} disabled={[false, true, false, false]} pushable={10} onChange={onChange} />,
1078+
<Slider
1079+
range
1080+
defaultValue={[20, 40, 60, 80]}
1081+
disabled={[false, true, false, false]}
1082+
pushable={10}
1083+
onChange={onChange}
1084+
/>,
10331085
);
10341086

10351087
repeatKeyDown(getHandle(container, 0), keyCode.UP, 30);
@@ -1046,7 +1098,13 @@ describe('Range', () => {
10461098
it('respects disabled boundaries with allowCross=false and step=null', () => {
10471099
const onChange = jest.fn();
10481100
const { container, unmount } = render(
1049-
<Slider range defaultValue={[20, 50, 80]} disabled={[false, true, false]} allowCross={false} onChange={onChange} />,
1101+
<Slider
1102+
range
1103+
defaultValue={[20, 50, 80]}
1104+
disabled={[false, true, false]}
1105+
allowCross={false}
1106+
onChange={onChange}
1107+
/>,
10501108
);
10511109

10521110
repeatKeyDown(getHandle(container, 0), keyCode.RIGHT, 50);
@@ -1056,7 +1114,15 @@ describe('Range', () => {
10561114
onChange.mockClear();
10571115

10581116
const { container: stepContainer } = render(
1059-
<Slider range defaultValue={[20, 50, 80]} disabled={[false, true, false]} step={null} marks={{ 0: '0', 50: '50', 100: '100' }} pushable={10} onChange={onChange} />,
1117+
<Slider
1118+
range
1119+
defaultValue={[20, 50, 80]}
1120+
disabled={[false, true, false]}
1121+
step={null}
1122+
marks={{ 0: '0', 50: '50', 100: '100' }}
1123+
pushable={10}
1124+
onChange={onChange}
1125+
/>,
10601126
);
10611127

10621128
fireEvent.keyDown(getHandle(stepContainer, 0), { keyCode: keyCode.RIGHT });

0 commit comments

Comments
 (0)