Skip to content

Commit d28645a

Browse files
committed
test keyboard navigation on year picker
1 parent 7394106 commit d28645a

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

src/year.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ export default class Year extends React.Component {
144144
</div>
145145
);
146146
}
147+
147148
return (
148149
<div className="react-datepicker__year">
149150
<div className="react-datepicker__year-wrapper">{yearsList}</div>

test/year_picker_test.js

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { mount } from "enzyme";
33
import DatePicker from "../src/index.jsx";
44
import Year from "../src/year";
55
import TestUtils from "react-dom/test-utils";
6+
import { create } from "react-test-renderer";
67
import ReactDOM from "react-dom";
78
import * as utils from "../src/date_utils";
89
import Calendar from "../src/calendar";
@@ -166,4 +167,111 @@ describe("YearPicker", () => {
166167
expect(allPreselectedYears.length).to.equal(1);
167168
});
168169
});
170+
171+
describe("Keyboard navigation", () => {
172+
let preSelected;
173+
const setPreSelection = (preSelection) => {
174+
preSelected = preSelection;
175+
};
176+
177+
let selectedDay;
178+
const onDayClick = (day) => {
179+
selectedDay = day;
180+
};
181+
182+
const getPicker = (initialDate, props) =>
183+
TestUtils.renderIntoDocument(
184+
<Year
185+
selected={utils.newDate(initialDate)}
186+
date={utils.newDate(initialDate)}
187+
setPreSelection={setPreSelection}
188+
preSelection={utils.newDate(initialDate)}
189+
onDayClick={onDayClick}
190+
yearItemNumber={12}
191+
{...props}
192+
/>
193+
);
194+
195+
const simulateLeft = (target) =>
196+
TestUtils.Simulate.keyDown(target, {
197+
key: "ArrowLeft",
198+
keyCode: 37,
199+
which: 37,
200+
});
201+
const simulateRight = (target) =>
202+
TestUtils.Simulate.keyDown(target, {
203+
key: "ArrowRight",
204+
keyCode: 39,
205+
which: 39,
206+
});
207+
208+
it("should preSelect and set 2020 on left arrow press", () => {
209+
const yearPicker = getPicker("2021-01-01");
210+
211+
const target = TestUtils.findRenderedDOMComponentWithClass(
212+
yearPicker,
213+
"react-datepicker__year-text--selected"
214+
);
215+
simulateLeft(target);
216+
217+
expect(utils.getYear(preSelected)).to.equal(2020);
218+
});
219+
it("should preSelect and set 2022 on left arrow press", () => {
220+
const yearPicker = getPicker("2021-01-01");
221+
222+
const target = TestUtils.findRenderedDOMComponentWithClass(
223+
yearPicker,
224+
"react-datepicker__year-text--selected"
225+
);
226+
simulateRight(target);
227+
228+
expect(utils.getYear(preSelected)).to.equal(2022);
229+
});
230+
it("should paginate from 2017 to 2016", () => {
231+
const yearPicker = getPicker("2017-01-01");
232+
233+
const target = TestUtils.findRenderedDOMComponentWithClass(
234+
yearPicker,
235+
"react-datepicker__year-text--selected"
236+
);
237+
simulateLeft(target);
238+
239+
expect(utils.getYear(preSelected)).to.equal(2016);
240+
});
241+
it("should paginate from 2028 to 2029", () => {
242+
const yearPicker = getPicker("2028-01-01");
243+
244+
const target = TestUtils.findRenderedDOMComponentWithClass(
245+
yearPicker,
246+
"react-datepicker__year-text--selected"
247+
);
248+
simulateRight(target);
249+
250+
expect(utils.getYear(preSelected)).to.equal(2029);
251+
});
252+
it("should select 2021 when Enter key is pressed", () => {
253+
const yearPicker = getPicker("2021-01-01");
254+
255+
const target = TestUtils.findRenderedDOMComponentWithClass(
256+
yearPicker,
257+
"react-datepicker__year-text--selected"
258+
);
259+
260+
TestUtils.Simulate.keyDown(target, { key: "Enter", code: 13, which: 13 });
261+
expect(utils.getYear(selectedDay)).to.equal(2021);
262+
});
263+
it("should disable keyboard navigation", () => {
264+
const yearPicker = getPicker("2021-01-01", {
265+
disabledKeyboardNavigation: true,
266+
});
267+
268+
const target = TestUtils.findRenderedDOMComponentWithClass(
269+
yearPicker,
270+
"react-datepicker__year-text--selected"
271+
);
272+
simulateRight(target);
273+
274+
expect(utils.getYear(preSelected)).to.equal(2021);
275+
});
276+
});
169277
});

0 commit comments

Comments
 (0)