Here is a "best guess" at some of these questions that appears to work, but I couldn't figure out how to dispatch a keyboard event that automatically went to the focussed element. Note that await
on a non-promise automatically adds a wrapping promise.
it('has keyboard capability', async () => {
const element = createElement('c-datepicker', { is: Datepicker });
element.startYear = 2020;
element.startMonth = 1;
element.numberOfMonths = 2;
element.scheduleStart = SCHEDULE_START;
element.scheduleMinutes = SCHEDULE_MINUTES;
element.holidayDates = [];
element.alreadyRequesteds = new Map();
element.selectionMode = 'dates';
document.body.appendChild(element);
const tueJan14 = element.shadowRoot.querySelector('td[data-day-number="7317"]');
await tueJan14.focus();
await tueJan14.dispatchEvent(new KeyboardEvent('keydown', {'keyCode': ENTER_KEY_CODE}));
expect(element.selectedDates).toStrictEqual([
new Date(2020, 0, 14)
]);
const wedJan15 = element.shadowRoot.querySelector('td[data-day-number="7318"]');
await wedJan15.focus();
await wedJan15.dispatchEvent(new KeyboardEvent('keydown', {'keyCode': ENTER_KEY_CODE}));
expect(element.selectedDates).toStrictEqual([
new Date(2020, 0, 14),
new Date(2020, 0, 15)
]);
});