q2-tecton-elements 1.56.3 → 1.56.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle-report.json +263 -217
- package/dist/cjs/{index-99667782.js → index-905f4c87.js} +1 -5
- package/dist/cjs/index-905f4c87.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/q2-action-group.cjs.entry.js +2 -2
- package/dist/cjs/q2-action-sheet.cjs.entry.js +2 -2
- package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
- package/dist/cjs/q2-badge_7.cjs.entry.js +4 -4
- package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
- package/dist/cjs/q2-card.cjs.entry.js +1 -1
- package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
- package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
- package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
- package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
- package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
- package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
- package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/q2-currency.cjs.entry.js +1 -1
- package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
- package/dist/cjs/q2-detail.cjs.entry.js +2 -2
- package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
- package/dist/cjs/q2-dropdown.cjs.entry.js +25 -22
- package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
- package/dist/cjs/q2-example.cjs.entry.js +1 -1
- package/dist/cjs/q2-file-picker.cjs.entry.js +1 -1
- package/dist/cjs/q2-form.cjs.entry.js +1 -1
- package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
- package/dist/cjs/q2-item_3.cjs.entry.js +3 -3
- package/dist/cjs/q2-legend.cjs.entry.js +1 -1
- package/dist/cjs/q2-loc.cjs.entry.js +1 -1
- package/dist/cjs/q2-message.cjs.entry.js +2 -2
- package/dist/cjs/q2-modal.cjs.entry.js +2 -2
- package/dist/cjs/q2-month-picker.cjs.entry.js +3 -3
- package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
- package/dist/cjs/q2-option-list_2.cjs.entry.js +49 -62
- package/dist/cjs/q2-option-list_2.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-option.cjs.entry.js +1 -1
- package/dist/cjs/q2-pagination.cjs.entry.js +4 -4
- package/dist/cjs/q2-pill.cjs.entry.js +2 -2
- package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
- package/dist/cjs/q2-radio.cjs.entry.js +1 -1
- package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
- package/dist/cjs/q2-resize-observer.cjs.entry.js +1 -1
- package/dist/cjs/q2-section.cjs.entry.js +3 -3
- package/dist/cjs/q2-select.cjs.entry.js +81 -11
- package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
- package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
- package/dist/cjs/q2-tag.cjs.entry.js +2 -2
- package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
- package/dist/cjs/q2-textarea.cjs.entry.js +2 -2
- package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
- package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
- package/dist/collection/components/q2-action-group/q2-action-group.js +1 -1
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
- package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
- package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
- package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js +2 -2
- package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
- package/dist/collection/components/q2-chart-area/q2-chart-area.js +1 -1
- package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +1 -1
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
- package/dist/collection/components/q2-currency/q2-currency.js +1 -1
- package/dist/collection/components/q2-detail/q2-detail.js +1 -1
- package/dist/collection/components/q2-dropdown/q2-dropdown.js +25 -21
- package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
- package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +34 -32
- package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-example/q2-example.js +1 -1
- package/dist/collection/components/q2-form/q2-form.js +1 -1
- package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
- package/dist/collection/components/q2-input/q2-input.js +1 -1
- package/dist/collection/components/q2-item/q2-item.js +1 -1
- package/dist/collection/components/q2-legend/q2-legend.js +1 -1
- package/dist/collection/components/q2-list/q2-list.js +1 -1
- package/dist/collection/components/q2-message/q2-message.js +1 -1
- package/dist/collection/components/q2-modal/q2-modal.js +1 -1
- package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
- package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
- package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js +1 -0
- package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-pill/q2-pill.js +1 -1
- package/dist/collection/components/q2-popover/q2-popover.css +18 -10
- package/dist/collection/components/q2-popover/q2-popover.js +50 -62
- package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
- package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js +1 -34
- package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js +743 -435
- package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js.map +1 -1
- package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
- package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
- package/dist/collection/components/q2-section/q2-section.js +2 -2
- package/dist/collection/components/q2-select/q2-select.js +96 -14
- package/dist/collection/components/q2-select/q2-select.js.map +1 -1
- package/dist/collection/components/q2-select/test/q2-select-test.spec.js +327 -0
- package/dist/collection/components/q2-select/test/q2-select-test.spec.js.map +1 -1
- package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
- package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
- package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
- package/dist/collection/components/q2-tag/q2-tag.js +1 -1
- package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +5 -0
- package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-textarea/q2-textarea.js +1 -1
- package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
- package/dist/components/index2.js +1 -4
- package/dist/components/index2.js.map +1 -1
- package/dist/components/q2-action-group2.js +1 -1
- package/dist/components/q2-action-sheet.js +1 -1
- package/dist/components/q2-avatar2.js +1 -1
- package/dist/components/q2-carousel-pane.js +2 -2
- package/dist/components/q2-chart-area.js +1 -1
- package/dist/components/q2-chart-bar.js +1 -1
- package/dist/components/q2-chart-donut.js +1 -1
- package/dist/components/q2-currency.js +1 -1
- package/dist/components/q2-detail.js +1 -1
- package/dist/components/q2-dropdown.js +24 -21
- package/dist/components/q2-dropdown.js.map +1 -1
- package/dist/components/q2-example.js +1 -1
- package/dist/components/q2-form.js +1 -1
- package/dist/components/q2-formatted-text.js +1 -1
- package/dist/components/q2-input2.js +1 -1
- package/dist/components/q2-item2.js +1 -1
- package/dist/components/q2-legend2.js +1 -1
- package/dist/components/q2-list2.js +1 -1
- package/dist/components/q2-message2.js +1 -1
- package/dist/components/q2-modal.js +1 -1
- package/dist/components/q2-month-picker.js +2 -2
- package/dist/components/q2-optgroup2.js +1 -1
- package/dist/components/q2-pagination.js +3 -3
- package/dist/components/q2-pill.js +1 -1
- package/dist/components/q2-popover2.js +49 -62
- package/dist/components/q2-popover2.js.map +1 -1
- package/dist/components/q2-relative-time.js +1 -1
- package/dist/components/q2-resize-observer2.js +1 -1
- package/dist/components/q2-section.js +2 -2
- package/dist/components/q2-select2.js +84 -14
- package/dist/components/q2-select2.js.map +1 -1
- package/dist/components/q2-stepper-vertical.js +1 -1
- package/dist/components/q2-stepper.js +1 -1
- package/dist/components/q2-tab-container.js +1 -1
- package/dist/components/q2-tab-pane.js +1 -1
- package/dist/components/q2-tag.js +1 -1
- package/dist/components/q2-textarea.js +1 -1
- package/dist/components/tecton-tab-pane.js +2 -2
- package/dist/esm/{index-c215e8ef.js → index-f2a66217.js} +2 -5
- package/dist/esm/index-f2a66217.js.map +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/q2-action-group.entry.js +2 -2
- package/dist/esm/q2-action-sheet.entry.js +2 -2
- package/dist/esm/q2-avatar.entry.js +1 -1
- package/dist/esm/q2-badge_7.entry.js +4 -4
- package/dist/esm/q2-calendar.entry.js +1 -1
- package/dist/esm/q2-card.entry.js +1 -1
- package/dist/esm/q2-carousel-pane.entry.js +3 -3
- package/dist/esm/q2-carousel.entry.js +1 -1
- package/dist/esm/q2-chart-area.entry.js +2 -2
- package/dist/esm/q2-chart-bar.entry.js +2 -2
- package/dist/esm/q2-chart-donut.entry.js +2 -2
- package/dist/esm/q2-checkbox-group.entry.js +1 -1
- package/dist/esm/q2-checkbox.entry.js +1 -1
- package/dist/esm/q2-currency.entry.js +1 -1
- package/dist/esm/q2-data-table.entry.js +1 -1
- package/dist/esm/q2-detail.entry.js +2 -2
- package/dist/esm/q2-dropdown-item.entry.js +1 -1
- package/dist/esm/q2-dropdown.entry.js +25 -22
- package/dist/esm/q2-dropdown.entry.js.map +1 -1
- package/dist/esm/q2-editable-field.entry.js +1 -1
- package/dist/esm/q2-example.entry.js +1 -1
- package/dist/esm/q2-file-picker.entry.js +1 -1
- package/dist/esm/q2-form.entry.js +1 -1
- package/dist/esm/q2-formatted-text.entry.js +1 -1
- package/dist/esm/q2-item_3.entry.js +3 -3
- package/dist/esm/q2-legend.entry.js +1 -1
- package/dist/esm/q2-loc.entry.js +1 -1
- package/dist/esm/q2-message.entry.js +2 -2
- package/dist/esm/q2-modal.entry.js +2 -2
- package/dist/esm/q2-month-picker.entry.js +3 -3
- package/dist/esm/q2-optgroup.entry.js +2 -2
- package/dist/esm/q2-option-list_2.entry.js +49 -62
- package/dist/esm/q2-option-list_2.entry.js.map +1 -1
- package/dist/esm/q2-option.entry.js +1 -1
- package/dist/esm/q2-pagination.entry.js +4 -4
- package/dist/esm/q2-pill.entry.js +2 -2
- package/dist/esm/q2-radio-group.entry.js +1 -1
- package/dist/esm/q2-radio.entry.js +1 -1
- package/dist/esm/q2-relative-time.entry.js +2 -2
- package/dist/esm/q2-resize-observer.entry.js +1 -1
- package/dist/esm/q2-section.entry.js +3 -3
- package/dist/esm/q2-select.entry.js +82 -12
- package/dist/esm/q2-select.entry.js.map +1 -1
- package/dist/esm/q2-stepper-pane.entry.js +1 -1
- package/dist/esm/q2-stepper-vertical.entry.js +2 -2
- package/dist/esm/q2-stepper.entry.js +2 -2
- package/dist/esm/q2-tag.entry.js +2 -2
- package/dist/esm/q2-tecton-elements.js +1 -1
- package/dist/esm/q2-textarea.entry.js +2 -2
- package/dist/esm/q2-tooltip.entry.js +1 -1
- package/dist/esm/tecton-tab-pane.entry.js +2 -2
- package/dist/q2-tecton-elements/{index-c215e8ef.js → index-f2a66217.js} +2 -6
- package/dist/q2-tecton-elements/index-f2a66217.js.map +1 -0
- package/dist/q2-tecton-elements/q2-action-group.entry.js +4 -4
- package/dist/q2-tecton-elements/q2-action-sheet.entry.js +9 -9
- package/dist/q2-tecton-elements/q2-avatar.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-badge_7.entry.js +42 -42
- package/dist/q2-tecton-elements/q2-calendar.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +21 -21
- package/dist/q2-tecton-elements/q2-carousel.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-chart-area.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-chart-bar.entry.js +80 -80
- package/dist/q2-tecton-elements/q2-chart-donut.entry.js +7 -7
- package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-checkbox.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-currency.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-data-table.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-detail.entry.js +39 -39
- package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-dropdown.entry.js +79 -75
- package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-editable-field.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-file-picker.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-form.entry.js +10 -10
- package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-item_3.entry.js +19 -19
- package/dist/q2-tecton-elements/q2-legend.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-loc.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-message.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-modal.entry.js +24 -24
- package/dist/q2-tecton-elements/q2-month-picker.entry.js +67 -67
- package/dist/q2-tecton-elements/q2-optgroup.entry.js +8 -8
- package/dist/q2-tecton-elements/q2-option-list_2.entry.js +236 -241
- package/dist/q2-tecton-elements/q2-option-list_2.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-option.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-pagination.entry.js +42 -42
- package/dist/q2-tecton-elements/q2-pill.entry.js +14 -14
- package/dist/q2-tecton-elements/q2-radio-group.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-radio.entry.js +13 -13
- package/dist/q2-tecton-elements/q2-relative-time.entry.js +5 -5
- package/dist/q2-tecton-elements/q2-resize-observer.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-section.entry.js +23 -23
- package/dist/q2-tecton-elements/q2-select.entry.js +146 -88
- package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +5 -5
- package/dist/q2-tecton-elements/q2-stepper.entry.js +21 -21
- package/dist/q2-tecton-elements/q2-tag.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-textarea.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-tooltip.entry.js +1 -1
- package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +6 -6
- package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +6 -4
- package/dist/types/components/q2-popover/q2-popover.d.ts +4 -4
- package/dist/types/components/q2-select/q2-select.d.ts +18 -0
- package/package.json +3 -3
- package/dist/cjs/index-99667782.js.map +0 -1
- package/dist/esm/index-c215e8ef.js.map +0 -1
- package/dist/q2-tecton-elements/index-c215e8ef.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"q2-calendar-test.e2e.js","sourceRoot":"","sources":["../../../../../src/components/q2-calendar/test/q2-calendar-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n setTestStrings,\n setup,\n dispatchEvent,\n testDeprecatedAriaLabel,\n getActiveElementTestId,\n getListOfStyleCompilationIssues,\n evaluateA11y,\n} from '@/utils/helpers';\nimport { getWeekOfMonth, addDays, format, formatISO, parseISO } from 'date-fns';\nimport { E2EElement, E2EPage } from '@stencil/core/testing';\nimport { removeTimezoneOffset } from '../q2-calendar-helpers';\nimport { Q2Calendar } from '../q2-calendar';\n\ndescribe('q2-calendar', () => {\n let page: E2EPage;\n let message: E2EElement;\n let calendar: E2EElement;\n let date: string;\n let innerInput: E2EElement;\n let popover: E2EElement;\n let table: E2EElement;\n let calendarButton: E2EElement;\n const isInvalidErrorString: string = 'tecton.element.calendar.invalid';\n\n const innerInputTestId = async (page: E2EPage) => {\n return page.$eval('q2-calendar', el => {\n return el.shadowRoot.querySelector('q2-input').shadowRoot.activeElement?.getAttribute('test-id');\n });\n };\n\n beforeEach(function () {\n date = '2017-02-01';\n });\n\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-calendar></q2-calendar>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-calendar')).toHaveLength(0);\n });\n\n describe('[A11y] guideline compliance', () => {\n it('Does not have accessibility violations', async () => {\n const page = await setup({\n html: `<q2-calendar label=\"Date\"></q2-calendar>`,\n });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n\n it('renders the component in the dom', async () => {\n page = await setup({ html: `<q2-calendar></q2-calendar>` });\n\n const calendarContainer = await page.find('q2-calendar >>> click-elsewhere');\n expect(calendarContainer).not.toBeNull();\n });\n\n it('sets properties on nested q2-input', async () => {\n page = await setup({\n html: `\n <q2-calendar\n value=${date}\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n ></q2-calendar>`,\n });\n\n let innerInput: any = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n const inputProps = {\n iconRight: q2Input.iconRight,\n _role: q2Input._role,\n _preventEntry: q2Input._preventEntry,\n pseudo: q2Input.pseudo,\n hideMessages: q2Input.hideMessages,\n hideLabel: q2Input.hideLabel,\n value: q2Input.value,\n label: q2Input.label,\n ariaLabel: q2Input.ariaLabel,\n disabled: q2Input.disabled,\n optional: q2Input.optional,\n errors: q2Input.errors,\n };\n\n return inputProps;\n });\n\n // Constants for all calendars\n expect(innerInput.iconRight).toEqual('calendar');\n expect(innerInput.pseudo).toEqual(undefined);\n expect(innerInput._role).toEqual('combobox');\n expect(innerInput._preventEntry).toEqual(true);\n expect(innerInput.hideMessages).toEqual(true);\n\n // Dependent on props\n const reformattedDate = format(parseISO(date), 'MM/dd/yyyy');\n expect(innerInput.value).toEqual(reformattedDate);\n expect(innerInput.label).toEqual('Calendar Label');\n expect(innerInput.hideLabel).toEqual(undefined);\n expect(innerInput.ariaLabel).toEqual(undefined);\n expect(innerInput.disabled).toEqual(false);\n expect(innerInput.optional).toEqual(false);\n expect(innerInput.errors).toEqual([]);\n\n calendar = await page.find('q2-calendar');\n\n calendar.setProperty('label', undefined);\n calendar.setProperty('disabled', true);\n calendar.setProperty('ariaLabel', 'Calendar Aria-Label');\n calendar.setProperty('optional', true);\n calendar.setProperty('errors', ['Error #1']);\n\n await page.waitForChanges();\n innerInput = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n const inputProps = {\n label: q2Input.label,\n ariaLabel: q2Input.ariaLabel,\n hideLabel: q2Input.hideLabel,\n disabled: q2Input.disabled,\n optional: q2Input.optional,\n errors: q2Input.errors,\n };\n\n return inputProps;\n });\n\n expect(innerInput.label).toEqual('Calendar Aria-Label');\n expect(innerInput.hideLabel).toEqual(true);\n expect(innerInput.ariaLabel).toEqual(undefined);\n expect(innerInput.disabled).toEqual(true);\n expect(innerInput.optional).toEqual(true);\n expect(innerInput.errors).toEqual(['Error #1']);\n });\n\n it('sets value property with moment date string', async () => {\n const mmddyyyy = '01/06/2022';\n const momentDateString = 'Thu Jan 06 2022 12:35:17 GMT-0600';\n page = await setup({\n html: `\n <q2-calendar\n value=\"${momentDateString}\"\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n ></q2-calendar>`,\n });\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n expect(await innerInput.getProperty('value')).toEqual(mmddyyyy);\n });\n\n it('gives host element an error state when invalid is set', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n calendar.setProperty('invalid', true);\n await page.waitForChanges();\n const inputProps: any = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n const inputProps = {\n errors: q2Input.errors,\n };\n return inputProps;\n });\n expect(inputProps.errors).toHaveLength(1);\n expect(inputProps.errors).toEqual([isInvalidErrorString]);\n });\n\n it('host element should not have errors when invalid is not set', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n const innerInputErrors: string[] = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n return q2Input.errors || [];\n });\n\n expect(innerInputErrors).toHaveLength(0);\n });\n\n it('actual errors should take precedence over invalid tag', async () => {\n const errors = ['Error #1'];\n\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n calendar = await page.find('q2-calendar');\n calendar.setProperty('errors', errors);\n await page.waitForChanges();\n\n let innerInputErrors: string[] = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n return q2Input.errors || [];\n });\n\n expect(innerInputErrors).toHaveLength(1);\n expect(innerInputErrors).toEqual(errors);\n\n calendar.setProperty('invalid', true);\n\n await page.waitForChanges();\n\n innerInputErrors = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n return q2Input.errors || [];\n });\n\n expect(innerInputErrors).toHaveLength(1);\n expect(innerInputErrors).toEqual(errors);\n\n calendar.setProperty('errors', []);\n\n await page.waitForChanges();\n\n innerInputErrors = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n return q2Input.errors || [];\n });\n\n expect(innerInputErrors).toHaveLength(1);\n expect(innerInputErrors).toEqual([isInvalidErrorString]);\n\n calendar.setProperty('invalid', false);\n await page.waitForChanges();\n\n innerInputErrors = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n return q2Input.errors || [];\n });\n\n expect(innerInputErrors).toHaveLength(0);\n });\n\n it('allows the user to select a date using the mouse', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n await page.waitForChanges();\n\n const calendarContainer = await page.find('q2-calendar >>> click-elsewhere');\n expect(calendarContainer.classList.contains('dropdown-open')).toEqual(true);\n\n let message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(message.textContent).toEqual('tecton.element.calendar.hint.select');\n\n const day = await page.find('q2-calendar >>> td:not([aria-disabled=\"true\"])');\n expect(day).not.toBeNull();\n\n await day.click();\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n\n expect(message).toBeNull();\n expect(calendarContainer.classList.contains('dropdown-open')).toEqual(false);\n });\n\n describe('Getters', () => {\n let specCalendar: Q2Calendar;\n beforeEach(() => {\n specCalendar = new Q2Calendar();\n });\n\n describe('errorList', () => {\n it('returns an empty array by default', async () => {\n expect(specCalendar.errorList).toEqual([]);\n });\n\n it('returns a standard message when invalid is true', async () => {\n specCalendar.invalid = true;\n expect(specCalendar.errorList).toEqual(['tecton.element.calendar.invalid']);\n });\n\n it('returns validation error message over the invalid message when provided', async () => {\n specCalendar.setHints({\n isValid: false,\n messageType: 'error',\n message: 'tecton.element.calendar.hint.invalidDate',\n });\n expect(specCalendar.invalid).toBe(true);\n expect(specCalendar.errorList).toEqual(['tecton.element.calendar.hint.invalidDate']);\n });\n\n it('returns errors content over all other error messages', async () => {\n specCalendar.setHints({\n isValid: false,\n messageType: 'error',\n message: 'tecton.element.calendar.hint.invalidDate',\n });\n specCalendar.errors = ['My custom error'];\n expect(specCalendar.invalid).toBe(true);\n expect(specCalendar.errorList).toEqual(['My custom error', 'tecton.element.calendar.hint.invalidDate']);\n });\n });\n\n describe('hintList', () => {\n it('returns a standard hint message by default', async () => {\n expect(specCalendar.hintList).toEqual(['tecton.element.calendar.hint.select']);\n });\n\n it('returns empty array when hint messages are cleared', async () => {\n specCalendar.setHints({\n isValid: false,\n messageType: null,\n message: null,\n });\n expect(specCalendar.hintList).toEqual([]);\n });\n\n it('returns validation hint message when provided', async () => {\n specCalendar.setHints({\n isValid: false,\n messageType: 'info',\n message: 'tecton.element.calendar.hint.format',\n });\n expect(specCalendar.hintList).toEqual(['tecton.element.calendar.hint.format']);\n });\n\n it('returns hints content over all other messages', async () => {\n specCalendar.setHints({\n isValid: false,\n messageType: 'info',\n message: 'tecton.element.calendar.hint.format',\n });\n specCalendar.hints = ['My custom hint'];\n expect(specCalendar.hintList).toEqual(['My custom hint']);\n });\n });\n });\n\n describe('Props', () => {\n describe('popoverDirection', () => {\n describe('when provided', () => {\n it('respects a value of \"down\" no matter the position in viewport', async () => {\n page = await setup({\n html: `<q2-calendar popover-direction=\"down\" style=\"position:fixed; bottom: 100px\"/>`,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(popover).toEqualAttribute('direction', 'down');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n expect(popover.shadowRoot.querySelector('.container')).toHaveClass('down');\n expect(popover.shadowRoot.querySelector('.container')).not.toHaveClass('up');\n });\n it('respects a value of \"up\" no matter the position in viewport', async () => {\n page = await setup({\n html: `<q2-calendar popover-direction=\"up\"/>`,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(popover).toEqualAttribute('direction', 'up');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n const popoverContainer = popover.shadowRoot.querySelector('.container');\n expect(popoverContainer).not.toHaveClass('down');\n expect(popoverContainer).toHaveClass('up');\n });\n });\n\n describe('when not provided', () => {\n it('auto-determines the direction to be \"down\" when element is on upper half of page', async () => {\n page = await setup({\n html: `<q2-calendar style=\"position: fixed; top: 10px;\" />`,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(popover).not.toHaveAttribute('direction');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n const popoverContainer = popover.shadowRoot.querySelector('.container');\n expect(popoverContainer).not.toHaveClass('up');\n expect(popoverContainer).toHaveClass('down');\n });\n\n it('auto-determines the direction to be \"up\" when element is on lower half of page', async () => {\n page = await setup({\n html: `<q2-calendar style=\"position: fixed; bottom: 10px;\" />`,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(popover).not.toHaveAttribute('direction');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n const popoverContainer = popover.shadowRoot.querySelector('.container');\n expect(popoverContainer).not.toHaveClass('down');\n expect(popoverContainer).toHaveClass('up');\n });\n });\n });\n describe('popoverAlignment', () => {\n describe('when not provided (default)', () => {\n it('does not pass a value to the popover', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(await popover.getProperty('align')).toBeUndefined();\n });\n });\n\n describe('when provided', () => {\n it('passes the value to the popover', async () => {\n page = await setup({\n html: `<q2-calendar popover-alignment=\"right\"></q2-calendar>`,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(await popover.getProperty('align')).toEqual('right');\n });\n });\n });\n describe('popoverMode', () => {\n it('does not set any mode on the popover (default)', async () => {\n const page = await setup({\n html: `\n <q2-calendar></q2-calendar>\n `,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(await popover.getProperty('mode')).toBeNull();\n });\n\n it('sets the value of popoverMode as the mode on the popover', async () => {\n const page = await setup({\n html: `\n <q2-calendar popover-mode=\"legacy\"></q2-calendar>\n `,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(await popover.getProperty('mode')).toEqual('legacy');\n });\n });\n describe('readonly', () => {\n let page;\n const readonlyText = '(read only)';\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar label=\"label text\" value=\"2015/2/15\"></q2-calendar>`,\n });\n await setTestStrings(page, {\n 'tecton.element.input.readonly': readonlyText,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n });\n\n it('when readonly, label text should include (read only) ', async () => {\n const element = await page.find('q2-calendar');\n await element.setProperty('readonly', true);\n await page.waitForChanges();\n const input = await page.find('q2-calendar >>> q2-input');\n const label = await input.shadowRoot.querySelector('label');\n expect(label.textContent).toEqual(`label text${readonlyText}`);\n });\n\n it('when readonly, click should not work to open calendar', async () => {\n const element = await page.find('q2-calendar');\n await element.setProperty('readonly', true);\n await page.waitForChanges();\n await element.click();\n expect(popover).not.toHaveAttribute('open');\n });\n\n it('when readonly, pressing Space key should not work to open calendar', async () => {\n const element = await page.find('q2-calendar');\n await element.setProperty('readonly', true);\n await page.waitForChanges();\n await dispatchEvent(page, ['q2-calendar', 'q2-input'], 'keydown', {\n key: ' ',\n });\n expect(popover).not.toHaveAttribute('open');\n });\n\n it('when readonly, pressing Enter key should not work to open calendar', async () => {\n const element = await page.find('q2-calendar');\n await element.setProperty('readonly', true);\n await page.waitForChanges();\n await dispatchEvent(page, ['q2-calendar', 'q2-input'], 'keydown', {\n key: 'Enter',\n });\n expect(popover).not.toHaveAttribute('open');\n });\n });\n\n describe('typeable', () => {\n describe('when false (default)', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n });\n\n it('renders but does not display hint message', async () => {\n expect(message).toHaveClass('sr');\n expect(innerInput).toHaveAttribute('hide-messages');\n });\n\n it('updates the hint message when set to true', async () => {\n expect(message.textContent).toEqual('tecton.element.calendar.hint.select');\n\n calendar = await page.find('q2-calendar');\n calendar.setProperty('typeable', true);\n await page.waitForChanges();\n\n expect(message.textContent).toEqual('tecton.element.calendar.hint.format: mm/dd/yyyy');\n });\n });\n\n describe('when true', () => {\n describe('when value is not present', () => {\n let calendarField;\n\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-calendar\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n typeable\n ></q2-calendar>\n `,\n });\n\n calendarField = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n popover = await page.find('q2-calendar >>> q2-popover');\n table = await page.find('q2-calendar >>> table');\n calendarButton = await page.find('q2-calendar >>> q2-btn');\n });\n\n const enterIvalidDate = async () => {\n await calendarField.setProperty('endDate', '2022-12-15');\n await innerInput.click();\n await innerInput.type('12/31/2022');\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n\n expect(messageHint).toEqualAttribute('type', 'error');\n expect(calendarField).toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toBeUndefined();\n\n await calendarButton.click();\n await page.waitForChanges();\n const day = await page.find('q2-calendar >>> td:not([aria-disabled=\"true\"])');\n\n expect(day).not.toBeNull();\n\n return day;\n };\n\n it('renders message without sr class', async () => {\n const message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(message).toHaveClass('sr');\n expect(innerInput).not.toHaveAttribute('hide-messages');\n });\n\n it('supports valid date', async () => {\n await innerInput.click();\n await innerInput.type('10222021');\n await innerInput.press('Enter');\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message).toBeNull();\n expect(await calendarField.getProperty('value')).toEqual('2021-10-22');\n expect(await calendarField.getProperty('value')).toEqual('2021-10-22');\n });\n\n it('marks field as invalid when an invalid date is typed', async () => {\n await innerInput.click();\n await innerInput.type('22222021');\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n expect(messageHint).toEqualAttribute('type', 'error');\n expect(calendarField).toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toBeUndefined();\n });\n\n it('marks field as invalid when an unavailable date is typed ( weekend with checksum 62 )', async () => {\n await calendarField.setProperty('daysOfWeekChecksum', 62);\n await page.waitForChanges();\n await innerInput.click();\n await innerInput.type('10022021');\n const selectedDate = await page.find('q2-calendar >>> td.is-selected');\n expect(selectedDate).toHaveClass('is-unavailable');\n expect(calendarField).toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toBeUndefined();\n });\n\n it('marks field as valid when no value presented with firing keyup event', async () => {\n await innerInput.focus();\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'keyup', {\n key: 'Shift',\n });\n expect(calendarField).not.toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toBeUndefined();\n });\n\n it('reset the calendar when assigning empty string', async () => {\n await innerInput.click();\n await innerInput.type('3333');\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n expect(messageHint).toEqualAttribute('type', 'error');\n expect(calendarField).toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toBeUndefined();\n await calendarField.setProperty('value', '');\n await page.waitForChanges();\n expect(messageHint).toEqualAttribute('type', 'info');\n expect(calendarField).not.toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toBeUndefined();\n });\n\n it('does not display error , if month value is possible', async () => {\n await innerInput.type('10');\n expect(message.textContent).toEqual('tecton.element.calendar.hint.format: mm/dd/yyyy');\n expect(message).toEqualAttribute('type', 'info');\n });\n\n it('does not display error, if month and day values are possible', async () => {\n await innerInput.type('0122');\n await page.waitForChanges();\n expect(message.textContent).toEqual('tecton.element.calendar.hint.format: mm/dd/yyyy');\n expect(message).toEqualAttribute('type', 'info');\n });\n\n it('does display error, if month value is impossible', async () => {\n await innerInput.type('55');\n expect(message.textContent).toEqual('tecton.element.calendar.hint.invalidDate: mm/dd/yyyy');\n expect(message).toEqualAttribute('type', 'error');\n });\n\n it('does display error, if month is possible, but day value is impossible', async () => {\n await innerInput.type('0144');\n await page.waitForChanges();\n expect(message.textContent).toEqual('tecton.element.calendar.hint.invalidDate: mm/dd/yyyy');\n expect(message).toEqualAttribute('type', 'error');\n });\n\n it('does not open calendar popover when clicking input or typing', async () => {\n expect(popover).not.toHaveAttribute('open');\n\n await innerInput.type('11');\n\n expect(popover).not.toHaveAttribute('open');\n });\n\n it('does open calendar popover when clicking q2-btn inside input slot-right', async () => {\n await calendarButton.click();\n await page.waitForChanges();\n\n expect(popover).toHaveAttribute('open');\n });\n\n it('closes the popover when the input field is clicked', async () => {\n await calendarButton.click();\n await page.waitForChanges();\n\n expect(popover).toHaveAttribute('open');\n\n await calendarField.click();\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n });\n\n it('closes the popover when the input field is focused', async () => {\n await calendarButton.click();\n await page.waitForChanges();\n\n expect(popover).toHaveAttribute('open');\n\n await calendarField.focus();\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n });\n\n it('displays error for invalid date and clears the error when valid date is selected by click', async () => {\n const day = await enterIvalidDate();\n\n await day.click();\n await page.waitForChanges();\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n\n expect(messageHint).toBeNull();\n expect(calendarField).not.toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toEqual('2022-12-01');\n });\n\n it('displays error for invalid date and clears the error when valid date is selected by keyboard', async () => {\n const day = await enterIvalidDate();\n\n await day.focus();\n await table.press('Enter');\n await page.waitForChanges();\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n\n expect(messageHint).toBeNull();\n expect(calendarField).not.toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toEqual('2022-12-01');\n });\n });\n\n describe('when value is present', () => {\n let calendarField;\n const innerInputValue = '02/14/2020';\n const calendarValue = '2020-02-14';\n\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-calendar\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n value=\"${calendarValue}\"\n typeable\n ></q2-calendar>\n `,\n });\n\n calendarField = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n expect(await calendarField.getProperty('value')).toEqual(calendarValue);\n });\n\n it(\"inner input should have same value as q2-calendar's value(reordered) \", async () => {\n expect(await innerInput.getProperty('value')).toEqual(innerInputValue);\n });\n\n it('supports updating with a valid date', async () => {\n await innerInput.setProperty('value', ''); // clear existing default value\n await innerInput.click();\n await innerInput.type('10222021');\n await innerInput.press('Enter');\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message).toBeNull();\n expect(await calendarField.getProperty('value')).toEqual('2021-10-22');\n });\n\n describe('when typed value is invalid', () => {\n beforeEach(async () => {\n await innerInput.setProperty('value', ''); // clear existing default value\n await innerInput.click();\n await innerInput.type('22222021');\n });\n\n it('clears existing value and marks as invalid when Enter is pressed', async () => {\n await innerInput.press('Enter');\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n expect(messageHint).toEqualAttribute('type', 'error');\n expect(calendarField).toHaveAttribute('invalid');\n expect(await innerInput.getProperty('value')).toEqual('22/22/2021');\n expect(await calendarField.getProperty('value')).toBeNull();\n });\n\n it('clears existing value and marks as invalid when Tab is pressed', async () => {\n await innerInput.setProperty('value', ''); // clear existing default value\n await innerInput.focus();\n await innerInput.type('22222021');\n await innerInput.press('Tab');\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n expect(messageHint).toEqualAttribute('type', 'error');\n expect(calendarField).toHaveAttribute('invalid');\n expect(await innerInput.getProperty('value')).toEqual('22/22/2021');\n expect(await calendarField.getProperty('value')).toBeNull();\n });\n });\n\n describe('when blur event with mm/dd typed', () => {\n let externalButton;\n let message;\n const today = new Date();\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-btn intent=\"workflow-primary\">A Button</q2-btn>\n <q2-calendar\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n typeable\n ></q2-calendar>`,\n });\n calendarField = await page.find('q2-calendar');\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n externalButton = await page.find('q2-btn');\n });\n\n it('type and fire blur event to autocomplete year on calendar input field with valid date', async () => {\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([\n 'tecton.element.calendar.hint.format: mm/dd/yyyy',\n ]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.format: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'info');\n expect(calendarField).not.toHaveAttribute('invalid');\n\n await innerInput.type('1020');\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([\n 'tecton.element.calendar.hint.format: mm/dd/yyyy',\n ]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.format: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'info');\n expect(calendarField).not.toHaveAttribute('invalid');\n\n await externalButton.click();\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(await innerInput.getProperty('value')).toEqual(`10/20/${today.getFullYear()}`);\n expect(message).toBeNull();\n expect(calendarField).not.toHaveAttribute('invalid');\n });\n\n it('type and fire blur event to autocomplete day, and year on calendar input field with valid date', async () => {\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([\n 'tecton.element.calendar.hint.format: mm/dd/yyyy',\n ]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.format: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'info');\n expect(calendarField).not.toHaveAttribute('invalid');\n\n await innerInput.type('10');\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([\n 'tecton.element.calendar.hint.format: mm/dd/yyyy',\n ]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.format: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'info');\n expect(calendarField).not.toHaveAttribute('invalid');\n\n await externalButton.click();\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message).toBeNull();\n expect(calendarField).not.toHaveAttribute('invalid');\n });\n\n it('type and fire blur event to autocomplete year on calendar input field with invalid date', async () => {\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([\n 'tecton.element.calendar.hint.format: mm/dd/yyyy',\n ]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.format: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'info');\n expect(calendarField).not.toHaveAttribute('invalid');\n\n await innerInput.type('33');\n await page.waitForChanges();\n\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n\n expect(await innerInput.getProperty('errors')).toEqual([\n 'tecton.element.calendar.hint.invalidDate: mm/dd/yyyy',\n ]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.invalidDate: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'error');\n expect(calendarField).not.toHaveAttribute('valid');\n expect(calendarField).toHaveAttribute('invalid');\n\n await innerInput.type('40');\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([\n 'tecton.element.calendar.hint.invalidDate: mm/dd/yyyy',\n ]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.invalidDate: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'error');\n expect(calendarField).not.toHaveAttribute('valid');\n expect(calendarField).toHaveAttribute('invalid');\n\n await innerInput.type('56');\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([\n 'tecton.element.calendar.hint.invalidDate: mm/dd/yyyy',\n ]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.invalidDate: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'error');\n expect(calendarField).not.toHaveAttribute('valid');\n expect(calendarField).toHaveAttribute('invalid');\n\n await externalButton.click();\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint.sr');\n expect(await innerInput.getProperty('errors')).toEqual([\n 'tecton.element.calendar.hint.invalidDate: mm/dd/yyyy',\n ]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.invalidDate: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'error');\n expect(calendarField).toHaveAttribute('invalid');\n });\n });\n });\n\n describe('it should assume the year correctly based on today and assume value', () => {\n it('should be current year always with no assume provided', async () => {\n const today = new Date();\n const targetDate = new Date();\n targetDate.setDate(today.getDate() - 3); // 3 days before\n const [, mm, dd] = targetDate.toISOString().slice(0, 10).split('-');\n page = await setup({\n html: `\n <q2-calendar\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n days-of-week-checksum=\"127\"\n typeable\n ></q2-calendar>`,\n });\n\n const calendarField = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n await innerInput.click();\n await innerInput.type(`${mm}${dd}`);\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'keyup', {\n key: 'Escape',\n });\n expect(await innerInput.getProperty('value')).toEqual(`${mm}/${dd}/${today.getFullYear()}`);\n expect(await calendarField.getProperty('value')).toEqual(`${today.getFullYear()}-${mm}-${dd}`);\n });\n\n it('should be next year when typed value is earlier than today with assume=future', async () => {\n const today = new Date();\n const targetDate = new Date();\n targetDate.setDate(today.getDate() - 1); // 1 day before\n const [, mm, dd] = targetDate.toISOString().slice(0, 10).split('-');\n page = await setup({\n html: `\n <q2-calendar\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n assume=\"future\"\n days-of-week-checksum=\"127\"\n typeable\n ></q2-calendar>`,\n });\n\n const calendarField = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n await innerInput.click();\n await innerInput.type(`${mm}${dd}`);\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'keyup', {\n key: 'Escape',\n });\n expect(await innerInput.getProperty('value')).toEqual(`${mm}/${dd}/${today.getFullYear() + 1}`);\n expect(await calendarField.getProperty('value')).toEqual(\n `${today.getFullYear() + 1}-${mm}-${dd}`\n );\n });\n\n it('should be last year when typed value is later than today with assume=past', async () => {\n const today = new Date();\n const targetDate = new Date();\n targetDate.setDate(today.getDate() + 3); // 3 days later\n const targetOneYearAgo = new Date(targetDate);\n targetOneYearAgo.setFullYear(targetDate.getFullYear() - 1); // 1 year before\n const [, TARGET_MM, TARGET_DD] = targetDate.toISOString().slice(0, 10).split('-');\n const [YEARAGO_YYYY, YEARAGO_MM, YEARAGO_DD] = targetOneYearAgo\n .toISOString()\n .slice(0, 10)\n .split('-');\n\n page = await setup({\n html: `\n <q2-calendar\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n assume=\"past\"\n days-of-week-checksum=\"127\"\n typeable\n ></q2-calendar>`,\n });\n\n const calendarField = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n await innerInput.click();\n await innerInput.type(`${TARGET_MM}${TARGET_DD}`);\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'keyup', {\n key: 'Escape',\n });\n expect(await innerInput.getProperty('value')).toEqual(\n `${YEARAGO_MM}/${YEARAGO_DD}/${YEARAGO_YYYY}`\n );\n expect(await calendarField.getProperty('value')).toEqual(\n `${YEARAGO_YYYY}-${YEARAGO_MM}-${YEARAGO_DD}`\n );\n });\n });\n });\n });\n\n describe('display-format', () => {\n describe('when not provided', () => {\n it('detects when it is added after render', async () => {\n page = await setup({\n html: `<q2-calendar value=\"${date}\"></q2-calendar>`,\n });\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n expect(await innerInput.getProperty('value')).toEqual('02/01/2017');\n\n calendar = await page.find('q2-calendar');\n calendar.setProperty('displayFormat', 'YYYY-MM-DD');\n\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('2017-02-01');\n });\n });\n\n describe('when provided', () => {\n it('detects when it is added after render', async () => {\n page = await setup({\n html: `<q2-calendar value=\"${date}\" display-format=\"ll\"></q2-calendar>`,\n });\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n expect(await innerInput.getProperty('value')).toEqual('Feb 1, 2017');\n });\n\n it('detects when it is added after render', async () => {\n page = await setup({\n html: `<q2-calendar value=\"${date}\" display-format=\"MM/DD\"></q2-calendar>`,\n });\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n expect(await innerInput.getProperty('value')).toEqual('02/01');\n });\n });\n describe('when provided and blur', () => {\n it('keep the value on blur event', async () => {\n page = await setup({\n html: `<q2-calendar value=\"2024-03-06\" display-format=\"MM-DD-yyyy\"></q2-calendar>`,\n });\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n await dispatchEvent(page, ['q2-calendar', 'q2-input', 'button'], 'blur');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('03-06-2024');\n });\n });\n });\n\n describe('when typeable for clear value test', () => {\n let page;\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar typeable clearable value=\"2023-10-20\"></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> q2-input');\n expect(await innerInput.getProperty('value')).toEqual('10/20/2023');\n await innerInput.focus();\n });\n\n it('should fire change event on q2-calendar when value removed', async () => {\n const changeSpy = await calendar.spyOnEvent('change');\n expect(changeSpy).toHaveReceivedEventTimes(0);\n // remove all characters \"10/20/2023\"\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventTimes(1);\n });\n\n it('should fire change event on q2-calendar when clear button clicked', async () => {\n const changeSpy = await calendar.spyOnEvent('change');\n expect(changeSpy).toHaveReceivedEventTimes(0);\n // to focus clear button\n await innerInput.focus();\n await innerInput.press('Tab');\n const innerActiveTestId = async (page: E2EPage) => {\n return page.$eval('q2-calendar', el => {\n return el.shadowRoot\n .querySelector('q2-input')\n .shadowRoot.activeElement?.getAttribute('test-id');\n });\n };\n expect(await innerActiveTestId(page)).toEqual('clearButton');\n await innerInput.press('Enter');\n expect(changeSpy).toHaveReceivedEventTimes(1);\n });\n });\n\n describe('when non-typeable, clear button should be visible and working', () => {\n let page;\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar clearable value=\"2023-10-20\"></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> q2-input');\n expect(await innerInput.getProperty('value')).toEqual('10/20/2023');\n await innerInput.focus();\n });\n\n it('should be visible clear button', async () => {\n const clearButtonTestId = async (page: E2EPage) => {\n return page.$eval('q2-calendar', el => {\n return el.shadowRoot\n .querySelector('q2-input')\n .shadowRoot.querySelector('.btn-clear')\n ?.getAttribute('test-id');\n });\n };\n expect(await clearButtonTestId(page)).toEqual('clearButton');\n });\n\n it('should fire change event on q2-calendar when clear button clicked', async () => {\n const changeSpy = await calendar.spyOnEvent('change');\n expect(changeSpy).toHaveReceivedEventTimes(0);\n\n const clickClearButton = async (page: E2EPage) => {\n return page.$eval('q2-calendar', el => {\n return (\n el.shadowRoot\n .querySelector('q2-input')\n .shadowRoot.querySelector('.btn-clear') as HTMLElement\n ).click();\n });\n };\n await clickClearButton(page);\n expect(changeSpy).toHaveReceivedEventTimes(1);\n expect(await calendar.getProperty('value')).toBeNull();\n });\n });\n });\n\n describe('Methods', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-calendar label=\"My calendar\">\n </q2-calendar>\n `,\n });\n calendar = await page.find('q2-calendar');\n popover = await page.find('q2-calendar >>> q2-popover');\n innerInput = await page.find('q2-calendar >>> [test-id=inputAndCalendarToggle]');\n });\n\n describe('openPopover', () => {\n it('opens the popover via q2-input when NOT typeable', async () => {\n const innerInputClickSpy = await innerInput.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBeUndefined();\n\n await calendar.callMethod('openPopover');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(true);\n expect(innerInputClickSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toEqual('inputAndCalendarToggle');\n });\n\n it('opens the popover via q2-btn when typeable', async () => {\n await calendar.setProperty('typeable', true);\n await page.waitForChanges();\n\n calendarButton = await page.find('q2-calendar >>> [test-id=calendarToggle]');\n const calendarButtonClickSpy = await calendarButton.spyOnEvent('click');\n\n expect(calendarButtonClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBeUndefined();\n\n await calendar.callMethod('openPopover');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(true);\n expect(calendarButtonClickSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toEqual('calendarToggle');\n });\n });\n\n describe('closePopover', () => {\n beforeEach(async () => {\n await calendar.setProperty('open', true);\n await page.waitForChanges();\n });\n\n it('opens the popover via q2-input when NOT typeable', async () => {\n const innerInputClickSpy = await innerInput.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBe(true);\n\n await calendar.callMethod('closePopover');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(false);\n expect(innerInputClickSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toEqual('inputAndCalendarToggle');\n });\n\n it('opens the popover via q2-btn when typeable', async () => {\n await calendar.setProperty('typeable', true);\n await page.waitForChanges();\n\n calendarButton = await page.find('q2-calendar >>> [test-id=calendarToggle]');\n const calendarButtonClickSpy = await calendarButton.spyOnEvent('click');\n\n expect(calendarButtonClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBe(true);\n\n await calendar.callMethod('closePopover');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(false);\n expect(calendarButtonClickSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toEqual('calendarToggle');\n });\n });\n\n describe('setValue', () => {\n it('sets the value of the calendar when passed as string', async () => {\n const innerInputClickSpy = await innerInput.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBeUndefined();\n const newValue = '2023-10-20';\n\n await calendar.callMethod('setValue', newValue);\n await page.waitForChanges();\n\n const selectedDate = await page.find('q2-calendar >>> td[data-date=\"2023-10-20\"]');\n expect(selectedDate).toEqualAttribute('aria-selected', 'true');\n\n expect(await popover.getProperty('open')).toBe(false);\n expect(innerInputClickSpy).toHaveReceivedEventTimes(1);\n expect(await calendar.getProperty('value')).toEqual(newValue);\n expect(await getActiveElementTestId(page)).toEqual('inputAndCalendarToggle');\n });\n\n it('sets the value of the calendar when passed as Date object', async () => {\n const innerInputClickSpy = await innerInput.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBeUndefined();\n const newValue = '2023-10-20';\n\n await calendar.callMethod('setValue', new Date(newValue));\n await page.waitForChanges();\n\n const selectedDate = await page.find('q2-calendar >>> td[data-date=\"2023-10-20\"]');\n expect(selectedDate).toEqualAttribute('aria-selected', 'true');\n\n expect(await popover.getProperty('open')).toBe(false);\n expect(innerInputClickSpy).toHaveReceivedEventTimes(1);\n expect(await calendar.getProperty('value')).toEqual(newValue);\n expect(await getActiveElementTestId(page)).toEqual('inputAndCalendarToggle');\n });\n\n it('does nothing when invalid date is provided', async () => {\n const innerInputClickSpy = await innerInput.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBeUndefined();\n const newValue = '2023-13-31';\n\n await calendar.callMethod('setValue', newValue);\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBeUndefined();\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await calendar.getProperty('value')).toBeUndefined();\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n\n describe('typeValue', () => {\n beforeEach(async () => {\n await calendar.setProperty('typeable', true);\n await page.waitForChanges();\n });\n\n it('types the value of the calendar when passed as string', async () => {\n const innerInputFocusSpy = await innerInput.spyOnEvent('focus');\n const innerInputInputSpy = await innerInput.spyOnEvent('input');\n const calendarChangeSpy = await calendar.spyOnEvent('change');\n\n expect(innerInputFocusSpy).toHaveReceivedEventTimes(0);\n expect(innerInputInputSpy).toHaveReceivedEventTimes(0);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(0);\n const newValue = '2023-10-20';\n\n await calendar.callMethod('typeValue', newValue);\n await page.waitForChanges();\n\n expect(innerInputFocusSpy).toHaveReceivedEventTimes(1);\n expect(innerInputInputSpy).toHaveReceivedEventTimes(1);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBe('inputAndCalendarToggle');\n\n await innerInput.press('Tab');\n await page.waitForChanges();\n\n expect(await calendar.getProperty('value')).toEqual(newValue);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(1);\n expect(calendarChangeSpy).toHaveReceivedEventDetail({\n value: newValue,\n });\n expect(await getActiveElementTestId(page)).toBe('calendarToggle');\n });\n\n it('types the value of the calendar when passed as Date object', async () => {\n const innerInputFocusSpy = await innerInput.spyOnEvent('focus');\n const innerInputInputSpy = await innerInput.spyOnEvent('input');\n const calendarChangeSpy = await calendar.spyOnEvent('change');\n\n expect(innerInputFocusSpy).toHaveReceivedEventTimes(0);\n expect(innerInputInputSpy).toHaveReceivedEventTimes(0);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(0);\n const newValue = '2023-10-20';\n\n await calendar.callMethod('typeValue', new Date(newValue));\n await page.waitForChanges();\n\n expect(innerInputFocusSpy).toHaveReceivedEventTimes(1);\n expect(innerInputInputSpy).toHaveReceivedEventTimes(1);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBe('inputAndCalendarToggle');\n\n await innerInput.press('Tab');\n await page.waitForChanges();\n\n expect(await calendar.getProperty('value')).toEqual(newValue);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(1);\n expect(calendarChangeSpy).toHaveReceivedEventDetail({\n value: newValue,\n });\n expect(await getActiveElementTestId(page)).toBe('calendarToggle');\n });\n\n it('does nothing when invalid date is provided', async () => {\n const innerInputFocusSpy = await innerInput.spyOnEvent('focus');\n const innerInputInputSpy = await innerInput.spyOnEvent('input');\n const calendarChangeSpy = await calendar.spyOnEvent('change');\n\n expect(innerInputFocusSpy).toHaveReceivedEventTimes(0);\n expect(innerInputInputSpy).toHaveReceivedEventTimes(0);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(0);\n const newValue = '2023-13-31';\n\n await calendar.callMethod('typeValue', new Date(newValue));\n await page.waitForChanges();\n\n expect(innerInputFocusSpy).toHaveReceivedEventTimes(0);\n expect(innerInputInputSpy).toHaveReceivedEventTimes(0);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(0);\n expect(await calendar.getProperty('value')).toBeUndefined();\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n });\n\n it('adds aria-labels to table heading columns', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n const daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const innerTableHeadings = await page.findAll('q2-calendar >>> table thead th');\n expect(innerTableHeadings.length).toEqual(7);\n innerTableHeadings.forEach(async (heading, index) => {\n expect(await heading.getAttribute('aria-label')).toEqual(\n `tecton.element.calendar.days.${daysOfWeek[index]}`\n );\n });\n });\n\n it('opens and closes the dropdown and refocuses input on close', async () => {\n page = await setup({\n html: `<q2-calendar value=${date}></q2-calendar>`,\n });\n\n const calendarContainer = await page.find('q2-calendar >>> click-elsewhere');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n let calendarPopup = await page.find('q2-calendar >>> .calendar-field-popup');\n\n // Closed by default\n expect(calendarContainer.classList.contains('dropdown-open')).toEqual(false);\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('false');\n\n const inputFocusSpy = await innerInput.spyOnEvent('focus');\n\n // Open with click\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n calendarPopup = await page.find('q2-calendar >>> .calendar-field-popup');\n\n expect(calendarContainer.classList.contains('dropdown-open')).toEqual(true);\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('true');\n expect(calendarPopup).not.toBeNull();\n expect(inputFocusSpy).toHaveReceivedEventTimes(0);\n\n // Close with click\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('false');\n\n // Focuses input on close\n // spy will be hit twice on initial focus shift due to input focus delegation\n expect(inputFocusSpy).toHaveReceivedEventTimes(2);\n\n // Close on click elsewhere\n await dispatchEvent(page, ['q2-calendar', 'click-elsewhere'], 'change');\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('false');\n expect(inputFocusSpy).toHaveReceivedEventTimes(2);\n\n // Open with click\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('true');\n expect(inputFocusSpy).toHaveReceivedEventTimes(2);\n\n // Close on date selection\n await dispatchEvent(page, ['q2-calendar', 'td.is-valid'], 'click', {\n bubbles: true,\n });\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('false');\n expect(inputFocusSpy).toHaveReceivedEventTimes(3);\n });\n\n describe('calculating popover min-width', () => {\n const getInputAndPopoverWidths = async (page: E2EPage) => {\n return page.$eval('q2-calendar', (el: HTMLElement) => {\n const popover = el.shadowRoot.querySelector('q2-popover');\n const popoverContainer = popover.shadowRoot.querySelector('.container');\n const input = el.shadowRoot.querySelector('q2-input');\n const inputStyles = getComputedStyle(input);\n const popoverContainerStyles = getComputedStyle(popoverContainer);\n return {\n inputWidth: inputStyles.getPropertyValue('width').trim(),\n popoverWidth: popoverContainerStyles.getPropertyValue('width').trim(),\n };\n });\n };\n describe('when element is smaller than min-width', () => {\n it('ensures the popover is large enough to display the calendar', async () => {\n page = await setup({\n html: `<q2-calendar style=\"width: 200px\"></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n popover = await page.find('q2-calendar >>> q2-popover');\n calendar.setProperty('value', date);\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n const input = await page.find(\"q2-calendar >>> [test-id='inputAndCalendarToggle']\");\n await input.click();\n expect(popover).toHaveAttribute('open');\n const { inputWidth, popoverWidth } = await getInputAndPopoverWidths(page);\n expect(inputWidth).toEqual('200px');\n expect(popoverWidth).toEqual('336px');\n });\n });\n\n describe('when element is larger than min-width', () => {\n it('ensures the popover is the same width as the element', async () => {\n page = await setup({\n html: `<q2-calendar style=\"width: 600px\"></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n popover = await page.find('q2-calendar >>> q2-popover');\n calendar.setProperty('value', date);\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n const input = await page.find(\"q2-calendar >>> [test-id='inputAndCalendarToggle']\");\n await input.click();\n expect(popover).toHaveAttribute('open');\n const { inputWidth, popoverWidth } = await getInputAndPopoverWidths(page);\n expect(inputWidth).toEqual('600px');\n expect(popoverWidth).toEqual('600px');\n });\n });\n });\n\n describe('focus transferring', () => {\n let page: E2EPage;\n let calendar: E2EElement;\n\n it('focuses inner input when focus event dispatched for non-typeable calendar', async () => {\n page = await setup({ html: `<q2-calendar></q2-calendar>` });\n calendar = await page.find('q2-calendar');\n await dispatchEvent(page, ['q2-calendar'], 'focus');\n expect(await innerInputTestId(page)).toEqual('inputField');\n });\n\n it('focuses inner input when focus method called for non-typeable calendar', async () => {\n page = await setup({ html: `<q2-calendar></q2-calendar>` });\n calendar = await page.find('q2-calendar');\n await calendar.triggerEvent('focus');\n await page.waitForChanges();\n expect(await innerInputTestId(page)).toEqual('inputField');\n });\n\n it('focuses inner button when focus event dispatched for typeable calendar', async () => {\n page = await setup({ html: `<q2-calendar typeable></q2-calendar>` });\n calendar = await page.find('q2-calendar');\n await dispatchEvent(page, ['q2-calendar'], 'focus');\n expect(await innerInputTestId(page)).toEqual('inputField');\n });\n\n it('focuses inner button when focus method called for typeable calendar', async () => {\n page = await setup({ html: `<q2-calendar typeable></q2-calendar>` });\n calendar = await page.find('q2-calendar');\n await calendar.triggerEvent('focus');\n await page.waitForChanges();\n expect(await innerInputTestId(page)).toEqual('inputField');\n });\n });\n\n it('resizes the iframe on open and close', async () => {\n page = await setup({\n html: `<q2-calendar value=${date}></q2-calendar>`,\n });\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n // Closed by default\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('false');\n\n // Open with click\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('true');\n\n // Close with click\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('false');\n });\n\n it('generates and localizes correct placeholder', async () => {\n page = await setup({\n html: `\n <q2-calendar label=\"Label Text\"></q2-calendar>\n `,\n });\n\n calendar = await page.find('q2-calendar');\n\n await setTestStrings(page, {\n 'q2Calendar.placeholder': 'Placeholder Text',\n 'q2Calendar.disabledMsg': 'Disabled Placeholder',\n 'q2Calendar.buttonLabel': 'Button Label Text',\n });\n\n calendar.setProperty('placeholder', 'q2Calendar.placeholder');\n calendar.setProperty('disabledMsg', 'q2Calendar.disabledMsg');\n calendar.setProperty('buttonLabel', 'q2Calendar.buttonLabel');\n\n await page.waitForChanges();\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n expect(await innerInput.getProperty('placeholder')).toEqual('Button Label Text');\n\n calendar.setProperty('disabled', true);\n calendar.setProperty('buttonLabel', undefined);\n await page.waitForChanges();\n expect(await innerInput.getProperty('placeholder')).toEqual('Disabled Placeholder');\n\n calendar.setProperty('disabled', false);\n calendar.setProperty('disabledMsg', undefined);\n await page.waitForChanges();\n expect(await innerInput.getProperty('placeholder')).toEqual('Placeholder Text');\n });\n\n it('localizes attribute strings', async () => {\n page = await setup({\n html: `\n <q2-calendar></q2-calendar>\n `,\n });\n\n await setTestStrings(page, {\n 'q2Calendar.label': 'Label Text',\n 'q2Calendar.ariaLabel': 'Aria-Label Text',\n 'q2Calendar.error': 'Error Text',\n 'q2Calendar.placeholder': 'Placeholder Text',\n });\n\n calendar = await page.find('q2-calendar');\n\n calendar.setProperty('label', 'q2Calendar.label');\n calendar.setProperty('placeholder', 'q2Calendar.placeholder');\n calendar.setProperty('errors', ['q2Calendar.error']);\n\n await page.waitForChanges();\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n expect(await innerInput.getProperty('label')).toEqual('Label Text');\n expect(await innerInput.getProperty('errors')).toEqual(['Error Text']);\n expect(await innerInput.getProperty('placeholder')).toEqual('Placeholder Text');\n\n calendar.setProperty('ariaLabel', 'q2Calendar.ariaLabel');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('label')).toEqual('Aria-Label Text');\n expect(await innerInput.getProperty('ariaLabel')).toEqual(undefined);\n });\n\n it('conditionally renders and localizes calendarLabel', async () => {\n page = await setup({\n html: `\n <q2-calendar value=${date}></q2-calendar>\n `,\n });\n\n await setTestStrings(page, {\n 'q2Calendar.calendarLabel': 'Calendar Label Text',\n });\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n let calendarLabel = await page.find('q2-calendar >>> .calendar-label');\n expect(calendarLabel).toBeNull();\n\n calendar = await page.find('q2-calendar');\n calendar.setProperty('calendarLabel', 'q2Calendar.calendarLabel');\n await page.waitForChanges();\n\n calendarLabel = await page.find('q2-calendar >>> .calendar-label');\n expect(calendarLabel).not.toBeNull();\n expect(calendarLabel.innerText).toEqual('Calendar Label Text');\n });\n\n it('conditionally renders and localizes disclaimer', async () => {\n page = await setup({\n html: `\n <q2-calendar value=${date}></q2-calendar>\n `,\n });\n\n await setTestStrings(page, {\n 'q2Calendar.disclaimer': 'Disclaimer Text',\n });\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n let calendarDisclaimer = await page.find('q2-calendar >>> .calendar-disclaimer');\n expect(calendarDisclaimer).toBeNull();\n\n calendar = await page.find('q2-calendar');\n calendar.setProperty('disclaimer', 'q2Calendar.disclaimer');\n await page.waitForChanges();\n\n calendarDisclaimer = await page.find('q2-calendar >>> .calendar-disclaimer');\n expect(calendarDisclaimer).not.toBeNull();\n expect(calendarDisclaimer.innerText).toEqual('Disclaimer Text');\n });\n\n it('renders the calendar popup header', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n await setTestStrings(page, {\n 'tecton.element.calendar.previousMonth': 'Previous Month',\n 'tecton.element.calendar.nextMonth': 'Next Month',\n 'tecton.element.calendar.previousYear': 'Previous Year',\n 'tecton.element.calendar.nextYear': 'Next Year',\n });\n\n calendar = await page.find('q2-calendar');\n calendar.setProperty('value', date);\n await page.waitForChanges();\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const previousMonthBtn = await page.find('q2-calendar >>> [test-id=\"previousMonthButton\"]');\n const nextMonthBtn = await page.find('q2-calendar >>> [test-id=\"nextMonthButton\"]');\n const monthText = await page.find('q2-calendar >>> .cal-month-text');\n const previousYearBtn = await page.find('q2-calendar >>> [test-id=\"previousYearButton\"]');\n const nextYearBtn = await page.find('q2-calendar >>> [test-id=\"nextYearButton\"]');\n const yearText = await page.find('q2-calendar >>> .cal-year-text');\n\n expect(previousMonthBtn).toHaveClasses(['cal-nav-btn', 'prev-month']);\n expect(await previousMonthBtn.getProperty('ariaLabel')).toEqual(undefined);\n expect(await previousMonthBtn.getProperty('label')).toEqual('Previous Month');\n\n expect(nextMonthBtn).toHaveClasses(['cal-nav-btn', 'next-month']);\n expect(await nextMonthBtn.getProperty('ariaLabel')).toEqual(undefined);\n expect(await nextMonthBtn.getProperty('label')).toEqual('Next Month');\n\n expect(monthText.innerText).toEqual('tecton.element.calendar.months.February');\n\n expect(previousYearBtn).toHaveClasses(['cal-nav-btn', 'prev-year']);\n expect(await previousYearBtn.getProperty('ariaLabel')).toEqual(undefined);\n expect(await previousYearBtn.getProperty('label')).toEqual('Previous Year');\n\n expect(nextYearBtn).toHaveClasses(['cal-nav-btn', 'next-year']);\n expect(await nextYearBtn.getProperty('ariaLabel')).toEqual(undefined);\n expect(await nextYearBtn.getProperty('label')).toEqual('Next Year');\n\n expect(yearText.innerText).toEqual('2017');\n });\n\n it('navigates between months and years', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n calendar = await page.find('q2-calendar');\n popover = await page.find('q2-calendar >>> q2-popover');\n calendar.setProperty('value', date);\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n const input = await page.find(\"q2-calendar >>> [test-id='inputAndCalendarToggle']\");\n await input.click();\n expect(popover).toHaveAttribute('open');\n\n const monthText = await page.find('q2-calendar >>> .cal-month-text');\n const yearText = await page.find('q2-calendar >>> .cal-year-text');\n\n expect(monthText.innerText).toEqual('tecton.element.calendar.months.February');\n expect(yearText.innerText).toEqual('2017');\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"nextMonthButton\"]'], 'click');\n expect(monthText.innerText).toEqual('tecton.element.calendar.months.March');\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"previousMonthButton\"]'], 'click');\n expect(monthText.innerText).toEqual('tecton.element.calendar.months.February');\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"nextYearButton\"]'], 'click');\n expect(monthText.innerText).toEqual('tecton.element.calendar.months.February');\n expect(yearText.innerText).toEqual('2018');\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"previousYearButton\"]'], 'click');\n expect(monthText.innerText).toEqual('tecton.element.calendar.months.February');\n expect(yearText.innerText).toEqual('2017');\n });\n\n it('validates against checksum', async () => {\n page = await setup({\n html: `<q2-calendar value=${date} days-of-week-checksum=\"127\"></q2-calendar>`,\n });\n\n calendar = await page.find('q2-calendar');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const dateElements = await page.findAll('q2-calendar >>> td:not([aria-hidden])');\n // indices reliant on '2017-02-01' starting point\n const sunday = dateElements[4];\n const monday = dateElements[5];\n const tuesday = dateElements[6];\n const wednesday = dateElements[7];\n const thursday = dateElements[8];\n const friday = dateElements[9];\n const saturday = dateElements[10];\n\n // All days valid with 127\n expect(sunday).toHaveClass('is-valid');\n expect(monday).toHaveClass('is-valid');\n expect(tuesday).toHaveClass('is-valid');\n expect(wednesday).toHaveClass('is-valid');\n expect(thursday).toHaveClass('is-valid');\n expect(friday).toHaveClass('is-valid');\n expect(saturday).toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 62);\n await page.waitForChanges();\n\n // Only weekdays valid with 62\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).toHaveClass('is-valid');\n expect(tuesday).toHaveClass('is-valid');\n expect(wednesday).toHaveClass('is-valid');\n expect(thursday).toHaveClass('is-valid');\n expect(friday).toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 1);\n await page.waitForChanges();\n\n // Only Sunday valid with 1\n expect(sunday).toHaveClass('is-valid');\n expect(monday).not.toHaveClass('is-valid');\n expect(tuesday).not.toHaveClass('is-valid');\n expect(wednesday).not.toHaveClass('is-valid');\n expect(thursday).not.toHaveClass('is-valid');\n expect(friday).not.toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 2);\n await page.waitForChanges();\n\n // Only Monday valid with 2\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).toHaveClass('is-valid');\n expect(tuesday).not.toHaveClass('is-valid');\n expect(wednesday).not.toHaveClass('is-valid');\n expect(thursday).not.toHaveClass('is-valid');\n expect(friday).not.toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 4);\n await page.waitForChanges();\n\n // Only Tuesday valid with 4\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).not.toHaveClass('is-valid');\n expect(tuesday).toHaveClass('is-valid');\n expect(wednesday).not.toHaveClass('is-valid');\n expect(thursday).not.toHaveClass('is-valid');\n expect(friday).not.toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 8);\n await page.waitForChanges();\n\n // Only Wednesday valid with 8\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).not.toHaveClass('is-valid');\n expect(tuesday).not.toHaveClass('is-valid');\n expect(wednesday).toHaveClass('is-valid');\n expect(thursday).not.toHaveClass('is-valid');\n expect(friday).not.toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 16);\n await page.waitForChanges();\n\n // Only Thursday valid with 16\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).not.toHaveClass('is-valid');\n expect(tuesday).not.toHaveClass('is-valid');\n expect(wednesday).not.toHaveClass('is-valid');\n expect(thursday).toHaveClass('is-valid');\n expect(friday).not.toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 32);\n await page.waitForChanges();\n\n // Only Friday valid with 32\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).not.toHaveClass('is-valid');\n expect(tuesday).not.toHaveClass('is-valid');\n expect(wednesday).not.toHaveClass('is-valid');\n expect(thursday).not.toHaveClass('is-valid');\n expect(friday).toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 64);\n await page.waitForChanges();\n\n // Only Saturday valid with 64\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).not.toHaveClass('is-valid');\n expect(tuesday).not.toHaveClass('is-valid');\n expect(wednesday).not.toHaveClass('is-valid');\n expect(thursday).not.toHaveClass('is-valid');\n expect(friday).not.toHaveClass('is-valid');\n expect(saturday).toHaveClass('is-valid');\n });\n\n it('validates against validDates', async () => {\n page = await setup({\n html: `\n <q2-calendar value=${date} days-of-week-checksum=\"127\"></q2-calendar>\n `,\n });\n\n const validDates = [\n '2017-02-01',\n '2017-02-10',\n '2017/02/21', // Non-ISO 8601 string\n ];\n\n calendar = await page.find('q2-calendar');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const dateElements = await page.findAll('q2-calendar >>> td:not([aria-hidden])');\n const first = dateElements[0];\n const second = dateElements[1];\n const third = dateElements[2];\n const fourth = dateElements[3];\n const fifth = dateElements[4];\n const sixth = dateElements[5];\n const seventh = dateElements[6];\n const tenth = dateElements[9];\n const twentyFirst = dateElements[20];\n\n // All days valid with checksum\n expect(first).toHaveClass('is-valid');\n expect(second).toHaveClass('is-valid');\n expect(third).toHaveClass('is-valid');\n expect(fourth).toHaveClass('is-valid');\n expect(fifth).toHaveClass('is-valid');\n expect(sixth).toHaveClass('is-valid');\n expect(seventh).toHaveClass('is-valid');\n expect(tenth).toHaveClass('is-valid');\n expect(twentyFirst).toHaveClass('is-valid');\n\n calendar.setProperty('validDates', validDates);\n await page.waitForChanges();\n\n // validDates takes precedence over checksum\n expect(first).toHaveClass('is-valid');\n expect(second).not.toHaveClass('is-valid');\n expect(third).not.toHaveClass('is-valid');\n expect(fourth).not.toHaveClass('is-valid');\n expect(fifth).not.toHaveClass('is-valid');\n expect(sixth).not.toHaveClass('is-valid');\n expect(seventh).not.toHaveClass('is-valid');\n expect(tenth).toHaveClass('is-valid');\n expect(twentyFirst).toHaveClass('is-valid');\n });\n\n it('prioritizes invalidDates over checksum and validDates', async () => {\n page = await setup({\n html: `\n <q2-calendar value=${date} days-of-week-checksum=\"127\"></q2-calendar>\n `,\n });\n\n const validDates = [\n '2017-02-01',\n '2017-02-10',\n '2017/02/21', // Non-ISO 8601 string\n ];\n\n const invalidDates = [\n '2017-02-10',\n '2017/02/21', // Non-ISO 8601 string\n ];\n\n calendar = await page.find('q2-calendar');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const dateElements = await page.findAll('q2-calendar >>> td:not([aria-hidden])');\n const first = dateElements[0];\n const tenth = dateElements[9];\n const twentyFirst = dateElements[20];\n\n // All days valid with checksum\n expect(first).toHaveClass('is-valid');\n expect(tenth).toHaveClass('is-valid');\n expect(twentyFirst).toHaveClass('is-valid');\n\n calendar.setProperty('invalidDates', invalidDates);\n await page.waitForChanges();\n\n // invalidDates overrides checksum\n expect(first).toHaveClass('is-valid');\n expect(tenth).not.toHaveClass('is-valid');\n expect(twentyFirst).not.toHaveClass('is-valid');\n\n calendar.setProperty('invalidDates', []);\n calendar.setProperty('validDates', validDates);\n await page.waitForChanges();\n\n // Selected days valid with validDates\n expect(first).toHaveClass('is-valid');\n expect(tenth).toHaveClass('is-valid');\n expect(twentyFirst).toHaveClass('is-valid');\n\n calendar.setProperty('invalidDates', invalidDates);\n await page.waitForChanges();\n\n // invalidDates overrides validDates\n expect(first).toHaveClass('is-valid');\n expect(tenth).not.toHaveClass('is-valid');\n expect(twentyFirst).not.toHaveClass('is-valid');\n });\n\n it('prioritizes validDates over checksum', async () => {\n const testDate = '2021-11-02';\n page = await setup({\n html: `\n <q2-calendar value=${testDate}></q2-calendar>\n `,\n });\n\n const validDates = [testDate];\n calendar = await page.find('q2-calendar');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const dateElements = await page.findAll('q2-calendar >>> td:not([aria-hidden])');\n\n // All days valid with checksum\n expect(dateElements[0]).toHaveClass('is-valid');\n expect(dateElements[1]).toHaveClass('is-valid');\n\n // All days invalid after setting checksum = 0\n calendar.setProperty('daysOfWeekChecksum', '0');\n await page.waitForChanges();\n expect(dateElements[0]).not.toHaveClass('is-valid');\n expect(dateElements[1]).not.toHaveClass('is-valid');\n\n // Adding testDate ( 2021-11-02, dateElements[1] ) as validDates should make it selectable\n calendar.setProperty('validDates', validDates);\n await page.waitForChanges();\n\n // Selected days valid with validDates\n expect(dateElements[0]).not.toHaveClass('is-valid');\n expect(dateElements[1]).toHaveClass('is-valid');\n });\n\n it('does not consider timezone in invalidDates', async () => {\n const holidays = [\n '2017-02-05T00:00:00.000-01:00',\n '2017-02-10T00:00:00.000-09:00',\n '2017/02/21', // Non-ISO 8601 string\n ];\n\n page = await setup({\n html: `\n <q2-calendar\n days-of-week-checksum=\"127\"\n value=${date}\n ></q2-calendar>\n `,\n });\n\n calendar = await page.find('q2-calendar');\n\n calendar.setProperty('invalidDates', holidays);\n await page.waitForChanges();\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const dayElements = await page.findAll('q2-calendar >>> td:not([aria-hidden])');\n\n // 4th should be valid\n expect(dayElements[3]).toHaveClass('is-valid');\n\n // 5th should not be valid\n expect(dayElements[4]).not.toHaveClass('is-valid');\n\n // 6th should be valid\n expect(dayElements[5]).toHaveClass('is-valid');\n\n // 9th should be valid\n expect(dayElements[8]).toHaveClass('is-valid');\n\n // 10th should not be valid\n expect(dayElements[9]).not.toHaveClass('is-valid');\n\n // 11th should be valid\n expect(dayElements[10]).toHaveClass('is-valid');\n\n // 20th should be valid\n expect(dayElements[19]).toHaveClass('is-valid');\n\n // 21st should not be valid\n expect(dayElements[20]).not.toHaveClass('is-valid');\n\n // 22nd should be valid\n expect(dayElements[21]).toHaveClass('is-valid');\n });\n\n it('decorates current selected day', async () => {\n const today = new Date();\n const todayISO = formatISO(today, { representation: 'date' });\n\n page = await setup({\n html: `\n <q2-calendar\n days-of-week-checksum=\"127\"\n start-date=${todayISO}\n end-date=${todayISO}\n ></q2-calendar>\n `,\n });\n\n await setTestStrings(page, {\n 'tecton.element.calendar.today': 'Today',\n 'tecton.element.calendar.selected': 'Selected',\n });\n\n calendar = await page.find('q2-calendar');\n\n calendar.setProperty('value', todayISO);\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const currentDay = await page.find(`q2-calendar >>> td[data-day=\"${today.getDate()}\"]`);\n const todayDecorator = await currentDay.find('.today-decorator');\n const activityDecorator = await currentDay.find('.activity-decorator');\n const currentDayInner = await currentDay.find('[aria-label]');\n\n const currentDayAriaLabel = await currentDayInner.getProperty('ariaLabel');\n expect(currentDayAriaLabel).toEqual(`Today, ${format(today, 'EEEE, MMMM d, yyyy')} (Selected)`);\n expect(await currentDay.getProperty('ariaSelected')).toEqual('true');\n expect(await currentDay.getProperty('disabled')).toBeUndefined();\n expect(currentDay).toHaveClasses(['is-today', 'is-selected', 'is-valid', 'is-start-date', 'is-end-date']);\n expect(todayDecorator).not.toBeNull();\n expect(todayDecorator.innerText).toEqual('Today');\n expect(activityDecorator).toBeNull();\n });\n\n it('should have default error handler add and default success handler remove \"invalid error\" message to errors array when provided value fails or passes validation', async () => {\n page = await setup({\n html: `\n <q2-calendar\n days-of-week-checksum=\"62\"\n value=\"2019/08/033\"\n ></q2-calendar>\n `,\n });\n\n calendar = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> q2-input');\n let inputErrors = await innerInput.getProperty('errors');\n\n expect(inputErrors.length).toEqual(1);\n expect(inputErrors[0]).toEqual('tecton.element.calendar.hint.invalidDate');\n\n calendar.setProperty('value', '2019/08/02');\n\n await page.waitForChanges();\n\n inputErrors = await innerInput.getProperty('errors');\n\n expect(inputErrors.length).toEqual(0);\n\n calendar.setProperty('errors', ['test error']);\n calendar.setProperty('value', '2019/08/333');\n\n await page.waitForChanges();\n\n inputErrors = await innerInput.getProperty('errors');\n\n // added internal error combines after passed errors and does not replace\n expect(inputErrors.length).toEqual(2);\n expect(inputErrors[0]).toEqual('test error');\n expect(inputErrors[1]).toEqual('tecton.element.calendar.hint.invalidDate');\n\n calendar.setProperty('value', '2019/08/02');\n\n await page.waitForChanges();\n\n inputErrors = await innerInput.getProperty('errors');\n\n // when date becomes valid and internal error is removed passed errors remain\n expect(inputErrors.length).toEqual(1);\n expect(inputErrors[0]).toEqual('test error');\n });\n\n it('should emit error event when date validation fails and success event when validation passes', async () => {\n page = await setup({\n html: `\n <q2-calendar\n days-of-week-checksum=\"62\"\n value=\"2019/08/052\"\n ></q2-calendar>\n `,\n });\n\n calendar = await page.find('q2-calendar');\n const errorSpy = await calendar.spyOnEvent('error');\n const successSpy = await calendar.spyOnEvent('success');\n\n expect(errorSpy).toHaveReceivedEventTimes(0);\n\n calendar.setProperty('value', '2019/08/038');\n\n await page.waitForChanges();\n\n expect(errorSpy).toHaveReceivedEventTimes(1);\n expect(successSpy).toHaveReceivedEventTimes(0);\n\n calendar.setProperty('value', '2019/08/045');\n\n await page.waitForChanges();\n\n // fires event on value change even if previous event was also invalid\n expect(errorSpy).toHaveReceivedEventTimes(2);\n expect(successSpy).toHaveReceivedEventTimes(0);\n\n calendar.setProperty('value', '2019/08/05');\n\n await page.waitForChanges();\n\n // does not fire the event on valid date changes\n expect(errorSpy).toHaveReceivedEventTimes(2);\n expect(successSpy).toHaveReceivedEventTimes(1);\n\n calendar.setProperty('daysOfWeekChecksum', '1');\n\n await page.waitForChanges();\n\n // recalculates validity and fires on validation change\n expect(errorSpy).toHaveReceivedEventTimes(3);\n expect(successSpy).toHaveReceivedEventTimes(1);\n });\n\n it('should not add or remove error when error and success are passed', async () => {\n page = await setup({\n html: `\n <q2-calendar\n days-of-week-checksum=\"62\"\n value=\"2019/08/02\"\n ></q2-calendar>\n `,\n });\n\n const errorHandler = jest.fn();\n const successHandler = jest.fn();\n\n await page.exposeFunction('errorHandler', errorHandler);\n await page.exposeFunction('successHandler', successHandler);\n await page.$eval('q2-calendar', function (cal) {\n (cal as HTMLElement).onerror = errorHandler;\n (cal as any).onsuccess = successHandler;\n });\n\n calendar = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> q2-input');\n let inputErrors = await innerInput.getProperty('errors');\n\n expect(inputErrors.length).toEqual(0);\n\n calendar.setProperty('value', '2019/08/02');\n\n await page.waitForChanges();\n\n inputErrors = await innerInput.getProperty('errors');\n\n expect(inputErrors.length).toEqual(0);\n\n calendar.setProperty('errors', ['test error']);\n calendar.setProperty('value', '2019/08/03');\n\n await page.waitForChanges();\n\n inputErrors = await innerInput.getProperty('errors');\n\n expect(await calendar.getProperty('errors')).toEqual(['test error']);\n expect(inputErrors.length).toEqual(1);\n expect(inputErrors[0]).toEqual('test error');\n\n calendar.setProperty('value', '2019/08/02');\n\n await page.waitForChanges();\n\n inputErrors = await innerInput.getProperty('errors');\n\n // when date becomes valid and internal error is removed passed errors remain\n expect(inputErrors.length).toEqual(1);\n expect(inputErrors[0]).toEqual('test error');\n });\n\n describe('setting value', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar value=\"2015/2/15\"></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> q2-input');\n\n expect(await innerInput.getProperty('value')).toEqual('02/15/2015');\n });\n\n it('accepts string', async () => {\n calendar.setProperty('value', '2025/5/15');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('05/15/2025');\n });\n\n it('accepts ISO string', async () => {\n calendar.setProperty('value', '2025-05-15');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('05/15/2025');\n });\n\n it('accepts null', async () => {\n calendar.setProperty('value', null);\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('');\n });\n\n it('accepts moment object', async () => {\n await page.$eval('q2-calendar', (element: HTMLQ2CalendarElement) => {\n const momentLikeObject = { toDate: () => new Date('05/15/2025') };\n element.value = momentLikeObject;\n });\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('05/15/2025');\n });\n });\n\n describe('when clearable', () => {\n let clearButton;\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar value=\"02/15/2015\" clearable></q2-calendar>`,\n });\n innerInput = await page.find('q2-calendar >>> q2-input');\n clearButton = await page.find('q2-calendar >>> q2-input >>> [test-id=\"clearButton\"]');\n expect(await innerInput.getProperty('value')).toEqual('02/15/2015');\n });\n\n it('should show clear button', async () => {\n expect(clearButton).toBeTruthy();\n });\n\n it('should have clearable attribute in innerInput', async () => {\n expect(await innerInput.getProperty('clearable')).toBeTruthy();\n });\n });\n\n describe('Deprecations', () => {\n it('handles deprecated `popDirection` prop', async () => {\n page = await setup({\n html: `\n <q2-calendar pop-direction=\"up\"></q2-calendar>\n `,\n });\n await page.waitForChanges();\n calendar = await page.find('q2-calendar');\n expect(await calendar.getProperty('popDirection')).toEqual('up');\n expect(await calendar.getProperty('popoverDirection')).toEqual('up');\n\n await calendar.setProperty('popDirection', 'down');\n await page.waitForChanges();\n\n expect(await calendar.getProperty('popDirection')).toEqual('down');\n expect(await calendar.getProperty('popoverDirection')).toEqual('down');\n });\n\n it('handles deprecated `ariaLabel` prop', async () => {\n const label = 'My Label';\n page = await setup({ html: `<q2-calendar aria-label=\"${label}\"></q2-calendar>` });\n await page.waitForChanges();\n await testDeprecatedAriaLabel(await page.find('q2-calendar'), label);\n innerInput = await page.find('q2-calendar >>> q2-input');\n expect(innerInput).toEqualAttribute('label', label);\n expect(innerInput).toHaveAttribute('hide-label');\n });\n });\n\n describe('Regressions', () => {\n describe('TCT-2409 - Unexpected event emitted from nested q2-input on blur', () => {\n it('does not emit a change event on blur when the value is set dynamically', async () => {\n page = await setup({ html: `<q2-calendar></q2-calendar>` });\n calendar = await page.find('q2-calendar');\n const changeSpy = await calendar.spyOnEvent('change');\n\n expect(changeSpy).toHaveReceivedEventTimes(0);\n\n await calendar.setProperty('value', '02/04/2020');\n await page.waitForChanges();\n await dispatchEvent(page, ['q2-calendar', 'q2-input', 'button'], 'blur');\n\n expect(changeSpy).toHaveReceivedEventTimes(0);\n });\n\n describe('when typeable', () => {\n it('does not emit a change event on blur when the value is set dynamically', async () => {\n page = await setup({ html: `<q2-calendar typeable></q2-calendar>` });\n calendar = await page.find('q2-calendar');\n const changeSpy = await calendar.spyOnEvent('change');\n\n expect(changeSpy).toHaveReceivedEventTimes(0);\n\n await calendar.setProperty('value', '02/04/2020');\n await page.waitForChanges();\n await dispatchEvent(page, ['q2-calendar', 'q2-input', 'input'], 'blur');\n\n expect(changeSpy).toHaveReceivedEventTimes(0);\n });\n });\n });\n });\n\n describe('Accessibility', () => {\n describe('aXe DevTools', () => {\n it('does not have accessibility violations', async () => {\n const page = await setup({\n html: `<q2-calendar\n value=${date}\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"></q2-calendar>`,\n });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n describe('Accessibility Tree', () => {});\n describe('Keyboard Controls', () => {\n let page: E2EPage;\n let calendar: E2EElement;\n let table: E2EElement;\n let input: E2EElement;\n\n const getFocusedDate = async (page: E2EPage) =>\n page.$eval('q2-calendar', (element: HTMLElement) =>\n element.shadowRoot.activeElement.getAttribute('data-date')\n );\n const getIsoDate = (dateToFormat: Date) => formatISO(dateToFormat, { representation: 'date' });\n const getFormattedDate = (dateToFormat: Date) => format(dateToFormat, 'MM/dd/yyyy');\n const getPureDate = (dateToPurify?: string) =>\n removeTimezoneOffset(dateToPurify ? new Date(dateToPurify) : new Date());\n const getPureIsoDate = (dateToPurify?: string) => getIsoDate(getPureDate(dateToPurify));\n const getPureFormattedDate = (dateToPurify?: string) => getFormattedDate(getPureDate(dateToPurify));\n\n describe('when input has focus', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n popover = await page.find('q2-calendar >>> q2-popover');\n input = await page.find(\"q2-calendar >>> [test-id='inputAndCalendarToggle']\");\n\n expect(popover).not.toHaveAttribute('open');\n await input.focus();\n });\n\n it('opens the dialog, and focuses the current day on Enter', async () => {\n await input.press('Enter');\n await page.waitForChanges();\n\n expect(popover).toHaveAttribute('open');\n\n const getActiveElement = async (page: E2EPage) =>\n page.evaluate(() => {\n return Array.from(document.activeElement.shadowRoot.activeElement.classList);\n });\n\n expect(await getActiveElement(page)).toContain('is-selected');\n });\n\n it('opens the dialog, and moves focus to current date on ArrowDown', async () => {\n await input.press('ArrowDown');\n await page.waitForChanges();\n await page.waitForSelector('q2-calendar >>> td:focus');\n\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedDate(page)).toEqual(getPureIsoDate());\n });\n\n describe('when input has a value', () => {\n beforeEach(async () => {\n calendar.setProperty('value', date);\n await page.waitForChanges();\n });\n\n it('opens the dialog, and moves focus to specified date on ArrowDown', async () => {\n await input.press('ArrowDown');\n await page.waitForChanges();\n\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedDate(page)).toEqual(getPureIsoDate(date));\n });\n });\n });\n\n describe('when dialog is open and input has focus', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n await page.waitForChanges();\n\n calendar = await page.find('q2-calendar');\n popover = await page.find('q2-calendar >>> q2-popover');\n input = await page.find(\"q2-calendar >>> [test-id='inputAndCalendarToggle']\");\n\n input.focus();\n await input.press('Enter');\n await page.waitForChanges();\n expect(popover).toHaveAttribute('open');\n });\n\n it('closes the dialog, and keeps focus on input on Escape', async () => {\n await input.press('Escape');\n await page.waitForChanges();\n expect(popover).not.toHaveAttribute('open');\n expect(await innerInputTestId(page)).toEqual('inputField');\n });\n\n it('closes the dialog, and keeps focus on input on Enter', async () => {\n await input.press('Enter');\n expect(popover).not.toHaveAttribute('open');\n expect(await innerInputTestId(page)).toEqual('inputField');\n });\n });\n\n describe('when dialog is open and has focus', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n calendar = await page.find('q2-calendar');\n table = await page.find('q2-calendar >>> table');\n popover = await page.find('q2-calendar >>> q2-popover');\n input = await page.find(\"q2-calendar >>> [test-id='inputAndCalendarToggle']\");\n\n await calendar.setProperty('value', date);\n await page.waitForChanges();\n\n await dispatchEvent(page, ['q2-calendar', \"[test-id='inputAndCalendarToggle']\"], 'keydown', {\n key: 'ArrowDown',\n });\n\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedDate(page)).toEqual(getPureIsoDate(date));\n });\n\n it('closes the dialog, and moves focus to input on Escape', async () => {\n await table.press('Escape');\n await page.waitForChanges();\n expect(popover).not.toHaveAttribute('open');\n });\n\n describe('when calendar grid has focus', () => {\n it('sets the value, and focuses input on Space', async () => {\n await table.press('Space');\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual(getPureFormattedDate(date));\n expect(popover).not.toHaveAttribute('open');\n });\n it('sets the value, closes the dialog, and focuses input on Enter', async () => {\n await table.press('Enter');\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual(getPureFormattedDate(date));\n expect(popover).not.toHaveAttribute('open');\n });\n it('moves focus to the same day of the previous week on ArrowUp', async () => {\n await table.press('ArrowUp');\n await page.waitForChanges();\n const expectedDate = addDays(getPureDate(date), -7);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('moves focus to the same day of the next week on ArrowDown', async () => {\n await table.press('ArrowDown');\n await page.waitForChanges();\n const expectedDate = addDays(getPureDate(date), 7);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('moves focus to the next day on ArrowRight', async () => {\n await table.press('ArrowRight');\n await page.waitForChanges();\n const expectedDate = addDays(getPureDate(date), 1);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('moves focus to the previous day on ArrowLeft', async () => {\n await table.press('ArrowLeft');\n await page.waitForChanges();\n const expectedDate = addDays(getPureDate(date), -1);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('moves focus to the first day of the week on Home', async () => {\n await table.press('Home');\n await page.waitForChanges();\n const expectedDate = addDays(getPureDate(date), -3);\n expect(expectedDate.getDay()).toEqual(0);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('moves focus to the last day of the week on End', async () => {\n await table.press('End');\n const expectedDate = addDays(getPureDate(date), 3);\n expect(expectedDate.getDay()).toEqual(6);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('changes calendar to previous month, focuses same day of same week on PageUp', async () => {\n await table.press('PageUp');\n await page.waitForChanges();\n const initialDate = getPureDate(date);\n const expectedDate = getPureDate('2017-01-04');\n expect(initialDate.getDay()).toEqual(expectedDate.getDay());\n expect(getWeekOfMonth(initialDate)).toEqual(getWeekOfMonth(expectedDate));\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('changes calendar to next month, focuses same day of same week on PageDown', async () => {\n await table.press('PageDown');\n await page.waitForChanges();\n const initialDate = getPureDate(date);\n const expectedDate = getPureDate('2017-03-01');\n expect(initialDate.getDay()).toEqual(expectedDate.getDay());\n expect(getWeekOfMonth(initialDate)).toEqual(getWeekOfMonth(expectedDate));\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('changes calendar to next month, and focuses the closest available day PageDown', async () => {\n await calendar.setProperty('value', '2017-03-01');\n await page.waitForChanges();\n expect(await getFocusedDate(page)).toEqual(getPureIsoDate('2017-03-01'));\n await table.press('PageDown');\n await page.waitForChanges();\n const expectedDate = getPureDate('2017-04-01');\n expect(expectedDate.getDay()).toEqual(6);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('changes calendar to previous month, and focuses the closest available day PageUp', async () => {\n await calendar.setProperty('value', '2017-06-30');\n await page.waitForChanges();\n const lastDayOfMonth = await page.find(\"q2-calendar >>> td[data-day='30']\");\n await lastDayOfMonth.focus();\n await table.press('PageUp');\n await page.waitForChanges();\n const expectedDate = getPureDate('2017-05-31');\n expect(expectedDate.getDay()).toEqual(3);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('changes calendar to previous year, focuses same day of same week on Shift+PageUp', async () => {\n await page.keyboard.down('Shift');\n await table.press('PageUp');\n await page.waitForChanges();\n const initialDate = getPureDate(date);\n const expectedDate = getPureDate('2016-02-03');\n expect(initialDate.getDay()).toEqual(expectedDate.getDay());\n expect(getWeekOfMonth(initialDate)).toEqual(getWeekOfMonth(expectedDate));\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('changes calendar to next year, focuses same day of same week on Shift+PageDown', async () => {\n await page.keyboard.down('Shift');\n await table.press('PageDown');\n await page.waitForChanges();\n const initialDate = getPureDate(date);\n const expectedDate = getPureDate('2018-02-01');\n expect(expectedDate.getDay()).toEqual(4);\n expect(getWeekOfMonth(initialDate)).toEqual(getWeekOfMonth(expectedDate));\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n });\n });\n });\n describe('Other', () => {});\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"q2-calendar-test.e2e.js","sourceRoot":"","sources":["../../../../../src/components/q2-calendar/test/q2-calendar-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n setTestStrings,\n setup,\n dispatchEvent,\n testDeprecatedAriaLabel,\n getActiveElementTestId,\n getListOfStyleCompilationIssues,\n evaluateA11y,\n} from '@/utils/helpers';\nimport { getWeekOfMonth, addDays, format, formatISO, parseISO } from 'date-fns';\nimport { E2EElement, E2EPage } from '@stencil/core/testing';\nimport { removeTimezoneOffset } from '../q2-calendar-helpers';\nimport { Q2Calendar } from '../q2-calendar';\n\ndescribe('q2-calendar', () => {\n let page: E2EPage;\n let message: E2EElement;\n let calendar: E2EElement;\n let date: string;\n let innerInput: E2EElement;\n let popover: E2EElement;\n let table: E2EElement;\n let calendarButton: E2EElement;\n const isInvalidErrorString: string = 'tecton.element.calendar.invalid';\n\n const innerInputTestId = async (page: E2EPage) => {\n return page.$eval('q2-calendar', el => {\n return el.shadowRoot.querySelector('q2-input').shadowRoot.activeElement?.getAttribute('test-id');\n });\n };\n\n beforeEach(function () {\n date = '2017-02-01';\n });\n\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-calendar></q2-calendar>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-calendar')).toHaveLength(0);\n });\n\n describe('[A11y] guideline compliance', () => {\n it('Does not have accessibility violations', async () => {\n const page = await setup({\n html: `<q2-calendar label=\"Date\"></q2-calendar>`,\n });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n\n it('renders the component in the dom', async () => {\n page = await setup({ html: `<q2-calendar></q2-calendar>` });\n\n const calendarContainer = await page.find('q2-calendar >>> click-elsewhere');\n expect(calendarContainer).not.toBeNull();\n });\n\n it('sets properties on nested q2-input', async () => {\n page = await setup({\n html: `\n <q2-calendar\n value=${date}\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n ></q2-calendar>`,\n });\n\n let innerInput: any = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n const inputProps = {\n iconRight: q2Input.iconRight,\n _role: q2Input._role,\n _preventEntry: q2Input._preventEntry,\n pseudo: q2Input.pseudo,\n hideMessages: q2Input.hideMessages,\n hideLabel: q2Input.hideLabel,\n value: q2Input.value,\n label: q2Input.label,\n ariaLabel: q2Input.ariaLabel,\n disabled: q2Input.disabled,\n optional: q2Input.optional,\n errors: q2Input.errors,\n };\n\n return inputProps;\n });\n\n // Constants for all calendars\n expect(innerInput.iconRight).toEqual('calendar');\n expect(innerInput.pseudo).toEqual(undefined);\n expect(innerInput._role).toEqual('combobox');\n expect(innerInput._preventEntry).toEqual(true);\n expect(innerInput.hideMessages).toEqual(true);\n\n // Dependent on props\n const reformattedDate = format(parseISO(date), 'MM/dd/yyyy');\n expect(innerInput.value).toEqual(reformattedDate);\n expect(innerInput.label).toEqual('Calendar Label');\n expect(innerInput.hideLabel).toEqual(undefined);\n expect(innerInput.ariaLabel).toEqual(undefined);\n expect(innerInput.disabled).toEqual(false);\n expect(innerInput.optional).toEqual(false);\n expect(innerInput.errors).toEqual([]);\n\n calendar = await page.find('q2-calendar');\n\n calendar.setProperty('label', undefined);\n calendar.setProperty('disabled', true);\n calendar.setProperty('ariaLabel', 'Calendar Aria-Label');\n calendar.setProperty('optional', true);\n calendar.setProperty('errors', ['Error #1']);\n\n await page.waitForChanges();\n innerInput = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n const inputProps = {\n label: q2Input.label,\n ariaLabel: q2Input.ariaLabel,\n hideLabel: q2Input.hideLabel,\n disabled: q2Input.disabled,\n optional: q2Input.optional,\n errors: q2Input.errors,\n };\n\n return inputProps;\n });\n\n expect(innerInput.label).toEqual('Calendar Aria-Label');\n expect(innerInput.hideLabel).toEqual(true);\n expect(innerInput.ariaLabel).toEqual(undefined);\n expect(innerInput.disabled).toEqual(true);\n expect(innerInput.optional).toEqual(true);\n expect(innerInput.errors).toEqual(['Error #1']);\n });\n\n it('sets value property with moment date string', async () => {\n const mmddyyyy = '01/06/2022';\n const momentDateString = 'Thu Jan 06 2022 12:35:17 GMT-0600';\n page = await setup({\n html: `\n <q2-calendar\n value=\"${momentDateString}\"\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n ></q2-calendar>`,\n });\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n expect(await innerInput.getProperty('value')).toEqual(mmddyyyy);\n });\n\n it('gives host element an error state when invalid is set', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n calendar.setProperty('invalid', true);\n await page.waitForChanges();\n const inputProps: any = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n const inputProps = {\n errors: q2Input.errors,\n };\n return inputProps;\n });\n expect(inputProps.errors).toHaveLength(1);\n expect(inputProps.errors).toEqual([isInvalidErrorString]);\n });\n\n it('host element should not have errors when invalid is not set', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n const innerInputErrors: string[] = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n return q2Input.errors || [];\n });\n\n expect(innerInputErrors).toHaveLength(0);\n });\n\n it('actual errors should take precedence over invalid tag', async () => {\n const errors = ['Error #1'];\n\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n calendar = await page.find('q2-calendar');\n calendar.setProperty('errors', errors);\n await page.waitForChanges();\n\n let innerInputErrors: string[] = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n return q2Input.errors || [];\n });\n\n expect(innerInputErrors).toHaveLength(1);\n expect(innerInputErrors).toEqual(errors);\n\n calendar.setProperty('invalid', true);\n\n await page.waitForChanges();\n\n innerInputErrors = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n return q2Input.errors || [];\n });\n\n expect(innerInputErrors).toHaveLength(1);\n expect(innerInputErrors).toEqual(errors);\n\n calendar.setProperty('errors', []);\n\n await page.waitForChanges();\n\n innerInputErrors = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n return q2Input.errors || [];\n });\n\n expect(innerInputErrors).toHaveLength(1);\n expect(innerInputErrors).toEqual([isInvalidErrorString]);\n\n calendar.setProperty('invalid', false);\n await page.waitForChanges();\n\n innerInputErrors = await page.$eval('q2-calendar', element => {\n const q2Input = element.shadowRoot.querySelector(\n '[test-id=\"inputAndCalendarToggle\"]'\n ) as unknown as HTMLQ2InputElement;\n\n return q2Input.errors || [];\n });\n\n expect(innerInputErrors).toHaveLength(0);\n });\n\n it('allows the user to select a date using the mouse', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n await page.waitForChanges();\n\n const calendarContainer = await page.find('q2-calendar >>> click-elsewhere');\n expect(calendarContainer.classList.contains('dropdown-open')).toEqual(true);\n\n let message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(message.textContent).toEqual('tecton.element.calendar.hint.select');\n\n const day = await page.find('q2-calendar >>> td:not([aria-disabled=\"true\"])');\n expect(day).not.toBeNull();\n\n await day.click();\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n\n expect(message).toBeNull();\n expect(calendarContainer.classList.contains('dropdown-open')).toEqual(false);\n });\n\n describe('Getters', () => {\n let specCalendar: Q2Calendar;\n beforeEach(() => {\n specCalendar = new Q2Calendar();\n });\n\n describe('errorList', () => {\n it('returns an empty array by default', async () => {\n expect(specCalendar.errorList).toEqual([]);\n });\n\n it('returns a standard message when invalid is true', async () => {\n specCalendar.invalid = true;\n expect(specCalendar.errorList).toEqual(['tecton.element.calendar.invalid']);\n });\n\n it('returns validation error message over the invalid message when provided', async () => {\n specCalendar.setHints({\n isValid: false,\n messageType: 'error',\n message: 'tecton.element.calendar.hint.invalidDate',\n });\n expect(specCalendar.invalid).toBe(true);\n expect(specCalendar.errorList).toEqual(['tecton.element.calendar.hint.invalidDate']);\n });\n\n it('returns errors content over all other error messages', async () => {\n specCalendar.setHints({\n isValid: false,\n messageType: 'error',\n message: 'tecton.element.calendar.hint.invalidDate',\n });\n specCalendar.errors = ['My custom error'];\n expect(specCalendar.invalid).toBe(true);\n expect(specCalendar.errorList).toEqual(['My custom error', 'tecton.element.calendar.hint.invalidDate']);\n });\n });\n\n describe('hintList', () => {\n it('returns a standard hint message by default', async () => {\n expect(specCalendar.hintList).toEqual(['tecton.element.calendar.hint.select']);\n });\n\n it('returns empty array when hint messages are cleared', async () => {\n specCalendar.setHints({\n isValid: false,\n messageType: null,\n message: null,\n });\n expect(specCalendar.hintList).toEqual([]);\n });\n\n it('returns validation hint message when provided', async () => {\n specCalendar.setHints({\n isValid: false,\n messageType: 'info',\n message: 'tecton.element.calendar.hint.format',\n });\n expect(specCalendar.hintList).toEqual(['tecton.element.calendar.hint.format']);\n });\n\n it('returns hints content over all other messages', async () => {\n specCalendar.setHints({\n isValid: false,\n messageType: 'info',\n message: 'tecton.element.calendar.hint.format',\n });\n specCalendar.hints = ['My custom hint'];\n expect(specCalendar.hintList).toEqual(['My custom hint']);\n });\n });\n });\n\n describe('Props', () => {\n describe('popoverDirection', () => {\n describe('when provided', () => {\n it('respects a value of \"down\" no matter the position in viewport', async () => {\n page = await setup({\n html: `<q2-calendar popover-direction=\"down\" style=\"position:fixed; bottom: 100px\"/>`,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(popover).toEqualAttribute('direction', 'down');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n expect(popover.shadowRoot.querySelector('.container')).toHaveClass('down');\n expect(popover.shadowRoot.querySelector('.container')).not.toHaveClass('up');\n });\n it('respects a value of \"up\" no matter the position in viewport', async () => {\n page = await setup({\n html: `<q2-calendar popover-direction=\"up\"/>`,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(popover).toEqualAttribute('direction', 'up');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n const popoverContainer = popover.shadowRoot.querySelector('.container');\n expect(popoverContainer).not.toHaveClass('down');\n expect(popoverContainer).toHaveClass('up');\n });\n });\n\n describe('when not provided', () => {\n it('auto-determines the direction to be \"down\" when element is on upper half of page', async () => {\n page = await setup({\n html: `<q2-calendar style=\"position: fixed; top: 10px;\" />`,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(popover).not.toHaveAttribute('direction');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n const popoverContainer = popover.shadowRoot.querySelector('.container');\n expect(popoverContainer).not.toHaveClass('up');\n expect(popoverContainer).toHaveClass('down');\n });\n\n it('auto-determines the direction to be \"up\" when element is on lower half of page', async () => {\n page = await setup({\n html: `<q2-calendar style=\"position: fixed; bottom: 10px;\" />`,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(popover).not.toHaveAttribute('direction');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n const popoverContainer = popover.shadowRoot.querySelector('.container');\n expect(popoverContainer).not.toHaveClass('down');\n expect(popoverContainer).toHaveClass('up');\n });\n });\n });\n describe('popoverAlignment', () => {\n describe('when not provided (default)', () => {\n it('uses popover default alignment', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(await popover.getProperty('align')).toBe('left');\n });\n });\n\n describe('when provided', () => {\n it('passes the value to the popover', async () => {\n page = await setup({\n html: `<q2-calendar popover-alignment=\"right\"></q2-calendar>`,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(await popover.getProperty('align')).toEqual('right');\n });\n });\n });\n describe('popoverMode', () => {\n it('does not set any mode on the popover (default)', async () => {\n const page = await setup({\n html: `\n <q2-calendar></q2-calendar>\n `,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(await popover.getProperty('mode')).toBeNull();\n });\n\n it('sets the value of popoverMode as the mode on the popover', async () => {\n const page = await setup({\n html: `\n <q2-calendar popover-mode=\"legacy\"></q2-calendar>\n `,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n expect(await popover.getProperty('mode')).toEqual('legacy');\n });\n });\n describe('readonly', () => {\n let page;\n const readonlyText = '(read only)';\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar label=\"label text\" value=\"2015/2/15\"></q2-calendar>`,\n });\n await setTestStrings(page, {\n 'tecton.element.input.readonly': readonlyText,\n });\n popover = await page.find('q2-calendar >>> q2-popover');\n });\n\n it('when readonly, label text should include (read only) ', async () => {\n const element = await page.find('q2-calendar');\n await element.setProperty('readonly', true);\n await page.waitForChanges();\n const input = await page.find('q2-calendar >>> q2-input');\n const label = await input.shadowRoot.querySelector('label');\n expect(label.textContent).toEqual(`label text${readonlyText}`);\n });\n\n it('when readonly, click should not work to open calendar', async () => {\n const element = await page.find('q2-calendar');\n await element.setProperty('readonly', true);\n await page.waitForChanges();\n await element.click();\n expect(popover).not.toHaveAttribute('open');\n });\n\n it('when readonly, pressing Space key should not work to open calendar', async () => {\n const element = await page.find('q2-calendar');\n await element.setProperty('readonly', true);\n await page.waitForChanges();\n await dispatchEvent(page, ['q2-calendar', 'q2-input'], 'keydown', {\n key: ' ',\n });\n expect(popover).not.toHaveAttribute('open');\n });\n\n it('when readonly, pressing Enter key should not work to open calendar', async () => {\n const element = await page.find('q2-calendar');\n await element.setProperty('readonly', true);\n await page.waitForChanges();\n await dispatchEvent(page, ['q2-calendar', 'q2-input'], 'keydown', {\n key: 'Enter',\n });\n expect(popover).not.toHaveAttribute('open');\n });\n });\n\n describe('typeable', () => {\n describe('when false (default)', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n });\n\n it('renders but does not display hint message', async () => {\n expect(message).toHaveClass('sr');\n expect(innerInput).toHaveAttribute('hide-messages');\n });\n\n it('updates the hint message when set to true', async () => {\n expect(message.textContent).toEqual('tecton.element.calendar.hint.select');\n\n calendar = await page.find('q2-calendar');\n calendar.setProperty('typeable', true);\n await page.waitForChanges();\n\n expect(message.textContent).toEqual('tecton.element.calendar.hint.format: mm/dd/yyyy');\n });\n });\n\n describe('when true', () => {\n describe('when value is not present', () => {\n let calendarField;\n\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-calendar\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n typeable\n ></q2-calendar>\n `,\n });\n\n calendarField = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n popover = await page.find('q2-calendar >>> q2-popover');\n table = await page.find('q2-calendar >>> table');\n calendarButton = await page.find('q2-calendar >>> q2-btn');\n });\n\n const enterIvalidDate = async () => {\n await calendarField.setProperty('endDate', '2022-12-15');\n await innerInput.click();\n await innerInput.type('12/31/2022');\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n\n expect(messageHint).toEqualAttribute('type', 'error');\n expect(calendarField).toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toBeUndefined();\n\n await calendarButton.click();\n await page.waitForChanges();\n const day = await page.find('q2-calendar >>> td:not([aria-disabled=\"true\"])');\n\n expect(day).not.toBeNull();\n\n return day;\n };\n\n it('renders message without sr class', async () => {\n const message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(message).toHaveClass('sr');\n expect(innerInput).not.toHaveAttribute('hide-messages');\n });\n\n it('supports valid date', async () => {\n await innerInput.click();\n await innerInput.type('10222021');\n await innerInput.press('Enter');\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message).toBeNull();\n expect(await calendarField.getProperty('value')).toEqual('2021-10-22');\n expect(await calendarField.getProperty('value')).toEqual('2021-10-22');\n });\n\n it('marks field as invalid when an invalid date is typed', async () => {\n await innerInput.click();\n await innerInput.type('22222021');\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n expect(messageHint).toEqualAttribute('type', 'error');\n expect(calendarField).toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toBeUndefined();\n });\n\n it('marks field as invalid when an unavailable date is typed ( weekend with checksum 62 )', async () => {\n await calendarField.setProperty('daysOfWeekChecksum', 62);\n await page.waitForChanges();\n await innerInput.click();\n await innerInput.type('10022021');\n const selectedDate = await page.find('q2-calendar >>> td.is-selected');\n expect(selectedDate).toHaveClass('is-unavailable');\n expect(calendarField).toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toBeUndefined();\n });\n\n it('marks field as valid when no value presented with firing keyup event', async () => {\n await innerInput.focus();\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'keyup', {\n key: 'Shift',\n });\n expect(calendarField).not.toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toBeUndefined();\n });\n\n it('reset the calendar when assigning empty string', async () => {\n await innerInput.click();\n await innerInput.type('3333');\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n expect(messageHint).toEqualAttribute('type', 'error');\n expect(calendarField).toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toBeUndefined();\n await calendarField.setProperty('value', '');\n await page.waitForChanges();\n expect(messageHint).toEqualAttribute('type', 'info');\n expect(calendarField).not.toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toBeUndefined();\n });\n\n it('does not display error , if month value is possible', async () => {\n await innerInput.type('10');\n expect(message.textContent).toEqual('tecton.element.calendar.hint.format: mm/dd/yyyy');\n expect(message).toEqualAttribute('type', 'info');\n });\n\n it('does not display error, if month and day values are possible', async () => {\n await innerInput.type('0122');\n await page.waitForChanges();\n expect(message.textContent).toEqual('tecton.element.calendar.hint.format: mm/dd/yyyy');\n expect(message).toEqualAttribute('type', 'info');\n });\n\n it('does display error, if month value is impossible', async () => {\n await innerInput.type('55');\n expect(message.textContent).toEqual('tecton.element.calendar.hint.invalidDate: mm/dd/yyyy');\n expect(message).toEqualAttribute('type', 'error');\n });\n\n it('does display error, if month is possible, but day value is impossible', async () => {\n await innerInput.type('0144');\n await page.waitForChanges();\n expect(message.textContent).toEqual('tecton.element.calendar.hint.invalidDate: mm/dd/yyyy');\n expect(message).toEqualAttribute('type', 'error');\n });\n\n it('does not open calendar popover when clicking input or typing', async () => {\n expect(popover).not.toHaveAttribute('open');\n\n await innerInput.type('11');\n\n expect(popover).not.toHaveAttribute('open');\n });\n\n it('does open calendar popover when clicking q2-btn inside input slot-right', async () => {\n await calendarButton.click();\n await page.waitForChanges();\n\n expect(popover).toHaveAttribute('open');\n });\n\n it('closes the popover when the input field is clicked', async () => {\n await calendarButton.click();\n await page.waitForChanges();\n\n expect(popover).toHaveAttribute('open');\n\n await calendarField.click();\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n });\n\n it('closes the popover when the input field is focused', async () => {\n await calendarButton.click();\n await page.waitForChanges();\n\n expect(popover).toHaveAttribute('open');\n\n await calendarField.focus();\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n });\n\n it('displays error for invalid date and clears the error when valid date is selected by click', async () => {\n const day = await enterIvalidDate();\n\n await day.click();\n await page.waitForChanges();\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n\n expect(messageHint).toBeNull();\n expect(calendarField).not.toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toEqual('2022-12-01');\n });\n\n it('displays error for invalid date and clears the error when valid date is selected by keyboard', async () => {\n const day = await enterIvalidDate();\n\n await day.focus();\n await table.press('Enter');\n await page.waitForChanges();\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n\n expect(messageHint).toBeNull();\n expect(calendarField).not.toHaveAttribute('invalid');\n expect(await calendarField.getProperty('value')).toEqual('2022-12-01');\n });\n });\n\n describe('when value is present', () => {\n let calendarField;\n const innerInputValue = '02/14/2020';\n const calendarValue = '2020-02-14';\n\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-calendar\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n value=\"${calendarValue}\"\n typeable\n ></q2-calendar>\n `,\n });\n\n calendarField = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n expect(await calendarField.getProperty('value')).toEqual(calendarValue);\n });\n\n it(\"inner input should have same value as q2-calendar's value(reordered) \", async () => {\n expect(await innerInput.getProperty('value')).toEqual(innerInputValue);\n });\n\n it('supports updating with a valid date', async () => {\n await innerInput.setProperty('value', ''); // clear existing default value\n await innerInput.click();\n await innerInput.type('10222021');\n await innerInput.press('Enter');\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message).toBeNull();\n expect(await calendarField.getProperty('value')).toEqual('2021-10-22');\n });\n\n describe('when typed value is invalid', () => {\n beforeEach(async () => {\n await innerInput.setProperty('value', ''); // clear existing default value\n await innerInput.click();\n await innerInput.type('22222021');\n });\n\n it('clears existing value and marks as invalid when Enter is pressed', async () => {\n await innerInput.press('Enter');\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n expect(messageHint).toEqualAttribute('type', 'error');\n expect(calendarField).toHaveAttribute('invalid');\n expect(await innerInput.getProperty('value')).toEqual('22/22/2021');\n expect(await calendarField.getProperty('value')).toBeNull();\n });\n\n it('clears existing value and marks as invalid when Tab is pressed', async () => {\n await innerInput.setProperty('value', ''); // clear existing default value\n await innerInput.focus();\n await innerInput.type('22222021');\n await innerInput.press('Tab');\n const messageHint = await page.find('q2-calendar >>> .calendar-hint');\n expect(messageHint).toEqualAttribute('type', 'error');\n expect(calendarField).toHaveAttribute('invalid');\n expect(await innerInput.getProperty('value')).toEqual('22/22/2021');\n expect(await calendarField.getProperty('value')).toBeNull();\n });\n });\n\n describe('when blur event with mm/dd typed', () => {\n let externalButton;\n let message;\n const today = new Date();\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-btn intent=\"workflow-primary\">A Button</q2-btn>\n <q2-calendar\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n typeable\n ></q2-calendar>`,\n });\n calendarField = await page.find('q2-calendar');\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n externalButton = await page.find('q2-btn');\n });\n\n it('type and fire blur event to autocomplete year on calendar input field with valid date', async () => {\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([\n 'tecton.element.calendar.hint.format: mm/dd/yyyy',\n ]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.format: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'info');\n expect(calendarField).not.toHaveAttribute('invalid');\n\n await innerInput.type('1020');\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([\n 'tecton.element.calendar.hint.format: mm/dd/yyyy',\n ]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.format: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'info');\n expect(calendarField).not.toHaveAttribute('invalid');\n\n await externalButton.click();\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(await innerInput.getProperty('value')).toEqual(`10/20/${today.getFullYear()}`);\n expect(message).toBeNull();\n expect(calendarField).not.toHaveAttribute('invalid');\n });\n\n it('type and fire blur event to autocomplete day, and year on calendar input field with valid date', async () => {\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([\n 'tecton.element.calendar.hint.format: mm/dd/yyyy',\n ]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.format: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'info');\n expect(calendarField).not.toHaveAttribute('invalid');\n\n await innerInput.type('10');\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([\n 'tecton.element.calendar.hint.format: mm/dd/yyyy',\n ]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.format: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'info');\n expect(calendarField).not.toHaveAttribute('invalid');\n\n await externalButton.click();\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message).toBeNull();\n expect(calendarField).not.toHaveAttribute('invalid');\n });\n\n it('type and fire blur event to autocomplete year on calendar input field with invalid date', async () => {\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([]);\n expect(await innerInput.getProperty('hints')).toEqual([\n 'tecton.element.calendar.hint.format: mm/dd/yyyy',\n ]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.format: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'info');\n expect(calendarField).not.toHaveAttribute('invalid');\n\n await innerInput.type('33');\n await page.waitForChanges();\n\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n\n expect(await innerInput.getProperty('errors')).toEqual([\n 'tecton.element.calendar.hint.invalidDate: mm/dd/yyyy',\n ]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.invalidDate: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'error');\n expect(calendarField).not.toHaveAttribute('valid');\n expect(calendarField).toHaveAttribute('invalid');\n\n await innerInput.type('40');\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([\n 'tecton.element.calendar.hint.invalidDate: mm/dd/yyyy',\n ]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.invalidDate: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'error');\n expect(calendarField).not.toHaveAttribute('valid');\n expect(calendarField).toHaveAttribute('invalid');\n\n await innerInput.type('56');\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint');\n expect(await innerInput.getProperty('errors')).toEqual([\n 'tecton.element.calendar.hint.invalidDate: mm/dd/yyyy',\n ]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.invalidDate: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'error');\n expect(calendarField).not.toHaveAttribute('valid');\n expect(calendarField).toHaveAttribute('invalid');\n\n await externalButton.click();\n await page.waitForChanges();\n message = await page.find('q2-calendar >>> q2-message.calendar-hint.sr');\n expect(await innerInput.getProperty('errors')).toEqual([\n 'tecton.element.calendar.hint.invalidDate: mm/dd/yyyy',\n ]);\n expect(await innerInput.getProperty('hints')).toEqual([]);\n expect(message.textContent).toEqual(`tecton.element.calendar.hint.invalidDate: mm/dd/yyyy`);\n expect(message).toEqualAttribute('type', 'error');\n expect(calendarField).toHaveAttribute('invalid');\n });\n });\n });\n\n describe('it should assume the year correctly based on today and assume value', () => {\n it('should be current year always with no assume provided', async () => {\n const today = new Date();\n const targetDate = new Date();\n targetDate.setDate(today.getDate() - 3); // 3 days before\n const [, mm, dd] = targetDate.toISOString().slice(0, 10).split('-');\n page = await setup({\n html: `\n <q2-calendar\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n days-of-week-checksum=\"127\"\n typeable\n ></q2-calendar>`,\n });\n\n const calendarField = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n await innerInput.click();\n await innerInput.type(`${mm}${dd}`);\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'keyup', {\n key: 'Escape',\n });\n expect(await innerInput.getProperty('value')).toEqual(`${mm}/${dd}/${today.getFullYear()}`);\n expect(await calendarField.getProperty('value')).toEqual(`${today.getFullYear()}-${mm}-${dd}`);\n });\n\n it('should be next year when typed value is earlier than today with assume=future', async () => {\n const today = new Date();\n const targetDate = new Date();\n targetDate.setDate(today.getDate() - 1); // 1 day before\n const [, mm, dd] = targetDate.toISOString().slice(0, 10).split('-');\n page = await setup({\n html: `\n <q2-calendar\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n assume=\"future\"\n days-of-week-checksum=\"127\"\n typeable\n ></q2-calendar>`,\n });\n\n const calendarField = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n await innerInput.click();\n await innerInput.type(`${mm}${dd}`);\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'keyup', {\n key: 'Escape',\n });\n expect(await innerInput.getProperty('value')).toEqual(`${mm}/${dd}/${today.getFullYear() + 1}`);\n expect(await calendarField.getProperty('value')).toEqual(\n `${today.getFullYear() + 1}-${mm}-${dd}`\n );\n });\n\n it('should be last year when typed value is later than today with assume=past', async () => {\n const today = new Date();\n const targetDate = new Date();\n targetDate.setDate(today.getDate() + 3); // 3 days later\n const targetOneYearAgo = new Date(targetDate);\n targetOneYearAgo.setFullYear(targetDate.getFullYear() - 1); // 1 year before\n const [, TARGET_MM, TARGET_DD] = targetDate.toISOString().slice(0, 10).split('-');\n const [YEARAGO_YYYY, YEARAGO_MM, YEARAGO_DD] = targetOneYearAgo\n .toISOString()\n .slice(0, 10)\n .split('-');\n\n page = await setup({\n html: `\n <q2-calendar\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"\n assume=\"past\"\n days-of-week-checksum=\"127\"\n typeable\n ></q2-calendar>`,\n });\n\n const calendarField = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n await innerInput.click();\n await innerInput.type(`${TARGET_MM}${TARGET_DD}`);\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'keyup', {\n key: 'Escape',\n });\n expect(await innerInput.getProperty('value')).toEqual(\n `${YEARAGO_MM}/${YEARAGO_DD}/${YEARAGO_YYYY}`\n );\n expect(await calendarField.getProperty('value')).toEqual(\n `${YEARAGO_YYYY}-${YEARAGO_MM}-${YEARAGO_DD}`\n );\n });\n });\n });\n });\n\n describe('display-format', () => {\n describe('when not provided', () => {\n it('detects when it is added after render', async () => {\n page = await setup({\n html: `<q2-calendar value=\"${date}\"></q2-calendar>`,\n });\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n expect(await innerInput.getProperty('value')).toEqual('02/01/2017');\n\n calendar = await page.find('q2-calendar');\n calendar.setProperty('displayFormat', 'YYYY-MM-DD');\n\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('2017-02-01');\n });\n });\n\n describe('when provided', () => {\n it('detects when it is added after render', async () => {\n page = await setup({\n html: `<q2-calendar value=\"${date}\" display-format=\"ll\"></q2-calendar>`,\n });\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n expect(await innerInput.getProperty('value')).toEqual('Feb 1, 2017');\n });\n\n it('detects when it is added after render', async () => {\n page = await setup({\n html: `<q2-calendar value=\"${date}\" display-format=\"MM/DD\"></q2-calendar>`,\n });\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n expect(await innerInput.getProperty('value')).toEqual('02/01');\n });\n });\n describe('when provided and blur', () => {\n it('keep the value on blur event', async () => {\n page = await setup({\n html: `<q2-calendar value=\"2024-03-06\" display-format=\"MM-DD-yyyy\"></q2-calendar>`,\n });\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n await dispatchEvent(page, ['q2-calendar', 'q2-input', 'button'], 'blur');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('03-06-2024');\n });\n });\n });\n\n describe('when typeable for clear value test', () => {\n let page;\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar typeable clearable value=\"2023-10-20\"></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> q2-input');\n expect(await innerInput.getProperty('value')).toEqual('10/20/2023');\n await innerInput.focus();\n });\n\n it('should fire change event on q2-calendar when value removed', async () => {\n const changeSpy = await calendar.spyOnEvent('change');\n expect(changeSpy).toHaveReceivedEventTimes(0);\n // remove all characters \"10/20/2023\"\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await innerInput.press('Backspace');\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventTimes(1);\n });\n\n it('should fire change event on q2-calendar when clear button clicked', async () => {\n const changeSpy = await calendar.spyOnEvent('change');\n expect(changeSpy).toHaveReceivedEventTimes(0);\n // to focus clear button\n await innerInput.focus();\n await innerInput.press('Tab');\n const innerActiveTestId = async (page: E2EPage) => {\n return page.$eval('q2-calendar', el => {\n return el.shadowRoot\n .querySelector('q2-input')\n .shadowRoot.activeElement?.getAttribute('test-id');\n });\n };\n expect(await innerActiveTestId(page)).toEqual('clearButton');\n await innerInput.press('Enter');\n expect(changeSpy).toHaveReceivedEventTimes(1);\n });\n });\n\n describe('when non-typeable, clear button should be visible and working', () => {\n let page;\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar clearable value=\"2023-10-20\"></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> q2-input');\n expect(await innerInput.getProperty('value')).toEqual('10/20/2023');\n await innerInput.focus();\n });\n\n it('should be visible clear button', async () => {\n const clearButtonTestId = async (page: E2EPage) => {\n return page.$eval('q2-calendar', el => {\n return el.shadowRoot\n .querySelector('q2-input')\n .shadowRoot.querySelector('.btn-clear')\n ?.getAttribute('test-id');\n });\n };\n expect(await clearButtonTestId(page)).toEqual('clearButton');\n });\n\n it('should fire change event on q2-calendar when clear button clicked', async () => {\n const changeSpy = await calendar.spyOnEvent('change');\n expect(changeSpy).toHaveReceivedEventTimes(0);\n\n const clickClearButton = async (page: E2EPage) => {\n return page.$eval('q2-calendar', el => {\n return (\n el.shadowRoot\n .querySelector('q2-input')\n .shadowRoot.querySelector('.btn-clear') as HTMLElement\n ).click();\n });\n };\n await clickClearButton(page);\n expect(changeSpy).toHaveReceivedEventTimes(1);\n expect(await calendar.getProperty('value')).toBeNull();\n });\n });\n });\n\n describe('Methods', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-calendar label=\"My calendar\">\n </q2-calendar>\n `,\n });\n calendar = await page.find('q2-calendar');\n popover = await page.find('q2-calendar >>> q2-popover');\n innerInput = await page.find('q2-calendar >>> [test-id=inputAndCalendarToggle]');\n });\n\n describe('openPopover', () => {\n it('opens the popover via q2-input when NOT typeable', async () => {\n const innerInputClickSpy = await innerInput.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBeUndefined();\n\n await calendar.callMethod('openPopover');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(true);\n expect(innerInputClickSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toEqual('inputAndCalendarToggle');\n });\n\n it('opens the popover via q2-btn when typeable', async () => {\n await calendar.setProperty('typeable', true);\n await page.waitForChanges();\n\n calendarButton = await page.find('q2-calendar >>> [test-id=calendarToggle]');\n const calendarButtonClickSpy = await calendarButton.spyOnEvent('click');\n\n expect(calendarButtonClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBeUndefined();\n\n await calendar.callMethod('openPopover');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(true);\n expect(calendarButtonClickSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toEqual('calendarToggle');\n });\n });\n\n describe('closePopover', () => {\n beforeEach(async () => {\n await calendar.setProperty('open', true);\n await page.waitForChanges();\n });\n\n it('opens the popover via q2-input when NOT typeable', async () => {\n const innerInputClickSpy = await innerInput.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBe(true);\n\n await calendar.callMethod('closePopover');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(false);\n expect(innerInputClickSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toEqual('inputAndCalendarToggle');\n });\n\n it('opens the popover via q2-btn when typeable', async () => {\n await calendar.setProperty('typeable', true);\n await page.waitForChanges();\n\n calendarButton = await page.find('q2-calendar >>> [test-id=calendarToggle]');\n const calendarButtonClickSpy = await calendarButton.spyOnEvent('click');\n\n expect(calendarButtonClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBe(true);\n\n await calendar.callMethod('closePopover');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(false);\n expect(calendarButtonClickSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toEqual('calendarToggle');\n });\n });\n\n describe('setValue', () => {\n it('sets the value of the calendar when passed as string', async () => {\n const innerInputClickSpy = await innerInput.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBeUndefined();\n const newValue = '2023-10-20';\n\n await calendar.callMethod('setValue', newValue);\n await page.waitForChanges();\n\n const selectedDate = await page.find('q2-calendar >>> td[data-date=\"2023-10-20\"]');\n expect(selectedDate).toEqualAttribute('aria-selected', 'true');\n\n expect(await popover.getProperty('open')).toBe(false);\n expect(innerInputClickSpy).toHaveReceivedEventTimes(1);\n expect(await calendar.getProperty('value')).toEqual(newValue);\n expect(await getActiveElementTestId(page)).toEqual('inputAndCalendarToggle');\n });\n\n it('sets the value of the calendar when passed as Date object', async () => {\n const innerInputClickSpy = await innerInput.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBeUndefined();\n const newValue = '2023-10-20';\n\n await calendar.callMethod('setValue', new Date(newValue));\n await page.waitForChanges();\n\n const selectedDate = await page.find('q2-calendar >>> td[data-date=\"2023-10-20\"]');\n expect(selectedDate).toEqualAttribute('aria-selected', 'true');\n\n expect(await popover.getProperty('open')).toBe(false);\n expect(innerInputClickSpy).toHaveReceivedEventTimes(1);\n expect(await calendar.getProperty('value')).toEqual(newValue);\n expect(await getActiveElementTestId(page)).toEqual('inputAndCalendarToggle');\n });\n\n it('does nothing when invalid date is provided', async () => {\n const innerInputClickSpy = await innerInput.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBeUndefined();\n const newValue = '2023-13-31';\n\n await calendar.callMethod('setValue', newValue);\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBeUndefined();\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await calendar.getProperty('value')).toBeUndefined();\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n\n describe('typeValue', () => {\n beforeEach(async () => {\n await calendar.setProperty('typeable', true);\n await page.waitForChanges();\n });\n\n it('types the value of the calendar when passed as string', async () => {\n const innerInputFocusSpy = await innerInput.spyOnEvent('focus');\n const innerInputInputSpy = await innerInput.spyOnEvent('input');\n const calendarChangeSpy = await calendar.spyOnEvent('change');\n\n expect(innerInputFocusSpy).toHaveReceivedEventTimes(0);\n expect(innerInputInputSpy).toHaveReceivedEventTimes(0);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(0);\n const newValue = '2023-10-20';\n\n await calendar.callMethod('typeValue', newValue);\n await page.waitForChanges();\n\n expect(innerInputFocusSpy).toHaveReceivedEventTimes(1);\n expect(innerInputInputSpy).toHaveReceivedEventTimes(1);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBe('inputAndCalendarToggle');\n\n await innerInput.press('Tab');\n await page.waitForChanges();\n\n expect(await calendar.getProperty('value')).toEqual(newValue);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(1);\n expect(calendarChangeSpy).toHaveReceivedEventDetail({\n value: newValue,\n });\n expect(await getActiveElementTestId(page)).toBe('calendarToggle');\n });\n\n it('types the value of the calendar when passed as Date object', async () => {\n const innerInputFocusSpy = await innerInput.spyOnEvent('focus');\n const innerInputInputSpy = await innerInput.spyOnEvent('input');\n const calendarChangeSpy = await calendar.spyOnEvent('change');\n\n expect(innerInputFocusSpy).toHaveReceivedEventTimes(0);\n expect(innerInputInputSpy).toHaveReceivedEventTimes(0);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(0);\n const newValue = '2023-10-20';\n\n await calendar.callMethod('typeValue', new Date(newValue));\n await page.waitForChanges();\n\n expect(innerInputFocusSpy).toHaveReceivedEventTimes(1);\n expect(innerInputInputSpy).toHaveReceivedEventTimes(1);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBe('inputAndCalendarToggle');\n\n await innerInput.press('Tab');\n await page.waitForChanges();\n\n expect(await calendar.getProperty('value')).toEqual(newValue);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(1);\n expect(calendarChangeSpy).toHaveReceivedEventDetail({\n value: newValue,\n });\n expect(await getActiveElementTestId(page)).toBe('calendarToggle');\n });\n\n it('does nothing when invalid date is provided', async () => {\n const innerInputFocusSpy = await innerInput.spyOnEvent('focus');\n const innerInputInputSpy = await innerInput.spyOnEvent('input');\n const calendarChangeSpy = await calendar.spyOnEvent('change');\n\n expect(innerInputFocusSpy).toHaveReceivedEventTimes(0);\n expect(innerInputInputSpy).toHaveReceivedEventTimes(0);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(0);\n const newValue = '2023-13-31';\n\n await calendar.callMethod('typeValue', new Date(newValue));\n await page.waitForChanges();\n\n expect(innerInputFocusSpy).toHaveReceivedEventTimes(0);\n expect(innerInputInputSpy).toHaveReceivedEventTimes(0);\n expect(calendarChangeSpy).toHaveReceivedEventTimes(0);\n expect(await calendar.getProperty('value')).toBeUndefined();\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n });\n\n it('adds aria-labels to table heading columns', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n const daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const innerTableHeadings = await page.findAll('q2-calendar >>> table thead th');\n expect(innerTableHeadings.length).toEqual(7);\n innerTableHeadings.forEach(async (heading, index) => {\n expect(await heading.getAttribute('aria-label')).toEqual(\n `tecton.element.calendar.days.${daysOfWeek[index]}`\n );\n });\n });\n\n it('opens and closes the dropdown and refocuses input on close', async () => {\n page = await setup({\n html: `<q2-calendar value=${date}></q2-calendar>`,\n });\n\n const calendarContainer = await page.find('q2-calendar >>> click-elsewhere');\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n let calendarPopup = await page.find('q2-calendar >>> .calendar-field-popup');\n\n // Closed by default\n expect(calendarContainer.classList.contains('dropdown-open')).toEqual(false);\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('false');\n\n const inputFocusSpy = await innerInput.spyOnEvent('focus');\n\n // Open with click\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n calendarPopup = await page.find('q2-calendar >>> .calendar-field-popup');\n\n expect(calendarContainer.classList.contains('dropdown-open')).toEqual(true);\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('true');\n expect(calendarPopup).not.toBeNull();\n expect(inputFocusSpy).toHaveReceivedEventTimes(0);\n\n // Close with click\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('false');\n\n // Focuses input on close\n // spy will be hit twice on initial focus shift due to input focus delegation\n expect(inputFocusSpy).toHaveReceivedEventTimes(2);\n\n // Close on click elsewhere\n await dispatchEvent(page, ['q2-calendar', 'click-elsewhere'], 'change');\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('false');\n expect(inputFocusSpy).toHaveReceivedEventTimes(2);\n\n // Open with click\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('true');\n expect(inputFocusSpy).toHaveReceivedEventTimes(2);\n\n // Close on date selection\n await dispatchEvent(page, ['q2-calendar', 'td.is-valid'], 'click', {\n bubbles: true,\n });\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('false');\n expect(inputFocusSpy).toHaveReceivedEventTimes(3);\n });\n\n describe('calculating popover min-width', () => {\n const getInputAndPopoverWidths = async (page: E2EPage) => {\n return page.$eval('q2-calendar', (el: HTMLElement) => {\n const popover = el.shadowRoot.querySelector('q2-popover');\n const popoverContainer = popover.shadowRoot.querySelector('.container');\n const input = el.shadowRoot.querySelector('q2-input');\n const inputStyles = getComputedStyle(input);\n const popoverContainerStyles = getComputedStyle(popoverContainer);\n return {\n inputWidth: inputStyles.getPropertyValue('width').trim(),\n popoverWidth: popoverContainerStyles.getPropertyValue('width').trim(),\n };\n });\n };\n describe('when element is smaller than min-width', () => {\n it('ensures the popover is large enough to display the calendar', async () => {\n page = await setup({\n html: `<q2-calendar style=\"width: 200px\"></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n popover = await page.find('q2-calendar >>> q2-popover');\n calendar.setProperty('value', date);\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n const input = await page.find(\"q2-calendar >>> [test-id='inputAndCalendarToggle']\");\n await input.click();\n expect(popover).toHaveAttribute('open');\n const { inputWidth, popoverWidth } = await getInputAndPopoverWidths(page);\n expect(inputWidth).toEqual('200px');\n expect(popoverWidth).toEqual('336px');\n });\n });\n\n describe('when element is larger than min-width', () => {\n it('ensures the popover is the same width as the element', async () => {\n page = await setup({\n html: `<q2-calendar style=\"width: 600px\"></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n popover = await page.find('q2-calendar >>> q2-popover');\n calendar.setProperty('value', date);\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n const input = await page.find(\"q2-calendar >>> [test-id='inputAndCalendarToggle']\");\n await input.click();\n expect(popover).toHaveAttribute('open');\n const { inputWidth, popoverWidth } = await getInputAndPopoverWidths(page);\n expect(inputWidth).toEqual('600px');\n expect(popoverWidth).toEqual('600px');\n });\n });\n });\n\n describe('focus transferring', () => {\n let page: E2EPage;\n let calendar: E2EElement;\n\n it('focuses inner input when focus event dispatched for non-typeable calendar', async () => {\n page = await setup({ html: `<q2-calendar></q2-calendar>` });\n calendar = await page.find('q2-calendar');\n await dispatchEvent(page, ['q2-calendar'], 'focus');\n expect(await innerInputTestId(page)).toEqual('inputField');\n });\n\n it('focuses inner input when focus method called for non-typeable calendar', async () => {\n page = await setup({ html: `<q2-calendar></q2-calendar>` });\n calendar = await page.find('q2-calendar');\n await calendar.triggerEvent('focus');\n await page.waitForChanges();\n expect(await innerInputTestId(page)).toEqual('inputField');\n });\n\n it('focuses inner button when focus event dispatched for typeable calendar', async () => {\n page = await setup({ html: `<q2-calendar typeable></q2-calendar>` });\n calendar = await page.find('q2-calendar');\n await dispatchEvent(page, ['q2-calendar'], 'focus');\n expect(await innerInputTestId(page)).toEqual('inputField');\n });\n\n it('focuses inner button when focus method called for typeable calendar', async () => {\n page = await setup({ html: `<q2-calendar typeable></q2-calendar>` });\n calendar = await page.find('q2-calendar');\n await calendar.triggerEvent('focus');\n await page.waitForChanges();\n expect(await innerInputTestId(page)).toEqual('inputField');\n });\n });\n\n it('resizes the iframe on open and close', async () => {\n page = await setup({\n html: `<q2-calendar value=${date}></q2-calendar>`,\n });\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n // Closed by default\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('false');\n\n // Open with click\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('true');\n\n // Close with click\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n expect(await innerInput.getProperty('ariaExpanded')).toEqual('false');\n });\n\n it('generates and localizes correct placeholder', async () => {\n page = await setup({\n html: `\n <q2-calendar label=\"Label Text\"></q2-calendar>\n `,\n });\n\n calendar = await page.find('q2-calendar');\n\n await setTestStrings(page, {\n 'q2Calendar.placeholder': 'Placeholder Text',\n 'q2Calendar.disabledMsg': 'Disabled Placeholder',\n 'q2Calendar.buttonLabel': 'Button Label Text',\n });\n\n calendar.setProperty('placeholder', 'q2Calendar.placeholder');\n calendar.setProperty('disabledMsg', 'q2Calendar.disabledMsg');\n calendar.setProperty('buttonLabel', 'q2Calendar.buttonLabel');\n\n await page.waitForChanges();\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n expect(await innerInput.getProperty('placeholder')).toEqual('Button Label Text');\n\n calendar.setProperty('disabled', true);\n calendar.setProperty('buttonLabel', undefined);\n await page.waitForChanges();\n expect(await innerInput.getProperty('placeholder')).toEqual('Disabled Placeholder');\n\n calendar.setProperty('disabled', false);\n calendar.setProperty('disabledMsg', undefined);\n await page.waitForChanges();\n expect(await innerInput.getProperty('placeholder')).toEqual('Placeholder Text');\n });\n\n it('localizes attribute strings', async () => {\n page = await setup({\n html: `\n <q2-calendar></q2-calendar>\n `,\n });\n\n await setTestStrings(page, {\n 'q2Calendar.label': 'Label Text',\n 'q2Calendar.ariaLabel': 'Aria-Label Text',\n 'q2Calendar.error': 'Error Text',\n 'q2Calendar.placeholder': 'Placeholder Text',\n });\n\n calendar = await page.find('q2-calendar');\n\n calendar.setProperty('label', 'q2Calendar.label');\n calendar.setProperty('placeholder', 'q2Calendar.placeholder');\n calendar.setProperty('errors', ['q2Calendar.error']);\n\n await page.waitForChanges();\n\n innerInput = await page.find('q2-calendar >>> [test-id=\"inputAndCalendarToggle\"]');\n\n expect(await innerInput.getProperty('label')).toEqual('Label Text');\n expect(await innerInput.getProperty('errors')).toEqual(['Error Text']);\n expect(await innerInput.getProperty('placeholder')).toEqual('Placeholder Text');\n\n calendar.setProperty('ariaLabel', 'q2Calendar.ariaLabel');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('label')).toEqual('Aria-Label Text');\n expect(await innerInput.getProperty('ariaLabel')).toEqual(undefined);\n });\n\n it('conditionally renders and localizes calendarLabel', async () => {\n page = await setup({\n html: `\n <q2-calendar value=${date}></q2-calendar>\n `,\n });\n\n await setTestStrings(page, {\n 'q2Calendar.calendarLabel': 'Calendar Label Text',\n });\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n let calendarLabel = await page.find('q2-calendar >>> .calendar-label');\n expect(calendarLabel).toBeNull();\n\n calendar = await page.find('q2-calendar');\n calendar.setProperty('calendarLabel', 'q2Calendar.calendarLabel');\n await page.waitForChanges();\n\n calendarLabel = await page.find('q2-calendar >>> .calendar-label');\n expect(calendarLabel).not.toBeNull();\n expect(calendarLabel.innerText).toEqual('Calendar Label Text');\n });\n\n it('conditionally renders and localizes disclaimer', async () => {\n page = await setup({\n html: `\n <q2-calendar value=${date}></q2-calendar>\n `,\n });\n\n await setTestStrings(page, {\n 'q2Calendar.disclaimer': 'Disclaimer Text',\n });\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n let calendarDisclaimer = await page.find('q2-calendar >>> .calendar-disclaimer');\n expect(calendarDisclaimer).toBeNull();\n\n calendar = await page.find('q2-calendar');\n calendar.setProperty('disclaimer', 'q2Calendar.disclaimer');\n await page.waitForChanges();\n\n calendarDisclaimer = await page.find('q2-calendar >>> .calendar-disclaimer');\n expect(calendarDisclaimer).not.toBeNull();\n expect(calendarDisclaimer.innerText).toEqual('Disclaimer Text');\n });\n\n it('renders the calendar popup header', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n await setTestStrings(page, {\n 'tecton.element.calendar.previousMonth': 'Previous Month',\n 'tecton.element.calendar.nextMonth': 'Next Month',\n 'tecton.element.calendar.previousYear': 'Previous Year',\n 'tecton.element.calendar.nextYear': 'Next Year',\n });\n\n calendar = await page.find('q2-calendar');\n calendar.setProperty('value', date);\n await page.waitForChanges();\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const previousMonthBtn = await page.find('q2-calendar >>> [test-id=\"previousMonthButton\"]');\n const nextMonthBtn = await page.find('q2-calendar >>> [test-id=\"nextMonthButton\"]');\n const monthText = await page.find('q2-calendar >>> .cal-month-text');\n const previousYearBtn = await page.find('q2-calendar >>> [test-id=\"previousYearButton\"]');\n const nextYearBtn = await page.find('q2-calendar >>> [test-id=\"nextYearButton\"]');\n const yearText = await page.find('q2-calendar >>> .cal-year-text');\n\n expect(previousMonthBtn).toHaveClasses(['cal-nav-btn', 'prev-month']);\n expect(await previousMonthBtn.getProperty('ariaLabel')).toEqual(undefined);\n expect(await previousMonthBtn.getProperty('label')).toEqual('Previous Month');\n\n expect(nextMonthBtn).toHaveClasses(['cal-nav-btn', 'next-month']);\n expect(await nextMonthBtn.getProperty('ariaLabel')).toEqual(undefined);\n expect(await nextMonthBtn.getProperty('label')).toEqual('Next Month');\n\n expect(monthText.innerText).toEqual('tecton.element.calendar.months.February');\n\n expect(previousYearBtn).toHaveClasses(['cal-nav-btn', 'prev-year']);\n expect(await previousYearBtn.getProperty('ariaLabel')).toEqual(undefined);\n expect(await previousYearBtn.getProperty('label')).toEqual('Previous Year');\n\n expect(nextYearBtn).toHaveClasses(['cal-nav-btn', 'next-year']);\n expect(await nextYearBtn.getProperty('ariaLabel')).toEqual(undefined);\n expect(await nextYearBtn.getProperty('label')).toEqual('Next Year');\n\n expect(yearText.innerText).toEqual('2017');\n });\n\n it('navigates between months and years', async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n calendar = await page.find('q2-calendar');\n popover = await page.find('q2-calendar >>> q2-popover');\n calendar.setProperty('value', date);\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n const input = await page.find(\"q2-calendar >>> [test-id='inputAndCalendarToggle']\");\n await input.click();\n expect(popover).toHaveAttribute('open');\n\n const monthText = await page.find('q2-calendar >>> .cal-month-text');\n const yearText = await page.find('q2-calendar >>> .cal-year-text');\n\n expect(monthText.innerText).toEqual('tecton.element.calendar.months.February');\n expect(yearText.innerText).toEqual('2017');\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"nextMonthButton\"]'], 'click');\n expect(monthText.innerText).toEqual('tecton.element.calendar.months.March');\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"previousMonthButton\"]'], 'click');\n expect(monthText.innerText).toEqual('tecton.element.calendar.months.February');\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"nextYearButton\"]'], 'click');\n expect(monthText.innerText).toEqual('tecton.element.calendar.months.February');\n expect(yearText.innerText).toEqual('2018');\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"previousYearButton\"]'], 'click');\n expect(monthText.innerText).toEqual('tecton.element.calendar.months.February');\n expect(yearText.innerText).toEqual('2017');\n });\n\n it('validates against checksum', async () => {\n page = await setup({\n html: `<q2-calendar value=${date} days-of-week-checksum=\"127\"></q2-calendar>`,\n });\n\n calendar = await page.find('q2-calendar');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const dateElements = await page.findAll('q2-calendar >>> td:not([aria-hidden])');\n // indices reliant on '2017-02-01' starting point\n const sunday = dateElements[4];\n const monday = dateElements[5];\n const tuesday = dateElements[6];\n const wednesday = dateElements[7];\n const thursday = dateElements[8];\n const friday = dateElements[9];\n const saturday = dateElements[10];\n\n // All days valid with 127\n expect(sunday).toHaveClass('is-valid');\n expect(monday).toHaveClass('is-valid');\n expect(tuesday).toHaveClass('is-valid');\n expect(wednesday).toHaveClass('is-valid');\n expect(thursday).toHaveClass('is-valid');\n expect(friday).toHaveClass('is-valid');\n expect(saturday).toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 62);\n await page.waitForChanges();\n\n // Only weekdays valid with 62\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).toHaveClass('is-valid');\n expect(tuesday).toHaveClass('is-valid');\n expect(wednesday).toHaveClass('is-valid');\n expect(thursday).toHaveClass('is-valid');\n expect(friday).toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 1);\n await page.waitForChanges();\n\n // Only Sunday valid with 1\n expect(sunday).toHaveClass('is-valid');\n expect(monday).not.toHaveClass('is-valid');\n expect(tuesday).not.toHaveClass('is-valid');\n expect(wednesday).not.toHaveClass('is-valid');\n expect(thursday).not.toHaveClass('is-valid');\n expect(friday).not.toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 2);\n await page.waitForChanges();\n\n // Only Monday valid with 2\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).toHaveClass('is-valid');\n expect(tuesday).not.toHaveClass('is-valid');\n expect(wednesday).not.toHaveClass('is-valid');\n expect(thursday).not.toHaveClass('is-valid');\n expect(friday).not.toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 4);\n await page.waitForChanges();\n\n // Only Tuesday valid with 4\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).not.toHaveClass('is-valid');\n expect(tuesday).toHaveClass('is-valid');\n expect(wednesday).not.toHaveClass('is-valid');\n expect(thursday).not.toHaveClass('is-valid');\n expect(friday).not.toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 8);\n await page.waitForChanges();\n\n // Only Wednesday valid with 8\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).not.toHaveClass('is-valid');\n expect(tuesday).not.toHaveClass('is-valid');\n expect(wednesday).toHaveClass('is-valid');\n expect(thursday).not.toHaveClass('is-valid');\n expect(friday).not.toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 16);\n await page.waitForChanges();\n\n // Only Thursday valid with 16\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).not.toHaveClass('is-valid');\n expect(tuesday).not.toHaveClass('is-valid');\n expect(wednesday).not.toHaveClass('is-valid');\n expect(thursday).toHaveClass('is-valid');\n expect(friday).not.toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 32);\n await page.waitForChanges();\n\n // Only Friday valid with 32\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).not.toHaveClass('is-valid');\n expect(tuesday).not.toHaveClass('is-valid');\n expect(wednesday).not.toHaveClass('is-valid');\n expect(thursday).not.toHaveClass('is-valid');\n expect(friday).toHaveClass('is-valid');\n expect(saturday).not.toHaveClass('is-valid');\n\n calendar.setProperty('daysOfWeekChecksum', 64);\n await page.waitForChanges();\n\n // Only Saturday valid with 64\n expect(sunday).not.toHaveClass('is-valid');\n expect(monday).not.toHaveClass('is-valid');\n expect(tuesday).not.toHaveClass('is-valid');\n expect(wednesday).not.toHaveClass('is-valid');\n expect(thursday).not.toHaveClass('is-valid');\n expect(friday).not.toHaveClass('is-valid');\n expect(saturday).toHaveClass('is-valid');\n });\n\n it('validates against validDates', async () => {\n page = await setup({\n html: `\n <q2-calendar value=${date} days-of-week-checksum=\"127\"></q2-calendar>\n `,\n });\n\n const validDates = [\n '2017-02-01',\n '2017-02-10',\n '2017/02/21', // Non-ISO 8601 string\n ];\n\n calendar = await page.find('q2-calendar');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const dateElements = await page.findAll('q2-calendar >>> td:not([aria-hidden])');\n const first = dateElements[0];\n const second = dateElements[1];\n const third = dateElements[2];\n const fourth = dateElements[3];\n const fifth = dateElements[4];\n const sixth = dateElements[5];\n const seventh = dateElements[6];\n const tenth = dateElements[9];\n const twentyFirst = dateElements[20];\n\n // All days valid with checksum\n expect(first).toHaveClass('is-valid');\n expect(second).toHaveClass('is-valid');\n expect(third).toHaveClass('is-valid');\n expect(fourth).toHaveClass('is-valid');\n expect(fifth).toHaveClass('is-valid');\n expect(sixth).toHaveClass('is-valid');\n expect(seventh).toHaveClass('is-valid');\n expect(tenth).toHaveClass('is-valid');\n expect(twentyFirst).toHaveClass('is-valid');\n\n calendar.setProperty('validDates', validDates);\n await page.waitForChanges();\n\n // validDates takes precedence over checksum\n expect(first).toHaveClass('is-valid');\n expect(second).not.toHaveClass('is-valid');\n expect(third).not.toHaveClass('is-valid');\n expect(fourth).not.toHaveClass('is-valid');\n expect(fifth).not.toHaveClass('is-valid');\n expect(sixth).not.toHaveClass('is-valid');\n expect(seventh).not.toHaveClass('is-valid');\n expect(tenth).toHaveClass('is-valid');\n expect(twentyFirst).toHaveClass('is-valid');\n });\n\n it('prioritizes invalidDates over checksum and validDates', async () => {\n page = await setup({\n html: `\n <q2-calendar value=${date} days-of-week-checksum=\"127\"></q2-calendar>\n `,\n });\n\n const validDates = [\n '2017-02-01',\n '2017-02-10',\n '2017/02/21', // Non-ISO 8601 string\n ];\n\n const invalidDates = [\n '2017-02-10',\n '2017/02/21', // Non-ISO 8601 string\n ];\n\n calendar = await page.find('q2-calendar');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const dateElements = await page.findAll('q2-calendar >>> td:not([aria-hidden])');\n const first = dateElements[0];\n const tenth = dateElements[9];\n const twentyFirst = dateElements[20];\n\n // All days valid with checksum\n expect(first).toHaveClass('is-valid');\n expect(tenth).toHaveClass('is-valid');\n expect(twentyFirst).toHaveClass('is-valid');\n\n calendar.setProperty('invalidDates', invalidDates);\n await page.waitForChanges();\n\n // invalidDates overrides checksum\n expect(first).toHaveClass('is-valid');\n expect(tenth).not.toHaveClass('is-valid');\n expect(twentyFirst).not.toHaveClass('is-valid');\n\n calendar.setProperty('invalidDates', []);\n calendar.setProperty('validDates', validDates);\n await page.waitForChanges();\n\n // Selected days valid with validDates\n expect(first).toHaveClass('is-valid');\n expect(tenth).toHaveClass('is-valid');\n expect(twentyFirst).toHaveClass('is-valid');\n\n calendar.setProperty('invalidDates', invalidDates);\n await page.waitForChanges();\n\n // invalidDates overrides validDates\n expect(first).toHaveClass('is-valid');\n expect(tenth).not.toHaveClass('is-valid');\n expect(twentyFirst).not.toHaveClass('is-valid');\n });\n\n it('prioritizes validDates over checksum', async () => {\n const testDate = '2021-11-02';\n page = await setup({\n html: `\n <q2-calendar value=${testDate}></q2-calendar>\n `,\n });\n\n const validDates = [testDate];\n calendar = await page.find('q2-calendar');\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const dateElements = await page.findAll('q2-calendar >>> td:not([aria-hidden])');\n\n // All days valid with checksum\n expect(dateElements[0]).toHaveClass('is-valid');\n expect(dateElements[1]).toHaveClass('is-valid');\n\n // All days invalid after setting checksum = 0\n calendar.setProperty('daysOfWeekChecksum', '0');\n await page.waitForChanges();\n expect(dateElements[0]).not.toHaveClass('is-valid');\n expect(dateElements[1]).not.toHaveClass('is-valid');\n\n // Adding testDate ( 2021-11-02, dateElements[1] ) as validDates should make it selectable\n calendar.setProperty('validDates', validDates);\n await page.waitForChanges();\n\n // Selected days valid with validDates\n expect(dateElements[0]).not.toHaveClass('is-valid');\n expect(dateElements[1]).toHaveClass('is-valid');\n });\n\n it('does not consider timezone in invalidDates', async () => {\n const holidays = [\n '2017-02-05T00:00:00.000-01:00',\n '2017-02-10T00:00:00.000-09:00',\n '2017/02/21', // Non-ISO 8601 string\n ];\n\n page = await setup({\n html: `\n <q2-calendar\n days-of-week-checksum=\"127\"\n value=${date}\n ></q2-calendar>\n `,\n });\n\n calendar = await page.find('q2-calendar');\n\n calendar.setProperty('invalidDates', holidays);\n await page.waitForChanges();\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const dayElements = await page.findAll('q2-calendar >>> td:not([aria-hidden])');\n\n // 4th should be valid\n expect(dayElements[3]).toHaveClass('is-valid');\n\n // 5th should not be valid\n expect(dayElements[4]).not.toHaveClass('is-valid');\n\n // 6th should be valid\n expect(dayElements[5]).toHaveClass('is-valid');\n\n // 9th should be valid\n expect(dayElements[8]).toHaveClass('is-valid');\n\n // 10th should not be valid\n expect(dayElements[9]).not.toHaveClass('is-valid');\n\n // 11th should be valid\n expect(dayElements[10]).toHaveClass('is-valid');\n\n // 20th should be valid\n expect(dayElements[19]).toHaveClass('is-valid');\n\n // 21st should not be valid\n expect(dayElements[20]).not.toHaveClass('is-valid');\n\n // 22nd should be valid\n expect(dayElements[21]).toHaveClass('is-valid');\n });\n\n it('decorates current selected day', async () => {\n const today = new Date();\n const todayISO = formatISO(today, { representation: 'date' });\n\n page = await setup({\n html: `\n <q2-calendar\n days-of-week-checksum=\"127\"\n start-date=${todayISO}\n end-date=${todayISO}\n ></q2-calendar>\n `,\n });\n\n await setTestStrings(page, {\n 'tecton.element.calendar.today': 'Today',\n 'tecton.element.calendar.selected': 'Selected',\n });\n\n calendar = await page.find('q2-calendar');\n\n calendar.setProperty('value', todayISO);\n\n await dispatchEvent(page, ['q2-calendar', '[test-id=\"inputAndCalendarToggle\"]'], 'click');\n\n const currentDay = await page.find(`q2-calendar >>> td[data-day=\"${today.getDate()}\"]`);\n const todayDecorator = await currentDay.find('.today-decorator');\n const activityDecorator = await currentDay.find('.activity-decorator');\n const currentDayInner = await currentDay.find('[aria-label]');\n\n const currentDayAriaLabel = await currentDayInner.getProperty('ariaLabel');\n expect(currentDayAriaLabel).toEqual(`Today, ${format(today, 'EEEE, MMMM d, yyyy')} (Selected)`);\n expect(await currentDay.getProperty('ariaSelected')).toEqual('true');\n expect(await currentDay.getProperty('disabled')).toBeUndefined();\n expect(currentDay).toHaveClasses(['is-today', 'is-selected', 'is-valid', 'is-start-date', 'is-end-date']);\n expect(todayDecorator).not.toBeNull();\n expect(todayDecorator.innerText).toEqual('Today');\n expect(activityDecorator).toBeNull();\n });\n\n it('should have default error handler add and default success handler remove \"invalid error\" message to errors array when provided value fails or passes validation', async () => {\n page = await setup({\n html: `\n <q2-calendar\n days-of-week-checksum=\"62\"\n value=\"2019/08/033\"\n ></q2-calendar>\n `,\n });\n\n calendar = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> q2-input');\n let inputErrors = await innerInput.getProperty('errors');\n\n expect(inputErrors.length).toEqual(1);\n expect(inputErrors[0]).toEqual('tecton.element.calendar.hint.invalidDate');\n\n calendar.setProperty('value', '2019/08/02');\n\n await page.waitForChanges();\n\n inputErrors = await innerInput.getProperty('errors');\n\n expect(inputErrors.length).toEqual(0);\n\n calendar.setProperty('errors', ['test error']);\n calendar.setProperty('value', '2019/08/333');\n\n await page.waitForChanges();\n\n inputErrors = await innerInput.getProperty('errors');\n\n // added internal error combines after passed errors and does not replace\n expect(inputErrors.length).toEqual(2);\n expect(inputErrors[0]).toEqual('test error');\n expect(inputErrors[1]).toEqual('tecton.element.calendar.hint.invalidDate');\n\n calendar.setProperty('value', '2019/08/02');\n\n await page.waitForChanges();\n\n inputErrors = await innerInput.getProperty('errors');\n\n // when date becomes valid and internal error is removed passed errors remain\n expect(inputErrors.length).toEqual(1);\n expect(inputErrors[0]).toEqual('test error');\n });\n\n it('should emit error event when date validation fails and success event when validation passes', async () => {\n page = await setup({\n html: `\n <q2-calendar\n days-of-week-checksum=\"62\"\n value=\"2019/08/052\"\n ></q2-calendar>\n `,\n });\n\n calendar = await page.find('q2-calendar');\n const errorSpy = await calendar.spyOnEvent('error');\n const successSpy = await calendar.spyOnEvent('success');\n\n expect(errorSpy).toHaveReceivedEventTimes(0);\n\n calendar.setProperty('value', '2019/08/038');\n\n await page.waitForChanges();\n\n expect(errorSpy).toHaveReceivedEventTimes(1);\n expect(successSpy).toHaveReceivedEventTimes(0);\n\n calendar.setProperty('value', '2019/08/045');\n\n await page.waitForChanges();\n\n // fires event on value change even if previous event was also invalid\n expect(errorSpy).toHaveReceivedEventTimes(2);\n expect(successSpy).toHaveReceivedEventTimes(0);\n\n calendar.setProperty('value', '2019/08/05');\n\n await page.waitForChanges();\n\n // does not fire the event on valid date changes\n expect(errorSpy).toHaveReceivedEventTimes(2);\n expect(successSpy).toHaveReceivedEventTimes(1);\n\n calendar.setProperty('daysOfWeekChecksum', '1');\n\n await page.waitForChanges();\n\n // recalculates validity and fires on validation change\n expect(errorSpy).toHaveReceivedEventTimes(3);\n expect(successSpy).toHaveReceivedEventTimes(1);\n });\n\n it('should not add or remove error when error and success are passed', async () => {\n page = await setup({\n html: `\n <q2-calendar\n days-of-week-checksum=\"62\"\n value=\"2019/08/02\"\n ></q2-calendar>\n `,\n });\n\n const errorHandler = jest.fn();\n const successHandler = jest.fn();\n\n await page.exposeFunction('errorHandler', errorHandler);\n await page.exposeFunction('successHandler', successHandler);\n await page.$eval('q2-calendar', function (cal) {\n (cal as HTMLElement).onerror = errorHandler;\n (cal as any).onsuccess = successHandler;\n });\n\n calendar = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> q2-input');\n let inputErrors = await innerInput.getProperty('errors');\n\n expect(inputErrors.length).toEqual(0);\n\n calendar.setProperty('value', '2019/08/02');\n\n await page.waitForChanges();\n\n inputErrors = await innerInput.getProperty('errors');\n\n expect(inputErrors.length).toEqual(0);\n\n calendar.setProperty('errors', ['test error']);\n calendar.setProperty('value', '2019/08/03');\n\n await page.waitForChanges();\n\n inputErrors = await innerInput.getProperty('errors');\n\n expect(await calendar.getProperty('errors')).toEqual(['test error']);\n expect(inputErrors.length).toEqual(1);\n expect(inputErrors[0]).toEqual('test error');\n\n calendar.setProperty('value', '2019/08/02');\n\n await page.waitForChanges();\n\n inputErrors = await innerInput.getProperty('errors');\n\n // when date becomes valid and internal error is removed passed errors remain\n expect(inputErrors.length).toEqual(1);\n expect(inputErrors[0]).toEqual('test error');\n });\n\n describe('setting value', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar value=\"2015/2/15\"></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n innerInput = await page.find('q2-calendar >>> q2-input');\n\n expect(await innerInput.getProperty('value')).toEqual('02/15/2015');\n });\n\n it('accepts string', async () => {\n calendar.setProperty('value', '2025/5/15');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('05/15/2025');\n });\n\n it('accepts ISO string', async () => {\n calendar.setProperty('value', '2025-05-15');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('05/15/2025');\n });\n\n it('accepts null', async () => {\n calendar.setProperty('value', null);\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('');\n });\n\n it('accepts moment object', async () => {\n await page.$eval('q2-calendar', (element: HTMLQ2CalendarElement) => {\n const momentLikeObject = { toDate: () => new Date('05/15/2025') };\n element.value = momentLikeObject;\n });\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('05/15/2025');\n });\n });\n\n describe('when clearable', () => {\n let clearButton;\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar value=\"02/15/2015\" clearable></q2-calendar>`,\n });\n innerInput = await page.find('q2-calendar >>> q2-input');\n clearButton = await page.find('q2-calendar >>> q2-input >>> [test-id=\"clearButton\"]');\n expect(await innerInput.getProperty('value')).toEqual('02/15/2015');\n });\n\n it('should show clear button', async () => {\n expect(clearButton).toBeTruthy();\n });\n\n it('should have clearable attribute in innerInput', async () => {\n expect(await innerInput.getProperty('clearable')).toBeTruthy();\n });\n });\n\n describe('Deprecations', () => {\n it('handles deprecated `popDirection` prop', async () => {\n page = await setup({\n html: `\n <q2-calendar pop-direction=\"up\"></q2-calendar>\n `,\n });\n await page.waitForChanges();\n calendar = await page.find('q2-calendar');\n expect(await calendar.getProperty('popDirection')).toEqual('up');\n expect(await calendar.getProperty('popoverDirection')).toEqual('up');\n\n await calendar.setProperty('popDirection', 'down');\n await page.waitForChanges();\n\n expect(await calendar.getProperty('popDirection')).toEqual('down');\n expect(await calendar.getProperty('popoverDirection')).toEqual('down');\n });\n\n it('handles deprecated `ariaLabel` prop', async () => {\n const label = 'My Label';\n page = await setup({ html: `<q2-calendar aria-label=\"${label}\"></q2-calendar>` });\n await page.waitForChanges();\n await testDeprecatedAriaLabel(await page.find('q2-calendar'), label);\n innerInput = await page.find('q2-calendar >>> q2-input');\n expect(innerInput).toEqualAttribute('label', label);\n expect(innerInput).toHaveAttribute('hide-label');\n });\n });\n\n describe('Regressions', () => {\n describe('TCT-2409 - Unexpected event emitted from nested q2-input on blur', () => {\n it('does not emit a change event on blur when the value is set dynamically', async () => {\n page = await setup({ html: `<q2-calendar></q2-calendar>` });\n calendar = await page.find('q2-calendar');\n const changeSpy = await calendar.spyOnEvent('change');\n\n expect(changeSpy).toHaveReceivedEventTimes(0);\n\n await calendar.setProperty('value', '02/04/2020');\n await page.waitForChanges();\n await dispatchEvent(page, ['q2-calendar', 'q2-input', 'button'], 'blur');\n\n expect(changeSpy).toHaveReceivedEventTimes(0);\n });\n\n describe('when typeable', () => {\n it('does not emit a change event on blur when the value is set dynamically', async () => {\n page = await setup({ html: `<q2-calendar typeable></q2-calendar>` });\n calendar = await page.find('q2-calendar');\n const changeSpy = await calendar.spyOnEvent('change');\n\n expect(changeSpy).toHaveReceivedEventTimes(0);\n\n await calendar.setProperty('value', '02/04/2020');\n await page.waitForChanges();\n await dispatchEvent(page, ['q2-calendar', 'q2-input', 'input'], 'blur');\n\n expect(changeSpy).toHaveReceivedEventTimes(0);\n });\n });\n });\n });\n\n describe('Accessibility', () => {\n describe('aXe DevTools', () => {\n it('does not have accessibility violations', async () => {\n const page = await setup({\n html: `<q2-calendar\n value=${date}\n label=\"Calendar Label\"\n placeholder=\"Calendar Placeholder\"></q2-calendar>`,\n });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n describe('Accessibility Tree', () => {});\n describe('Keyboard Controls', () => {\n let page: E2EPage;\n let calendar: E2EElement;\n let table: E2EElement;\n let input: E2EElement;\n\n const getFocusedDate = async (page: E2EPage) =>\n page.$eval('q2-calendar', (element: HTMLElement) =>\n element.shadowRoot.activeElement.getAttribute('data-date')\n );\n const getIsoDate = (dateToFormat: Date) => formatISO(dateToFormat, { representation: 'date' });\n const getFormattedDate = (dateToFormat: Date) => format(dateToFormat, 'MM/dd/yyyy');\n const getPureDate = (dateToPurify?: string) =>\n removeTimezoneOffset(dateToPurify ? new Date(dateToPurify) : new Date());\n const getPureIsoDate = (dateToPurify?: string) => getIsoDate(getPureDate(dateToPurify));\n const getPureFormattedDate = (dateToPurify?: string) => getFormattedDate(getPureDate(dateToPurify));\n\n describe('when input has focus', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n calendar = await page.find('q2-calendar');\n popover = await page.find('q2-calendar >>> q2-popover');\n input = await page.find(\"q2-calendar >>> [test-id='inputAndCalendarToggle']\");\n\n expect(popover).not.toHaveAttribute('open');\n await input.focus();\n });\n\n it('opens the dialog, and focuses the current day on Enter', async () => {\n await input.press('Enter');\n await page.waitForChanges();\n\n expect(popover).toHaveAttribute('open');\n\n const getActiveElement = async (page: E2EPage) =>\n page.evaluate(() => {\n return Array.from(document.activeElement.shadowRoot.activeElement.classList);\n });\n\n expect(await getActiveElement(page)).toContain('is-selected');\n });\n\n it('opens the dialog, and moves focus to current date on ArrowDown', async () => {\n await input.press('ArrowDown');\n await page.waitForChanges();\n await page.waitForSelector('q2-calendar >>> td:focus');\n\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedDate(page)).toEqual(getPureIsoDate());\n });\n\n describe('when input has a value', () => {\n beforeEach(async () => {\n calendar.setProperty('value', date);\n await page.waitForChanges();\n });\n\n it('opens the dialog, and moves focus to specified date on ArrowDown', async () => {\n await input.press('ArrowDown');\n await page.waitForChanges();\n\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedDate(page)).toEqual(getPureIsoDate(date));\n });\n });\n });\n\n describe('when dialog is open and input has focus', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n await page.waitForChanges();\n\n calendar = await page.find('q2-calendar');\n popover = await page.find('q2-calendar >>> q2-popover');\n input = await page.find(\"q2-calendar >>> [test-id='inputAndCalendarToggle']\");\n\n input.focus();\n await input.press('Enter');\n await page.waitForChanges();\n expect(popover).toHaveAttribute('open');\n });\n\n it('closes the dialog, and keeps focus on input on Escape', async () => {\n await input.press('Escape');\n await page.waitForChanges();\n expect(popover).not.toHaveAttribute('open');\n expect(await innerInputTestId(page)).toEqual('inputField');\n });\n\n it('closes the dialog, and keeps focus on input on Enter', async () => {\n await input.press('Enter');\n expect(popover).not.toHaveAttribute('open');\n expect(await innerInputTestId(page)).toEqual('inputField');\n });\n });\n\n describe('when dialog is open and has focus', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-calendar></q2-calendar>`,\n });\n\n calendar = await page.find('q2-calendar');\n table = await page.find('q2-calendar >>> table');\n popover = await page.find('q2-calendar >>> q2-popover');\n input = await page.find(\"q2-calendar >>> [test-id='inputAndCalendarToggle']\");\n\n await calendar.setProperty('value', date);\n await page.waitForChanges();\n\n await dispatchEvent(page, ['q2-calendar', \"[test-id='inputAndCalendarToggle']\"], 'keydown', {\n key: 'ArrowDown',\n });\n\n expect(popover).toHaveAttribute('open');\n expect(await getFocusedDate(page)).toEqual(getPureIsoDate(date));\n });\n\n it('closes the dialog, and moves focus to input on Escape', async () => {\n await table.press('Escape');\n await page.waitForChanges();\n expect(popover).not.toHaveAttribute('open');\n });\n\n describe('when calendar grid has focus', () => {\n it('sets the value, and focuses input on Space', async () => {\n await table.press('Space');\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual(getPureFormattedDate(date));\n expect(popover).not.toHaveAttribute('open');\n });\n it('sets the value, closes the dialog, and focuses input on Enter', async () => {\n await table.press('Enter');\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual(getPureFormattedDate(date));\n expect(popover).not.toHaveAttribute('open');\n });\n it('moves focus to the same day of the previous week on ArrowUp', async () => {\n await table.press('ArrowUp');\n await page.waitForChanges();\n const expectedDate = addDays(getPureDate(date), -7);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('moves focus to the same day of the next week on ArrowDown', async () => {\n await table.press('ArrowDown');\n await page.waitForChanges();\n const expectedDate = addDays(getPureDate(date), 7);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('moves focus to the next day on ArrowRight', async () => {\n await table.press('ArrowRight');\n await page.waitForChanges();\n const expectedDate = addDays(getPureDate(date), 1);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('moves focus to the previous day on ArrowLeft', async () => {\n await table.press('ArrowLeft');\n await page.waitForChanges();\n const expectedDate = addDays(getPureDate(date), -1);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('moves focus to the first day of the week on Home', async () => {\n await table.press('Home');\n await page.waitForChanges();\n const expectedDate = addDays(getPureDate(date), -3);\n expect(expectedDate.getDay()).toEqual(0);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('moves focus to the last day of the week on End', async () => {\n await table.press('End');\n const expectedDate = addDays(getPureDate(date), 3);\n expect(expectedDate.getDay()).toEqual(6);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('changes calendar to previous month, focuses same day of same week on PageUp', async () => {\n await table.press('PageUp');\n await page.waitForChanges();\n const initialDate = getPureDate(date);\n const expectedDate = getPureDate('2017-01-04');\n expect(initialDate.getDay()).toEqual(expectedDate.getDay());\n expect(getWeekOfMonth(initialDate)).toEqual(getWeekOfMonth(expectedDate));\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('changes calendar to next month, focuses same day of same week on PageDown', async () => {\n await table.press('PageDown');\n await page.waitForChanges();\n const initialDate = getPureDate(date);\n const expectedDate = getPureDate('2017-03-01');\n expect(initialDate.getDay()).toEqual(expectedDate.getDay());\n expect(getWeekOfMonth(initialDate)).toEqual(getWeekOfMonth(expectedDate));\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('changes calendar to next month, and focuses the closest available day PageDown', async () => {\n await calendar.setProperty('value', '2017-03-01');\n await page.waitForChanges();\n expect(await getFocusedDate(page)).toEqual(getPureIsoDate('2017-03-01'));\n await table.press('PageDown');\n await page.waitForChanges();\n const expectedDate = getPureDate('2017-04-01');\n expect(expectedDate.getDay()).toEqual(6);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('changes calendar to previous month, and focuses the closest available day PageUp', async () => {\n await calendar.setProperty('value', '2017-06-30');\n await page.waitForChanges();\n const lastDayOfMonth = await page.find(\"q2-calendar >>> td[data-day='30']\");\n await lastDayOfMonth.focus();\n await table.press('PageUp');\n await page.waitForChanges();\n const expectedDate = getPureDate('2017-05-31');\n expect(expectedDate.getDay()).toEqual(3);\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('changes calendar to previous year, focuses same day of same week on Shift+PageUp', async () => {\n await page.keyboard.down('Shift');\n await table.press('PageUp');\n await page.waitForChanges();\n const initialDate = getPureDate(date);\n const expectedDate = getPureDate('2016-02-03');\n expect(initialDate.getDay()).toEqual(expectedDate.getDay());\n expect(getWeekOfMonth(initialDate)).toEqual(getWeekOfMonth(expectedDate));\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n it('changes calendar to next year, focuses same day of same week on Shift+PageDown', async () => {\n await page.keyboard.down('Shift');\n await table.press('PageDown');\n await page.waitForChanges();\n const initialDate = getPureDate(date);\n const expectedDate = getPureDate('2018-02-01');\n expect(expectedDate.getDay()).toEqual(4);\n expect(getWeekOfMonth(initialDate)).toEqual(getWeekOfMonth(expectedDate));\n expect(await getFocusedDate(page)).toEqual(getIsoDate(expectedDate));\n });\n });\n });\n });\n describe('Other', () => {});\n });\n});\n"]}
|