Skip to content

Commit

Permalink
test: add tests for toNextSelectedYear with minor improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
motss committed Sep 29, 2021
1 parent a7353b5 commit 4af280b
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 7 deletions.
99 changes: 99 additions & 0 deletions src/tests/year-grid/to-next-selected-year.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
import { expect } from '@open-wc/testing';

import { toNextSelectedYear } from '../../year-grid/to-next-selected-year';
import type { ToNextSelectableYearInit } from '../../year-grid/typings';
import { messageFormatter } from '../test-utils/message-formatter';

describe(toNextSelectedYear.name, () => {
const defaultInit: ToNextSelectableYearInit = {
key: 'ArrowUp',
max: new Date('2021-01-01'),
min: new Date('2019-01-01'),
year: 2020,
};
const defaultInitWithGrid: ToNextSelectableYearInit = {
key: 'ArrowUp',
max: new Date('2032-01-01'),
min: new Date('2017-01-01'),
year: 2022,
};

type A = [Partial<ToNextSelectableYearInit>, number];
const cases: A[] = [
// cap at min or max
[
{},
defaultInit.min.getUTCFullYear(),
],
[
{ key: 'ArrowDown' },
defaultInit.max.getUTCFullYear(),
],
[
{ key: 'ArrowLeft' },
defaultInit.min.getUTCFullYear(),
],
[
{ key: 'ArrowRight' },
defaultInit.max.getUTCFullYear(),
],
[
{ key: 'End' },
defaultInit.max.getUTCFullYear(),
],
[
{ key: 'Home' },
defaultInit.min.getUTCFullYear(),
],
[
{ key: ' ' },
defaultInit.year,
],

// within min and max
[
{ ...defaultInitWithGrid },
defaultInitWithGrid.year - 4,
],
[
{ ...defaultInitWithGrid, key: 'ArrowDown' },
defaultInitWithGrid.year + 4,
],
[
{ ...defaultInitWithGrid, key: 'ArrowLeft' },
defaultInitWithGrid.year - 1,
],
[
{ ...defaultInitWithGrid, key: 'ArrowRight' },
defaultInitWithGrid.year + 1,
],
[
{ ...defaultInitWithGrid, key: 'End' },
defaultInitWithGrid.max.getUTCFullYear(),
],
[
{ ...defaultInitWithGrid, key: 'Home' },
defaultInitWithGrid.min.getUTCFullYear(),
],
[
{ ...defaultInitWithGrid, key: ' ' },
defaultInitWithGrid.year,
],
];

cases.forEach(a => {
const [testPartialInit, expected] = a;

it(
messageFormatter('returns next selected year (init=%j)', a),
() => {
const result = toNextSelectedYear({
...defaultInit,
...testPartialInit,
});

expect(result).equal(expected);
}
);
});
});
4 changes: 2 additions & 2 deletions src/year-grid-button/app-year-grid-button.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { customElement } from 'lit/decorators/custom-element.js';
import { customElement } from 'lit/decorators.js';

import { APP_YEAR_GRID_BUTTON_NAME } from './constants.js';
import { YearGridButton } from './year-grid-button.js';


@customElement(APP_YEAR_GRID_BUTTON_NAME)
class AppYearGridButton extends YearGridButton {}
export class AppYearGridButton extends YearGridButton {}

declare global {
interface HTMLElementTagNameMap {
Expand Down
2 changes: 1 addition & 1 deletion src/year-grid/app-year-grid.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { APP_YEAR_GRID_NAME } from './constants.js';
import { YearGrid } from './year-grid.js';

@customElement(APP_YEAR_GRID_NAME)
class AppYearGrid extends YearGrid {}
export class AppYearGrid extends YearGrid {}

declare global {
interface HTMLElementTagNameMap {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,33 @@ export function toNextSelectedYear({
min,
year,
}: ToNextSelectableYearInit): number {
let newYear = year;

switch (key) {
case keyArrowUp: return year - 4;
case keyArrowDown: return year + 4;
case keyArrowLeft: return year - 1;
case keyArrowRight: return year + 1;
case keyArrowUp: {
newYear = year - 4;
break;
}
case keyArrowDown: {
newYear = year + 4;
break;
}
case keyArrowLeft: {
newYear = year - 1;
break;
}
case keyArrowRight: {
newYear = year + 1;
break;
}
case keyEnd: return max.getUTCFullYear();
case keyHome: return min.getUTCFullYear();
default:
return year;
}

return Math.min(
Math.max(min.getUTCFullYear(), newYear),
max.getUTCFullYear()
);
}

0 comments on commit 4af280b

Please sign in to comment.