q2-tecton-elements 1.53.1 → 1.53.3
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/cjs/click-elsewhere_2.cjs.entry.js +73 -69
- package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
- package/dist/cjs/{index-07285783.js → index-7aecfed8.js} +30 -18
- package/dist/cjs/index-7aecfed8.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 +4 -2
- 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-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 +2 -2
- package/dist/cjs/q2-message.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.cjs.entry.js +1 -1
- package/dist/cjs/q2-option.cjs.entry.js +2 -2
- 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 +130 -14
- 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/click-elsewhere/click-elsewhere.js.map +1 -1
- package/dist/collection/components/click-elsewhere/test/click-elsewhere-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-action-group/q2-action-group.js +1 -1
- package/dist/collection/components/q2-action-group/q2-action-group.js.map +1 -1
- package/dist/collection/components/q2-action-group/test/q2-action-group.e2e.js.map +1 -1
- package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js.map +1 -1
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
- package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
- package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
- package/dist/collection/components/q2-avatar/q2-avatar.js.map +1 -1
- package/dist/collection/components/q2-avatar/test/q2-avatar-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-badge/q2-badge.js.map +1 -1
- package/dist/collection/components/q2-badge/test/q2-badge-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
- package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar-helpers.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar-types.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar-validation.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
- package/dist/collection/components/q2-calendar/q2-month-picker.js.map +1 -1
- package/dist/collection/components/q2-calendar/test/helpers-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-calendar/test/q2-calendar-month-picker-test.e2e.js.map +1 -1
- 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-calendar/test/validation-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-card/q2-card.js.map +1 -1
- package/dist/collection/components/q2-card/test/q2-card-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
- package/dist/collection/components/q2-carousel/test/q2-carousel-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
- package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js.map +1 -1
- package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.spec.js.map +1 -1
- package/dist/collection/components/q2-chart-area/q2-chart-area.js +1 -1
- package/dist/collection/components/q2-chart-area/q2-chart-area.js.map +1 -1
- package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +1 -1
- package/dist/collection/components/q2-chart-bar/q2-chart-bar.js.map +1 -1
- package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
- package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
- package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-checkbox/q2-checkbox.js.map +1 -1
- package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js.map +1 -1
- package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-currency/q2-currency.js +1 -1
- package/dist/collection/components/q2-currency/q2-currency.js.map +1 -1
- package/dist/collection/components/q2-currency/test/q2-currency-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
- package/dist/collection/components/q2-data-table/test/q2-data-table-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-detail/q2-detail.js +1 -1
- package/dist/collection/components/q2-detail/q2-detail.js.map +1 -1
- package/dist/collection/components/q2-detail/test/q2-detail-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-dropdown/q2-dropdown.js +3 -1
- package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
- package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +5 -17
- package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
- package/dist/collection/components/q2-dropdown-item/test/q2-dropdown-item-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-editable-field/q2-editable-field.js.map +1 -1
- package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-example/q2-example.js +1 -1
- package/dist/collection/components/q2-example/q2-example.js.map +1 -1
- package/dist/collection/components/q2-example/test/q2-example.e2e.js.map +1 -1
- package/dist/collection/components/q2-example/test/q2-example.spec.js.map +1 -1
- package/dist/collection/components/q2-file-picker/q2-file-picker.js.map +1 -1
- package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.spec.js.map +1 -1
- package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
- package/dist/collection/components/q2-formatted-text/q2-formatted-text.js.map +1 -1
- package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-icon/q2-icon-types.js.map +1 -1
- package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
- package/dist/collection/components/q2-icon/test/q2-icon-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/alpha.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/alpha.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/alphanumeric.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/alphanumeric.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/credit-card.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/credit-card.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/currency.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/currency.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/date.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/date.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/generic.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/number.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/numeric.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/numeric.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/phone.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/phone.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/postal.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/postal.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/ssn.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/ssn.spec.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/tin.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/tin.spec.js.map +1 -1
- package/dist/collection/components/q2-input/q2-input-types.js.map +1 -1
- package/dist/collection/components/q2-input/q2-input.js +1 -1
- package/dist/collection/components/q2-input/q2-input.js.map +1 -1
- package/dist/collection/components/q2-input/test/q2-input-credit-card-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-input/test/q2-input-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-input/test/q2-input-test.spec.js.map +1 -1
- package/dist/collection/components/q2-item/q2-item.js +1 -1
- package/dist/collection/components/q2-item/q2-item.js.map +1 -1
- package/dist/collection/components/q2-item/test/q2-item-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-item/test/q2-item-test.spec.js.map +1 -1
- package/dist/collection/components/q2-legend/q2-legend.js +1 -1
- package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
- package/dist/collection/components/q2-legend/test/q2-legend-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-legend/test/q2-legend-test.spec.js.map +1 -1
- package/dist/collection/components/q2-link/q2-link.js.map +1 -1
- package/dist/collection/components/q2-link/test/q2-link-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-list/q2-list.js +1 -1
- package/dist/collection/components/q2-list/q2-list.js.map +1 -1
- package/dist/collection/components/q2-list/test/q2-list-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
- package/dist/collection/components/q2-loading/skeleton/q2-loading-element/index.js.map +1 -1
- package/dist/collection/components/q2-loading/skeleton/shapes.js.map +1 -1
- package/dist/collection/components/q2-loading/test/q2-loading-element-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-loading/test/q2-loading-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-loc/q2-loc.js +1 -1
- package/dist/collection/components/q2-loc/q2-loc.js.map +1 -1
- package/dist/collection/components/q2-loc/test/q2-loc-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-loc/test/q2-loc-test.spec.js.map +1 -1
- package/dist/collection/components/q2-message/q2-message.js +1 -1
- package/dist/collection/components/q2-message/q2-message.js.map +1 -1
- package/dist/collection/components/q2-message/test/q2-message-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
- package/dist/collection/components/q2-optgroup/q2-optgroup.js.map +1 -1
- package/dist/collection/components/q2-optgroup/test/q2-optgroup-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-option/q2-option.js +1 -1
- package/dist/collection/components/q2-option/q2-option.js.map +1 -1
- package/dist/collection/components/q2-option/test/q2-option-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-option/test/q2-option-test.spec.js.map +1 -1
- package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
- package/dist/collection/components/q2-option-list/test/q2-option-list-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
- package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
- 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-pill/q2-pill.js.map +1 -1
- package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js +2 -2
- package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-popover/q2-popover.css +18 -10
- package/dist/collection/components/q2-popover/q2-popover.js +74 -69
- 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 +902 -511
- package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js.map +1 -1
- package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
- package/dist/collection/components/q2-radio/test/q2-radio-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-radio-group/q2-radio-group.js.map +1 -1
- package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
- package/dist/collection/components/q2-relative-time/q2-relative-time.js.map +1 -1
- package/dist/collection/components/q2-relative-time/test/q2-relative-time-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
- package/dist/collection/components/q2-resize-observer/q2-resize-observer.js.map +1 -1
- package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.e2e.js.map +1 -1
- package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.spec.js.map +1 -1
- package/dist/collection/components/q2-section/q2-section.js +2 -2
- package/dist/collection/components/q2-section/q2-section.js.map +1 -1
- package/dist/collection/components/q2-section/test/q2-section-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-select/q2-select.js +151 -16
- package/dist/collection/components/q2-select/q2-select.js.map +1 -1
- package/dist/collection/components/q2-select/test/q2-select-test.e2e.js +1 -1
- package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-select/test/q2-select-test.spec.js +552 -0
- package/dist/collection/components/q2-select/test/q2-select-test.spec.js.map +1 -0
- package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
- package/dist/collection/components/q2-stepper/q2-stepper.js.map +1 -1
- package/dist/collection/components/q2-stepper/test/q2-stepper-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js.map +1 -1
- package/dist/collection/components/q2-stepper-pane/test/q2-stepper-pane-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
- package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js.map +1 -1
- package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
- package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
- package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.spec.js.map +1 -1
- package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
- package/dist/collection/components/q2-tab-pane/q2-tab-pane.js.map +1 -1
- package/dist/collection/components/q2-tab-pane/test/q2-tab-pane-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-tag/q2-tag.js +1 -1
- package/dist/collection/components/q2-tag/q2-tag.js.map +1 -1
- package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +6 -1
- 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/q2-textarea/q2-textarea.js.map +1 -1
- package/dist/collection/components/q2-textarea/test/q2-textarea-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
- package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.e2e.js.map +1 -1
- package/dist/collection/components/tecton-tab-pane/tecton-tab-pane-types.js.map +1 -1
- package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
- package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js.map +1 -1
- package/dist/collection/components/tecton-tab-pane/test/tecton-tab-pane-test.e2e.js.map +1 -1
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/utils/action-sheet.js.map +1 -1
- package/dist/collection/utils/charting.js.map +1 -1
- package/dist/collection/utils/helpers.js.map +1 -1
- package/dist/collection/utils/index.js +37 -0
- package/dist/collection/utils/index.js.map +1 -1
- package/dist/collection/utils/sanitize-html-string.js.map +1 -1
- package/dist/collection/utils/sanitize-regex-string.js.map +1 -1
- package/dist/collection/utils/test/action-sheet-test.e2e.js.map +1 -1
- package/dist/collection/utils/test/index.spec.js.map +1 -1
- package/dist/components/index2.js +29 -17
- package/dist/components/index2.js.map +1 -1
- package/dist/components/q2-action-group.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 +3 -1
- package/dist/components/q2-dropdown.js.map +1 -1
- package/dist/components/q2-example.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-loc.js +1 -1
- package/dist/components/q2-message2.js +1 -1
- package/dist/components/q2-month-picker.js +2 -2
- package/dist/components/q2-optgroup2.js +1 -1
- package/dist/components/q2-option2.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 +73 -69
- 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 +133 -17
- 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/click-elsewhere_2.entry.js +73 -69
- package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
- package/dist/esm/{index-d18e2a20.js → index-99c46474.js} +30 -18
- package/dist/esm/index-99c46474.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 +4 -2
- 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-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 +2 -2
- package/dist/esm/q2-message.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.entry.js +1 -1
- package/dist/esm/q2-option.entry.js +2 -2
- 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 +131 -15
- 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/jest.setup.js +33 -0
- package/dist/jest.setup.js.map +1 -0
- package/dist/q2-tecton-elements/click-elsewhere_2.entry.js +103 -92
- package/dist/q2-tecton-elements/click-elsewhere_2.entry.js.map +1 -1
- package/dist/q2-tecton-elements/{index-d18e2a20.js → index-99c46474.js} +24 -17
- package/dist/q2-tecton-elements/index-99c46474.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 +34 -34
- package/dist/q2-tecton-elements/q2-avatar.entry.js +6 -6
- package/dist/q2-tecton-elements/q2-badge_7.entry.js +17 -17
- 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 +101 -101
- 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 +13 -11
- package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-editable-field.entry.js +8 -8
- 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-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 +2 -2
- package/dist/q2-tecton-elements/q2-message.entry.js +21 -21
- package/dist/q2-tecton-elements/q2-month-picker.entry.js +14 -14
- package/dist/q2-tecton-elements/q2-optgroup.entry.js +8 -8
- package/dist/q2-tecton-elements/q2-option-list.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-option.entry.js +14 -14
- package/dist/q2-tecton-elements/q2-pagination.entry.js +34 -34
- package/dist/q2-tecton-elements/q2-pill.entry.js +14 -14
- package/dist/q2-tecton-elements/q2-radio-group.entry.js +5 -5
- package/dist/q2-tecton-elements/q2-radio.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-resize-observer.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-section.entry.js +19 -19
- package/dist/q2-tecton-elements/q2-select.entry.js +196 -93
- 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 +37 -37
- package/dist/q2-tecton-elements/q2-stepper.entry.js +29 -29
- package/dist/q2-tecton-elements/q2-tag.entry.js +25 -25
- 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/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +10 -0
- package/dist/types/components/q2-popover/q2-popover.d.ts +4 -4
- package/dist/types/components/q2-select/q2-select.d.ts +23 -0
- package/dist/types/utils/index.d.ts +3 -0
- package/package.json +3 -3
- package/dist/cjs/index-07285783.js.map +0 -1
- package/dist/esm/index-d18e2a20.js.map +0 -1
- package/dist/q2-tecton-elements/index-d18e2a20.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"q2-input-test.spec.js","sourceRoot":"","sources":["../../../../src/components/q2-input/test/q2-input-test.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { SpecPage } from '@stencil/core/testing';\nimport { setupSpecPageWithLoc } from '@/utils/helpers';\nimport {\n getAriaValueFromProp,\n handleAriaLabel,\n overrideFocus,\n setMessageHeight,\n nextPaint,\n} from '../../../utils/index';\nimport * as formatCurrency from '../formatting/currency';\nimport * as formatPhoneNumber from '../formatting/phone';\nimport * as formatSSN from '../formatting/ssn';\nimport * as formatTIN from '../formatting/tin';\nimport * as formatAlphanumeric from '../formatting/alphanumeric';\nimport * as formatAlpha from '../formatting/alpha';\nimport * as formatNumeric from '../formatting/numeric';\nimport * as formatPostalCode from '../formatting/postal';\nimport * as formatDate from '../formatting/date';\nimport * as formatCreditCard from '../formatting/credit-card';\nimport { Q2Input } from '../q2-input';\n\n// function we want to validate are being called\nconst overrideFocusMock = jest.fn();\nconst handleAriaLabelMock = jest.fn();\nconst setMessageHeightMock = jest.fn();\nconst nextPaintMock = jest.fn();\nconst getSelectionMock = jest.fn().mockImplementation(() => ({ toString: () => '' }));\nconst setSelectionRangeMock = jest.fn();\n\n// reassigning the helper functions to their mocks\n(overrideFocus as any) = overrideFocusMock;\n(handleAriaLabel as any) = handleAriaLabelMock;\n(setMessageHeight as any) = setMessageHeightMock;\n(nextPaint as any) = nextPaintMock;\n\ndescribe('q2-input', () => {\n let specPage: SpecPage;\n let inputClass;\n let inputElement;\n let containerElement;\n const translationStringsDict = {\n 'tecton.element.input.label': 'My Label',\n 'tecton.element.input.placeholder': 'My Placeholder',\n 'tecton.element.input.error': 'My Error',\n 'tecton.element.input.hint': 'My Hint',\n 'tecton.element.input.optional': '(optional)',\n 'tecton.element.input.readonly': '(read only)',\n 'tecton.element.input.toggleAriaLabel.hide': 'Hide',\n 'tecton.element.input.toggleAriaLabel.show': 'Show',\n };\n\n beforeEach(() => {\n // create our own methods in the test environment so we can validate our cursor method logic\n let selectionText = '';\n\n Object.defineProperty(window, 'getSelection', { value: getSelectionMock, writable: true });\n Object.defineProperty(Q2Input.prototype, 'selectionStart', {\n configurable: true,\n get: function () {\n return this._selectionStart || 0;\n },\n set: function (value) {\n this._selectionStart = value;\n if (value !== this._selectionEnd) {\n selectionText = this.value.substring(value, this._selectionEnd || 0);\n }\n },\n });\n\n Object.defineProperty(Q2Input.prototype, 'selectionEnd', {\n configurable: true,\n get: function () {\n return this._selectionEnd || 0;\n },\n set: function (value) {\n this._selectionEnd = value;\n if (this._selectionStart !== value) {\n selectionText = this.value.substring(this._selectionStart || 0, value);\n }\n },\n });\n\n HTMLInputElement.prototype.setSelectionRange = function (start, end, direction = 'none') {\n this._selectionStart = start;\n this._selectionEnd = end;\n this._selectionDirection = direction;\n selectionText = this.value.substring(start, end);\n };\n\n // add a getSelection method to the window object in the test environment\n // @ts-expect-error (TS doesn't like overriding window.getSelection)\n window.getSelection = () => {\n return {\n toString: () => {\n return selectionText || '';\n },\n };\n };\n\n // compensates for the errors when InputEvent is not available in the test environment\n if (typeof InputEvent === 'undefined') {\n // @ts-expect-error (TS doesn't like the limited implementation of the InputEvent)\n global.InputEvent = class InputEvent extends Event {\n constructor(type: 'string', options = {}) {\n super(type, options);\n }\n };\n }\n });\n\n afterEach(() => {\n // clear mocks\n overrideFocusMock.mockClear();\n handleAriaLabelMock.mockClear();\n setMessageHeightMock.mockClear();\n nextPaintMock.mockClear();\n getSelectionMock.mockClear();\n setSelectionRangeMock.mockClear();\n });\n\n describe('Localization', () => {\n it('localizes label', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"tecton.element.input.label\"></q2-input>',\n },\n translationStringsDict\n );\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label');\n });\n it('localizes placeholder', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input placeholder=\"tecton.element.input.placeholder\"></q2-input>',\n },\n translationStringsDict\n );\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('placeholder')).toBe('My Placeholder');\n });\n it('localizes error message', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n },\n translationStringsDict\n );\n inputClass = specPage.rootInstance;\n inputClass.errors = ['tecton.element.input.error'];\n await specPage.waitForChanges();\n const errorElement = specPage.root.shadowRoot.querySelector('.messages-container');\n expect(errorElement).toEqualText('My Error');\n });\n it('localizes hint message', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n },\n translationStringsDict\n );\n inputClass = specPage.rootInstance;\n inputClass.hints = ['tecton.element.input.hint'];\n await specPage.waitForChanges();\n const hintElement = specPage.root.shadowRoot.querySelector('.messages-container');\n expect(hintElement).toEqualText('My Hint');\n });\n it('localizes optional label', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" optional></q2-input>',\n },\n translationStringsDict\n );\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label(optional)');\n });\n it('localizes readonly label', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" readonly></q2-input>',\n },\n translationStringsDict\n );\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label(read only)');\n });\n });\n\n describe('Props', () => {\n describe('_preventEntry', () => {\n it('sets readonly attribute true without adding the (readonly) label', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" _prevent-entry></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(inputElement).toHaveAttribute('readonly');\n expect(label).toEqualText('My Label');\n expect(label).not.toEqualText('My Label (readonly)');\n });\n it('prevents user input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" _prevent-entry></q2-input>',\n });\n inputElement = specPage.root;\n inputElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'a' }));\n expect(inputElement.value).toBeUndefined();\n });\n });\n describe('_role', () => {\n it('is null by default', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root;\n expect(inputElement.getAttribute('role')).toBeNull();\n });\n it('sets the role attribute on the input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" _role=\"combobox\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('role')).toBe('combobox');\n });\n });\n describe('ariaActivedescendant', () => {\n it('sets the aria-activedescendant attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" aria-activedescendant=\"my-id\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-activedescendant')).toBe('my-id');\n });\n });\n describe('ariaExpanded', () => {\n it('sets the value of the aria-expanded attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" aria-expanded=\"true\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-expanded')).toBe('true');\n });\n it('is not added when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.hasAttribute('aria-expanded')).toBe(false);\n });\n });\n describe('ariaHaspopup', () => {\n const hasPopupValues = ['true', 'false', 'menu', 'listbox', 'tree', 'grid', 'dialog'];\n hasPopupValues.forEach(value => {\n it(`sets aria-haspopup attribute to \"${value}\" when provided \"${value}\"`, async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: `<q2-input label=\"My Label\" aria-haspopup=\"${value}\"></q2-input>`,\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-haspopup')).toBe(value);\n });\n });\n it('is not added when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.hasAttribute('aria-haspopup')).toBe(false);\n });\n it('is set as an empty string when provided with no value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" aria-haspopup></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-haspopup')).toBe('');\n });\n it('is set to null when provided an invalid value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" aria-haspopup=\"invalid\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-haspopup')).toBeNull();\n });\n });\n describe('ariaLabel', () => {\n it('is set to null when provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" aria-label=\"My Aria Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-label')).toBeNull();\n });\n });\n describe('ariaOwns', () => {\n it('sets the value of the aria-owns attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" aria-owns=\"my-id\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-owns')).toBe('my-id');\n });\n });\n describe('autocapitalize', () => {\n it('sets the value of the autocapitalize attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" autocapitalize=\"words\"></q2-input>',\n });\n inputElement = specPage.root;\n expect(inputElement.getAttribute('autocapitalize')).toBe('words');\n });\n });\n describe('autocomplete', () => {\n it('sets the value of the autocomplete attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" autocomplete=\"on\"></q2-input>',\n });\n inputElement = specPage.root;\n expect(inputElement.getAttribute('autocomplete')).toBe('on');\n });\n });\n describe('autocorrect', () => {\n it('sets the value of the autocorrect attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" autocorrect=\"on\"></q2-input>',\n });\n inputElement = specPage.root;\n expect(inputElement.getAttribute('autocorrect')).toBe('on');\n });\n });\n describe('autofocus', () => {\n it('sets the value of the autofocus attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.autofocus = true;\n await specPage.waitForChanges();\n inputElement = specPage.root;\n expect(inputElement).toHaveAttribute('autofocus');\n });\n it('focuses the <input> element when true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.autofocus = true;\n inputClass.componentDidLoad();\n await specPage.waitForChanges();\n expect(focusSpy).toHaveBeenCalled();\n });\n });\n describe('badgeTheme', () => {\n it('sets the badge theme to primary', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" badge-value=\"4\" badge-theme=\"primary\"></q2-input>',\n });\n inputElement = specPage.root;\n const badge = specPage.root.shadowRoot.querySelector('q2-badge');\n expect(inputElement.getAttribute('badge-theme')).toBe('primary');\n expect(badge.getAttribute('theme')).toBe('primary');\n });\n it('sets the badge theme to secondary', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" badge-value=\"4\" badge-theme=\"secondary\"></q2-input>',\n });\n inputElement = specPage.root;\n const badge = specPage.root.shadowRoot.querySelector('q2-badge');\n expect(inputElement.getAttribute('badge-theme')).toBe('secondary');\n expect(badge.getAttribute('theme')).toBe('secondary');\n });\n it('sets the badge theme to tertiary', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" badge-value=\"4\" badge-theme=\"tertiary\"></q2-input>',\n });\n inputElement = specPage.root;\n const badge = specPage.root.shadowRoot.querySelector('q2-badge');\n expect(inputElement.getAttribute('badge-theme')).toBe('tertiary');\n expect(badge.getAttribute('theme')).toBe('tertiary');\n });\n });\n describe('badgeValue', () => {\n it('displays a q2-badge on the right side of the input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" badge-value=\"4\"></q2-input>',\n });\n const badge = specPage.root.shadowRoot.querySelector('q2-badge');\n expect(badge).not.toBeNull();\n });\n it('displays the provided value as a q2-badge', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" badge-value=\"4\"></q2-input>',\n });\n inputElement = specPage.root;\n const badge = specPage.root.shadowRoot.querySelector('q2-badge');\n expect(inputElement.getAttribute('badge-value')).toBe('4');\n expect(badge).toEqualText('4');\n });\n });\n describe('clearable', () => {\n it('renders a clear button in the input-icons-container-right <div>', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable></q2-input>',\n });\n containerElement = specPage.root.shadowRoot.querySelector('.input-icons-container-right');\n const clearButton = containerElement.querySelector('[test-id=\"clearButton\"]');\n expect(clearButton).not.toBeNull();\n });\n });\n describe('current', () => {\n it('sets the value of the aria-current attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" current=\"page\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-current')).toBe('page');\n });\n });\n describe('disabled', () => {\n it('sets the value of the disabled attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" disabled></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement).toHaveAttribute('disabled');\n });\n it('prevents user input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" disabled></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'a' }));\n expect(inputElement.value).toBe('');\n });\n it('prevents focusing the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" disabled></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.focus();\n expect(document.activeElement).not.toEqual(inputElement);\n });\n });\n describe('errors', () => {\n it('displays an error message', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n await specPage.waitForChanges();\n const errorElement = specPage.root.shadowRoot.querySelector('.messages-container');\n expect(errorElement).toEqualText('My Error');\n });\n it('displays multiple error messages in an unordered list', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error', 'Another Error'];\n await specPage.waitForChanges();\n const message = specPage.root.shadowRoot.querySelector('.messages-container');\n expect(message).not.toBeNull();\n const listItems = message.querySelectorAll('li');\n expect(listItems.length).toBe(2);\n expect(listItems[0]).toEqualText('My Error');\n expect(listItems[1]).toEqualText('Another Error');\n });\n });\n describe('formatModifiers', () => {\n it('sets the value of the formatModifiers attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" format-modifiers=\"currency\"></q2-input>',\n });\n inputElement = specPage.root;\n expect(inputElement.getAttribute('format-modifiers')).toBe('currency');\n });\n });\n describe('hideLabel', () => {\n it('hides the label when true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" hide-label></q2-input>',\n });\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toHaveClass('sr');\n });\n it('shows the label when false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" hide-label=\"false\"></q2-input>',\n });\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).not.toHaveClass('sr');\n });\n });\n describe('hideMessages', () => {\n describe('when true', () => {\n it('contributes to the showMessages() getter returning false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" hide-messages></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n expect(inputClass.showMessages).toBe(false);\n });\n });\n describe('when false', () => {\n it('contributes to the showMessages() getter returning true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" hide-messages=\"false\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n expect(inputClass.showMessages).toBe(true);\n });\n });\n });\n describe('hints', () => {\n it('displays a hint message', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hints = ['My Hint'];\n await specPage.waitForChanges();\n const hintElement = specPage.root.shadowRoot.querySelector('.messages-container');\n expect(hintElement).toEqualText('My Hint');\n });\n it('displays multiple hint messages in an unordered list', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hints = ['My Hint', 'Another Hint'];\n await specPage.waitForChanges();\n const message = specPage.root.shadowRoot.querySelector('.messages-container');\n expect(message).not.toBeNull();\n const listItems = message.querySelectorAll('li');\n expect(listItems.length).toBe(2);\n expect(listItems[0]).toEqualText('My Hint');\n expect(listItems[1]).toEqualText('Another Hint');\n });\n });\n describe('iconLeft', () => {\n it('renders an icon on the left side of the input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" icon-left=\"apple\"></q2-input>',\n });\n const icon = specPage.root.shadowRoot.querySelector('.icon-left');\n expect(icon).not.toBeNull();\n });\n it('does not render an icon when iconLeft is not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n const icon = specPage.root.shadowRoot.querySelector('.icon-left');\n expect(icon).toBeNull();\n });\n });\n describe('iconRight', () => {\n it('renders an icon on the right side of the input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" icon-right=\"apple\"></q2-input>',\n });\n const icon = specPage.root.shadowRoot.querySelector('.icon-right');\n expect(icon).not.toBeNull();\n });\n it('does not render an icon when iconRight is not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n const icon = specPage.root.shadowRoot.querySelector('.icon-right');\n expect(icon).toBeNull();\n });\n });\n describe('label', () => {\n it('displays the value in the <label> element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label');\n });\n });\n describe('max', () => {\n it('sets the value of the max attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" max=\"10\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('max')).toBe('10');\n });\n it('does not set the max attribute when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.hasAttribute('max')).toBe(false);\n });\n it('limits the incremented numerical value of the input field when type=\"number\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"number\" max=\"10\" value=\"10\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp' }));\n expect(inputElement.value).toBe('10');\n });\n });\n describe('maxLength', () => {\n it('sets the value of the maxlength attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" maxlength=\"10\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('maxlength')).toBe('10');\n });\n it('does not set the maxlength attribute when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.hasAttribute('maxlength')).toBe(false);\n });\n it('sets maxlength undefined if maxlength isNaN', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" maxlength=\"abc\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('maxlength')).toBeNull();\n });\n it('limits the number of characters entered into the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" maxlength=\"5\" value=\"abcde\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'f' }));\n expect(inputElement.value).toBe('abcde');\n });\n });\n describe('min', () => {\n it('sets the value of the min attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" min=\"10\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('min')).toBe('10');\n });\n it('does not set the min attribute when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.hasAttribute('min')).toBe(false);\n });\n it('limits the decremented numerical value of the input field when type=\"number\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"number\" min=\"10\" value=\"10\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown' }));\n expect(inputElement.value).toBe('10');\n });\n });\n describe('optional', () => {\n it('does not display the optional label when false', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" optional=\"false\"></q2-input>',\n },\n translationStringsDict\n );\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).not.toEqualText('My Label(optional)');\n });\n it('displays the optional label when true', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" optional></q2-input>',\n },\n translationStringsDict\n );\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label(optional)');\n });\n });\n describe('pattern', () => {\n it('sets the value of the pattern attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" pattern=\"[A-Za-z]{3}\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('pattern')).toBe('[A-Za-z]{3}');\n });\n it('does not set the pattern attribute when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.hasAttribute('pattern')).toBe(false);\n });\n });\n describe('placeholder', () => {\n it('sets the value of the placeholder attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input placeholder=\"My Placeholder\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('placeholder')).toBe('My Placeholder');\n });\n it('localizes the placeholder', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input placeholder=\"tecton.element.input.placeholder\"></q2-input>',\n },\n translationStringsDict\n );\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('placeholder')).toBe('My Placeholder');\n });\n });\n describe('pseudo', () => {\n it('displays the component as a button', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" pseudo></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.tagName).toBe('BUTTON');\n });\n });\n describe('readonly', () => {\n it('sets the value of the readonly attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" readonly></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement).toHaveAttribute('readonly');\n });\n it('localizes the readonly label', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" readonly></q2-input>',\n },\n translationStringsDict\n );\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label(read only)');\n });\n it('prevents user input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" readonly></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'a' }));\n expect(inputElement.value).toBe('');\n });\n });\n describe('role (deprecated)', () => {\n it('sets the role attribute in pseudo mode', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" role=\"combobox\" pseudo></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('role')).toBe('combobox');\n });\n });\n describe('showCount', () => {\n it('shows a character count element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" show-count></q2-input>',\n });\n const countElement = specPage.root.shadowRoot.querySelector('.count-tag');\n expect(countElement).not.toBeNull();\n });\n });\n describe('showVisibilityToggle', () => {\n describe('when type is \"text\"', () => {\n it('displays a visibility toggle button', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"text\" value=\"abc\" show-visibility-toggle></q2-input>',\n });\n const visibilityToggle = specPage.root.shadowRoot.querySelector('.btn-visibility-toggle');\n expect(visibilityToggle).not.toBeNull();\n });\n });\n describe('when type is \"password\"', () => {\n it('displays a visibility toggle button', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"password\" value=\"abc\" show-visibility-toggle></q2-input>',\n });\n const visibilityToggle = specPage.root.shadowRoot.querySelector('.btn-visibility-toggle');\n expect(visibilityToggle).not.toBeNull();\n });\n });\n describe('when type is \"ssn\"', () => {\n it('displays a visibility toggle button', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"123-45-6789\" show-visibility-toggle></q2-input>',\n });\n const visibilityToggle = specPage.root.shadowRoot.querySelector('.btn-visibility-toggle');\n expect(visibilityToggle).not.toBeNull();\n });\n });\n describe('when type is \"tin\"', () => {\n it('displays a visibility toggle button', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"tin\" value=\"12-3456789\" show-visibility-toggle></q2-input>',\n });\n const visibilityToggle = specPage.root.shadowRoot.querySelector('.btn-visibility-toggle');\n expect(visibilityToggle).not.toBeNull();\n });\n });\n it('translates the localized show/hide message on the visibility toggle button', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"password\" value=\"abc\" show-visibility-toggle></q2-input>',\n },\n translationStringsDict\n );\n inputClass = specPage.rootInstance;\n const visibilityToggle = specPage.root.shadowRoot.querySelector('.btn-visibility-toggle');\n expect(visibilityToggle.getAttribute('label')).toEqualText('Show');\n inputClass.textHidden = false;\n await specPage.waitForChanges();\n expect(visibilityToggle.getAttribute('label')).toEqualText('Hide');\n });\n it('switches the input type between \"text\" and \"password\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"text\" value=\"abc\" show-visibility-toggle></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('type')).toBe('text');\n inputClass.textHidden = true;\n await specPage.waitForChanges();\n expect(inputElement.getAttribute('type')).toBe('password');\n inputClass.textHidden = false;\n await specPage.waitForChanges();\n expect(inputElement.getAttribute('type')).toBe('text');\n });\n });\n describe('step', () => {\n it('sets the value of the input field step attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" step=\"2\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('step')).toBe('2');\n });\n });\n describe('textHidden', () => {\n it('defaults to true when type is \"password\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"password\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.textHidden).toBe(true);\n });\n it('defaults to false when type is not \"password\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.textHidden).toBe(false);\n });\n it('persists when added as an attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" text-hidden></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.textHidden).toBe(true);\n });\n });\n describe('type', () => {\n it('sets the value of the type attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input type=\"email\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('type')).toBe('email');\n });\n it('defaults to \"text\" when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('type')).toBe('text');\n });\n });\n describe('validity', () => {\n it('gets set when validateInput is called', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputClass.inputRef = inputElement;\n inputElement.value = '1';\n Object.defineProperty(inputElement, 'validity', {\n get: () => ({\n valid: false,\n patternMismatch: true,\n }),\n configurable: true,\n });\n inputClass.validateInput();\n expect(inputClass.validity).toEqual({\n valid: false,\n patternMismatch: true,\n });\n });\n });\n describe('value', () => {\n it('sets the value of the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.value).toBe('My Value');\n });\n it('does not set the value attribute when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.value).toBe('');\n });\n it('translates localized labels', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"tecton.element.input.label\"></q2-input>',\n },\n translationStringsDict\n );\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label');\n });\n });\n });\n\n describe('Events', () => {\n describe('change', () => {\n it('emits a change event when the input value is changed and loses focus', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const changeSpy = jest.spyOn(inputClass.change, 'emit');\n inputClass.value = 'My New Value';\n await specPage.waitForChanges();\n inputElement.blur();\n expect(changeSpy).toHaveBeenCalled();\n expect(changeSpy).toHaveBeenCalledWith({\n value: 'My New Value',\n formattedValue: 'My New Value',\n minFormattedLength: undefined,\n });\n });\n });\n\n describe('clear', () => {\n it('emits when the clear button is clicked', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\" clearable></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const clearSpy = jest.spyOn(inputClass.clear, 'emit');\n const clearButton: HTMLElement = specPage.root.shadowRoot.querySelector('[test-id=\"clearButton\"]');\n clearButton.click();\n expect(clearSpy).toHaveBeenCalled();\n });\n });\n\n describe('formatted', () => {\n it('emits when the input value is formatted', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const formattedSpy = jest.spyOn(inputClass.formatted, 'emit');\n inputElement.value = '12345678';\n inputElement.dispatchEvent(new Event('input'));\n expect(formattedSpy).toHaveBeenCalled();\n expect(formattedSpy).toHaveBeenCalledWith({\n value: '12345678',\n formattedValue: '123-45-678',\n fullyFormattedValue: '123-45-678',\n formattingCharacterCount: 2,\n unformattedValue: '12345678',\n minFormattedLength: 11,\n maxlength: 11,\n prefix: '',\n });\n });\n });\n\n describe('input', () => {\n it('emits when the input value is changed', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const inputSpy = jest.spyOn(inputClass.input, 'emit');\n inputElement.value = 'My Value';\n inputElement.dispatchEvent(new Event('input'));\n\n expect(inputSpy).toHaveBeenCalled();\n expect(inputSpy).toHaveBeenCalledWith({\n value: 'My Value',\n formattedValue: 'My Value',\n });\n });\n });\n\n describe('invalid', () => {\n it('emits when the input value is invalid according to the pattern attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" pattern=\"[a-zA-Z]\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputClass.inputRef = inputElement;\n const invalidSpy = jest.spyOn(inputClass.invalid, 'emit');\n inputElement.value = '1';\n Object.defineProperty(inputElement, 'validity', {\n get: () => ({\n valid: false,\n patternMismatch: true,\n }),\n configurable: true,\n });\n inputElement.dispatchEvent(new Event('input'));\n inputClass.validateInput();\n expect(invalidSpy).toHaveBeenCalled();\n });\n });\n });\n\n describe('Component Lifecycle Events', () => {\n describe('disconnectedCallback', () => {\n it('calls manageClearableResizeObserver', async () => {\n const originalManagedClearableResizeObserver = Q2Input.prototype.manageClearableResizeObserver;\n Q2Input.prototype.manageClearableResizeObserver = jest.fn();\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.disconnectedCallback();\n expect(Q2Input.prototype.manageClearableResizeObserver).toHaveBeenCalled();\n Q2Input.prototype.manageClearableResizeObserver = originalManagedClearableResizeObserver;\n });\n it('calls disconnect() on mutationObserver', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const disconnectMock = jest.fn();\n const mockMutationObserver = {\n disconnect: disconnectMock,\n };\n inputClass.mutationObserver = mockMutationObserver as unknown as MutationObserver;\n inputClass.disconnectedCallback();\n expect(disconnectMock).toHaveBeenCalled();\n });\n it('sets mutationObserver to null', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.disconnectedCallback();\n expect(inputClass.mutationObserver).toBeNull();\n });\n });\n describe('componentWillLoad', () => {\n it('sets maxlength to undefined if maxlength isNaN', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" maxlength=\"abc\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('maxlength')).toBeNull();\n });\n it('sets the value of the formattedValueObject', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.formattedValueObject).toEqual({\n value: 'My Value',\n formattedValue: 'My Value',\n minFormattedLength: undefined,\n formattingCharacterCount: 0,\n fullyFormattedValue: 'My Value',\n unformattedValue: 'My Value',\n });\n });\n describe('formattedValue getter', () => {\n it('defines formattedValue getter on host element', async () => {\n const definePropertySpy = jest.spyOn(Object, 'defineProperty');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n expect(definePropertySpy).toHaveBeenCalledWith(\n specPage.root,\n 'formattedValue',\n expect.objectContaining({ get: expect.any(Function) })\n );\n definePropertySpy.mockRestore();\n });\n it('getter returns correctly formatted value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"98765432\"></q2-input>',\n });\n expect(specPage.root.formattedValue).toBe('987-65-432');\n });\n it('returns empty string when formattedValueObject is null', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n specPage.rootInstance.formattedValueObject = null;\n expect(specPage.root.formattedValue).toBe('');\n });\n });\n it('calls handleAriaLabel()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n expect(handleAriaLabelMock).toHaveBeenCalled();\n });\n it('calls manageClearableResizeObserver()', async () => {\n const originalDefineProperty = Object.defineProperty;\n const originalManagedClearableResizeObserver = Q2Input.prototype.manageClearableResizeObserver;\n Object.defineProperty = jest.fn();\n Q2Input.prototype.manageClearableResizeObserver = jest.fn();\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(Q2Input.prototype.manageClearableResizeObserver).toHaveBeenCalled();\n Q2Input.prototype.manageClearableResizeObserver = originalManagedClearableResizeObserver;\n Object.defineProperty = originalDefineProperty;\n });\n });\n describe('componentDidLoad', () => {\n it('calls overrideFocus()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n expect(overrideFocusMock).toHaveBeenCalled();\n });\n it('sets the value of the input field to the formattedValue when not in pseudo mode', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputClass = specPage.rootInstance;\n expect(inputElement.value).toBe(inputClass.formattedValueObject.formattedValue);\n });\n it('calls focus on the inputField when autofocus is true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.autofocus = true;\n inputClass.componentDidLoad();\n await specPage.waitForChanges();\n expect(focusSpy).toHaveBeenCalled();\n });\n });\n });\n\n describe('Listeners', () => {\n describe('onHostElementChange', () => {\n it('fires when the change event is consumed', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n const hostElementChangeSpy = jest.spyOn(inputClass, 'onHostElementChange');\n inputElement.dispatchEvent(new Event('change'));\n expect(hostElementChangeSpy).toHaveBeenCalled();\n });\n });\n describe('onHostElementFocus', () => {\n it('fires when the focus event is consumed', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const hostElementFocusSpy = jest.spyOn(inputClass, 'onHostElementFocus');\n inputElement = specPage.root;\n inputElement.dispatchEvent(new FocusEvent('focus'));\n expect(hostElementFocusSpy).toHaveBeenCalled();\n });\n describe('when event is NOT from the host element', () => {\n it('does NOT call focus() on the input element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.focus = jest.fn();\n const focusSpy = jest.spyOn(inputElement, 'focus');\n const differentElement = document.createElement('div');\n const focusEvent = new FocusEvent('focus');\n focusEvent.composedPath = jest.fn().mockReturnValue([differentElement]);\n inputClass.onHostElementFocus(focusEvent);\n expect(focusSpy).not.toHaveBeenCalled();\n });\n });\n describe('when event is from the host element', () => {\n it('calls focus() on the input element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.focus = jest.fn();\n const focusEvent = new FocusEvent('focus');\n focusEvent.composedPath = jest.fn().mockReturnValue([inputClass.hostElement]);\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.onHostElementFocus(focusEvent);\n expect(focusSpy).toHaveBeenCalled();\n });\n });\n });\n });\n\n describe('Public Methods API', () => {\n describe('Public Methods', () => {\n describe('checkValidity', () => {\n it('fires checkValidity on the input element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n inputClass.inputRef = inputElement.shadowRoot.querySelector('.input-field');\n inputClass.inputRef.checkValidity = jest.fn();\n const inputCheckValiditySpy = jest.spyOn(inputClass.inputRef, 'checkValidity');\n inputClass.checkValidity();\n expect(inputCheckValiditySpy).toHaveBeenCalled();\n });\n it('fires validateInput local method', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n inputClass.inputRef = inputElement.shadowRoot.querySelector('.input-field');\n inputClass.inputRef.checkValidity = jest.fn();\n const validateInputSpy = jest.spyOn(inputClass, 'validateInput');\n inputClass.checkValidity();\n expect(validateInputSpy).toHaveBeenCalled();\n });\n it('emits invalid event when ValidityState object has `valid: false`', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" pattern=\"[a-zA-Z]\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n inputClass.inputRef = inputElement.shadowRoot.querySelector('.input-field');\n inputClass.inputRef.checkValidity = jest.fn();\n inputClass.inputRef.validity = { valid: false };\n const invalidSpy = jest.spyOn(inputClass.invalid, 'emit');\n inputClass.checkValidity();\n expect(invalidSpy).toHaveBeenCalled();\n });\n });\n });\n describe('Test Methods', () => {\n describe('clearValue', () => {\n describe('when clearable is false', () => {\n it('does nothing if clearable is false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n inputClass.clearValue();\n expect(inputClass.value).toBe('My Value');\n });\n });\n\n describe('when clearable is true', () => {\n it('fires onClearInput local method', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n const clearInputSpy = jest.spyOn(inputClass, 'onClearInput');\n inputClass.clearValue();\n expect(clearInputSpy).toHaveBeenCalled();\n });\n it('emits input event with empty values', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n const inputSpy = jest.spyOn(inputClass.input, 'emit');\n inputClass.clearValue();\n expect(inputSpy).toHaveBeenCalledWith({\n value: '',\n formattedValue: '',\n minFormattedLength: undefined,\n });\n });\n it('emits change event with empty values', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n const changeSpy = jest.spyOn(inputClass.change, 'emit');\n inputClass.clearValue();\n expect(changeSpy).toHaveBeenCalledWith({\n value: '',\n formattedValue: '',\n minFormattedLength: undefined,\n });\n });\n it('emits clear event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n const clearSpy = jest.spyOn(inputClass.clear, 'emit');\n inputClass.clearValue();\n expect(clearSpy).toHaveBeenCalled();\n });\n it('calls focus() on the input element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.clearValue();\n expect(focusSpy).toHaveBeenCalled();\n });\n });\n });\n describe('setValue', () => {\n it('calls focus on the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.setValue('My Value');\n expect(focusSpy).toHaveBeenCalled();\n });\n it('dispatches a focus event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const dispatchEventSpy = jest.spyOn(inputElement, 'dispatchEvent');\n inputClass.setValue('My Value');\n const focusEvent = dispatchEventSpy.mock.calls[0][0] as FocusEvent;\n expect(focusEvent.type).toBe('focus');\n });\n it('updates the value of the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputClass.setValue('My Value');\n expect(inputElement.value).toBe('My Value');\n });\n it('updates the value of the input field with a formatted value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputClass.setValue('12345678');\n expect(inputElement.value).toBe('123-45-678');\n });\n it('dispatches an input event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const dispatchEventSpy = jest.spyOn(inputElement, 'dispatchEvent');\n inputClass.setValue('My Value');\n const inputEvent = dispatchEventSpy.mock.calls[1][0] as InputEvent;\n expect(inputEvent.type).toBe('input');\n });\n });\n });\n });\n\n describe('Watchers', () => {\n describe('ariaLabel', () => {\n it('ariaLabelObserver() calls handleAriaLabel() helper', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(handleAriaLabelMock).toHaveBeenCalledTimes(2); // initial calls\n inputClass.ariaLabel = 'My Aria Label';\n expect(handleAriaLabelMock).toHaveBeenCalledTimes(3);\n });\n });\n describe('clearable', () => {\n it('manageClearableResizeObserver() is called when clearable changes', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const resizeObserverSpy = jest.spyOn(inputClass, 'manageClearableResizeObserver');\n expect(resizeObserverSpy).not.toHaveBeenCalled();\n inputClass.clearable = false;\n expect(resizeObserverSpy).toHaveBeenCalled();\n });\n });\n describe('errors', () => {\n describe('when hasFocus is true', () => {\n it('errorsObserver() queues up setMessageHeight()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.scheduledAfterRender.length).toBe(0);\n inputClass.hasFocus = true;\n inputClass.errors = ['My Error'];\n expect(inputClass.scheduledAfterRender.length).toBe(1);\n });\n });\n describe('when hasFocus is false', () => {\n it('errorsObserver() does not queue up setMessageHeight()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.scheduledAfterRender.length).toBe(0);\n inputClass.hasFocus = false;\n inputClass.errors = ['My Error'];\n expect(inputClass.scheduledAfterRender.length).toBe(0);\n });\n });\n });\n describe('formatModifier', () => {\n it('calls formatAndUpdateValueFromProp() when formatModifier changes', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formatAndUpdateValueFromPropSpy = jest.spyOn(inputClass, 'formatAndUpdateValueFromProp');\n inputClass.formatModifier = 'ssn';\n expect(formatAndUpdateValueFromPropSpy).toHaveBeenCalled();\n });\n });\n describe('formattedValueObject', () => {\n it('emits the formatted event when formattedValueObject changes', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formattedSpy = jest.spyOn(inputClass.formatted, 'emit');\n const formattedValueObjectMock = {\n value: 'My New Value',\n formattedValue: 'My New Value',\n minFormattedLength: undefined,\n formattingCharacterCount: 0,\n fullyFormattedValue: 'My New Value',\n unformattedValue: 'My New Value',\n };\n inputClass.formattedValueObject = formattedValueObjectMock;\n expect(formattedSpy).toHaveBeenCalled();\n expect(formattedSpy).toHaveBeenCalledWith({\n ...formattedValueObjectMock,\n });\n });\n });\n describe('hints', () => {\n describe('when hasFocus is true', () => {\n it('hinstObserver() queues up setMessageHeight()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.scheduledAfterRender.length).toBe(0);\n inputClass.hasFocus = true;\n inputClass.hints = ['My Hint'];\n expect(inputClass.scheduledAfterRender.length).toBe(1);\n });\n });\n describe('when hasFocus is false', () => {\n it('hintsObserver() does not queue up setMessageHeight()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.scheduledAfterRender.length).toBe(0);\n inputClass.hasFocus = false;\n inputClass.hints = ['My Hint'];\n expect(inputClass.scheduledAfterRender.length).toBe(0);\n });\n });\n });\n describe('type', () => {\n it('typeObserver() calls formatAndUpdateValueFromProp()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formatAndUpdateValueFromPropSpy = jest.spyOn(inputClass, 'formatAndUpdateValueFromProp');\n inputClass.type = 'ssn';\n expect(formatAndUpdateValueFromPropSpy).toHaveBeenCalled();\n });\n });\n describe('value', () => {\n it('valueObserver() calls formatAndUpdateValueFromProp()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formatAndUpdateValueFromPropSpy = jest.spyOn(inputClass, 'formatAndUpdateValueFromProp');\n inputClass.value = 'New Value';\n expect(formatAndUpdateValueFromPropSpy).toHaveBeenCalled();\n });\n });\n });\n\n describe('Local Methods', () => {\n describe('Getters', () => {\n describe('ariaAttributes', () => {\n it('returns aria attributes object', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.ariaAttributes).toEqual({\n ariOwns: getAriaValueFromProp(inputClass.ariaOwns),\n ariaHasPopup: getAriaValueFromProp(inputClass.ariaHasPopup, [\n 'true',\n 'false',\n 'menu',\n 'listbox',\n 'tree',\n 'grid',\n 'dialog',\n ]),\n ariaExpanded: getAriaValueFromProp(inputClass.ariaExpanded, ['true', 'false']),\n ariaActiveDescendant: getAriaValueFromProp(inputClass.ariaActiveDescendant),\n });\n });\n });\n describe('canSetSelection', () => {\n describe('when computedType is \"email\"', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"email\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.canSetSelection).toBe(false);\n });\n });\n describe('when computedType is \"number\"', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"number\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.canSetSelection).toBe(false);\n });\n });\n describe('when computedType is neither \"email\" nor \"number\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.canSetSelection).toBe(true);\n });\n });\n });\n describe('clearClasses', () => {\n it('returns an array with \"btn-clear\" class', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.clearClasses).toContain('btn-clear');\n });\n describe('adds \"hidden\" class', () => {\n it('when clearable is false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable=\"false\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.value = '';\n expect(inputClass.clearClasses).toContain('hidden');\n });\n it('when value prop is falsy', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n expect(inputElement.value).toBeFalsy();\n expect(inputClass.clearClasses).toContain('hidden');\n });\n it('when input field value is falsy', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.value).toBeFalsy();\n expect(inputClass.clearClasses).toContain('hidden');\n });\n });\n });\n describe('computedAutocomplete', () => {\n describe('if type = \"currency\"', () => {\n it('returns transaction-amount', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedAutocomplete).toBe('transaction-amount');\n });\n });\n describe('when autocomplete is not set', () => {\n it('returns \"off\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedAutocomplete).toBe('off');\n });\n });\n describe('when autocomplete is set', () => {\n it('returns the value of autocomplete', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" autocomplete=\"on\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedAutocomplete).toBe('on');\n });\n });\n });\n describe('computedClassForIconLeft', () => {\n it('returns a string with \"icon-left\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedClassForIconLeft).toContain('icon-left');\n });\n describe('when leftIconMuted is true in formattedValueObject', () => {\n it('returns a string with \"icon-left-muted\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { leftIconMuted: true };\n expect(inputClass.computedClassForIconLeft).toContain('icon-left-muted');\n });\n });\n });\n describe('computedIconLeft', () => {\n it('returns \"iconLeft\" prop value by default', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" icon-left=\"apple\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedIconLeft).toBe('apple');\n });\n describe('when formattedValueObject has a prefix', () => {\n it('short circuits and returns undefined', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { prefix: 'My Prefix' };\n expect(inputClass.computedIconLeft).toBeUndefined();\n });\n });\n describe('when type=\"search\"', () => {\n it('returns \"search\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"search\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedIconLeft).toBe('search');\n });\n });\n describe('when formattedValueObject has a leftIcon value', () => {\n it('returns the leftIcon value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { leftIcon: 'My Left Icon' };\n expect(inputClass.computedIconLeft).toBe('My Left Icon');\n });\n });\n });\n describe('computedType', () => {\n describe('when provided an unsupported type', () => {\n it('returns \"text\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"unsupported\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedType).toBe('text');\n });\n });\n describe('when provided a supported type', () => {\n it('returns the valid type from the inputTypeMap object', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"phone\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedType).toBe('tel');\n });\n });\n describe('when textHidden prop is true', () => {\n describe('when type is \"password\"', () => {\n it('returns \"password\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"password\" text-hidden></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedType).toBe('password');\n });\n });\n describe('when type is \"text\"', () => {\n it('returns \"password\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"text\" text-hidden></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedType).toBe('password');\n });\n });\n describe('when type is \"ssn\"', () => {\n it('returns \"password\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" text-hidden></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedType).toBe('password');\n });\n });\n });\n });\n describe('hasCustomDisplaySlot', () => {\n it('returns true when an element uses the \"custom-display\" slot', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"><span slot=\"custom-display\">My Custom Display</span></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.hasCustomDisplaySlot).toBe(true);\n });\n it('returns false when no element uses the \"custom-display\" slot', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.hasCustomDisplaySlot).toBe(false);\n });\n });\n describe('hasError', () => {\n it('returns true when errors array is not empty', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n expect(inputClass.hasError).toBe(true);\n });\n it('returns false when errors array is empty', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = [];\n expect(inputClass.hasError).toBe(false);\n });\n });\n describe('hasInputLeftSlot', () => {\n it('returns true when an element uses the \"input-left\" slot', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"><span slot=\"input-left\">My Input Left</span></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.hasInputLeftSlot).toBe(true);\n });\n it('returns false when no element uses the \"input-left\" slot', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.hasInputLeftSlot).toBe(false);\n });\n });\n describe('hasInputRightSlot', () => {\n it('returns true when an element uses the \"input-right\" slot', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"><span slot=\"input-right\">My Input Right</span></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.hasInputRightSlot).toBe(true);\n });\n it('returns false when no element uses the \"input-right\" slot', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.hasInputRightSlot).toBe(false);\n });\n });\n describe('inputDescribedBy', () => {\n describe('when showMessages is true', () => {\n it('returns a string with the input guid', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hints = ['My Hint'];\n const describedByString = `input-guid-${inputClass.guid}-description`;\n expect(inputClass.inputDescribedBy).toBe(describedByString);\n });\n });\n describe('when showMessages is false', () => {\n it('returns undefined', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputDescribedBy).toBeUndefined();\n });\n });\n });\n describe('inputField', () => {\n it('returns the input field element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputClass.inputField).toBe(inputElement);\n });\n });\n describe('inputId', () => {\n it('returns a string with the input guid', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const idString = `input-guid-${inputClass.guid}`;\n expect(inputClass.inputId).toBe(idString);\n });\n });\n describe('inputMode', () => {\n describe('when type is \"currency\"', () => {\n it('returns \"numeric\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('numeric');\n });\n });\n describe('when type is \"ssn\"', () => {\n it('returns \"numeric\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('numeric');\n });\n });\n describe('when type is \"tin\"', () => {\n it('returns \"numeric\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"tin\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('numeric');\n });\n });\n describe('when type is \"numeric\"', () => {\n it('returns \"decimal\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"numeric\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('decimal');\n });\n });\n describe('when type is \"percentage\"', () => {\n it('returns \"decimal\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"percentage\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('decimal');\n });\n });\n describe('when type is \"date\"', () => {\n it('returns \"numeric\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"date\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('numeric');\n });\n });\n describe('when type is \"credit-card\"', () => {\n it('returns \"numeric\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"credit-card\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('numeric');\n });\n });\n describe('when type is not provided', () => {\n it('returns undefined', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBeUndefined();\n });\n });\n });\n describe('isMaskedType', () => {\n describe('when type is not in the \"maskedTypes\" array', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"search\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(false);\n });\n });\n describe('when type is \"currency\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"phone\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"phone\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"ssn\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"tin\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"tin\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"alphanumeric\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"alphanumeric\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"alpha\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"alpha\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"numeric\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"numeric\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"percentage\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"percentage\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"postal\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"postal\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"date\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"date\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"credit-card\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"credit-card\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n });\n describe('messages', () => {\n describe('when errors are present', () => {\n it('returns the errors array', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n expect(inputClass.messages).toEqual(inputClass.errors);\n });\n });\n describe('when hints are present', () => {\n it('returns the hints array', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hints = ['My Hint'];\n expect(inputClass.messages).toEqual(inputClass.hints);\n });\n });\n describe('when errors and hints are both present', () => {\n it('returns only the errors array', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n inputClass.hints = ['My Hint'];\n expect(inputClass.messages).toEqual(inputClass.errors);\n expect(inputClass.messages).not.toEqual(inputClass.hints);\n });\n });\n describe('when errors and hints are both empty', () => {\n it('returns an empty array', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.messages).toEqual([]);\n });\n });\n });\n describe('shouldCursorStartAtEnd', () => {\n describe('when type is \"currency\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.shouldCursorStartAtEnd).toBe(true);\n });\n });\n describe('when type is NOT \"currency\"', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.shouldCursorStartAtEnd).toBe(false);\n });\n });\n });\n describe('shouldCursorStayAtEnd', () => {\n describe('when type is \"currency\" and isMobile is true', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.isMobile = true;\n expect(inputClass.shouldCursorStayAtEnd).toBe(true);\n });\n });\n describe('when type is NOT \"currency\"', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.shouldCursorStayAtEnd).toBe(false);\n });\n });\n describe('when isMobile is false', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.isMobile = false;\n expect(inputClass.shouldCursorStayAtEnd).toBe(false);\n });\n });\n });\n describe('showIconSeparator', () => {\n describe('when type is \"credit-card\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"credit-card\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.showIconSeparator).toBe(true);\n });\n });\n describe('when formattedValueObject.prefix has a value', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { prefix: 'My Prefix' };\n expect(inputClass.showIconSeparator).toBe(true);\n });\n });\n describe('when typs is NOT \"credit-card\" and formattedValueObject.prefix is empty', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.showIconSeparator).toBe(false);\n });\n });\n });\n describe('showMessages', () => {\n describe('when messages getter has length, and hideMessages is false', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n expect(inputClass.showMessages).toBe(true);\n });\n });\n describe('when hideMessages is true', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n inputClass.hideMessages = true;\n expect(inputClass.showMessages).toBe(false);\n });\n });\n describe('when messages getter is empty', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.showMessages).toBe(false);\n });\n });\n });\n describe('stringValue', () => {\n describe('when value is provided', () => {\n it('returns the value as a string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.stringValue).toBe('My Value');\n expect(typeof inputClass.stringValue).toBe('string');\n });\n });\n describe('when value is a coercable, non-string data type', () => {\n it('returns the value as a string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.value = 123;\n expect(inputClass.stringValue).toBe('123');\n expect(typeof inputClass.stringValue).toBe('string');\n inputClass.value = true;\n expect(inputClass.stringValue).toBe('true');\n expect(typeof inputClass.stringValue).toBe('string');\n });\n });\n describe('when value is a non-coercable data type', () => {\n it('returns an empty string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.value = { key: 'value' };\n expect(inputClass.stringValue).toBe('');\n });\n });\n describe('when value is not provided', () => {\n it('returns an empty string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.stringValue).toBe('');\n });\n });\n });\n describe('visibilityToggleAriaLabel', () => {\n describe('when textHidden is true', () => {\n it('returns the proper translation key', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" text-hidden></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.visibilityToggleAriaLabel).toBe('tecton.element.input.toggleAriaLabel.show');\n });\n });\n describe('when textHidden is false', () => {\n it('returns the proper translation key', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.visibilityToggleAriaLabel).toBe('tecton.element.input.toggleAriaLabel.hide');\n });\n });\n });\n describe('visibilityToggleText', () => {\n describe('when textHidden is true', () => {\n it('returns the proper translation key', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" text-hidden></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.visibilityToggleText).toBe('tecton.element.input.toggle.show');\n });\n });\n describe('when textHidden is false', () => {\n it('returns the proper translation key', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.visibilityToggleText).toBe('tecton.element.input.toggle.hide');\n });\n });\n });\n describe('wrapperClasses', () => {\n describe('has-error', () => {\n describe('when hasError is true', () => {\n it('includes \"has-error\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n expect(inputClass.wrapperClasses).toContain('has-error');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n describe('when hasError is false', () => {\n it('does not include \"has-error\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-error');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n describe('has-value', () => {\n describe('when value is truthy', () => {\n it('includes \"has-value\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('has-value');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n describe('when value is falsy', () => {\n it('does not include \"has-value\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-value');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n describe('has-clear', () => {\n describe('when clearable is true and value is truthy', () => {\n it('includes \"has-clear\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('has-clear');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n describe('when clearable is true and value is falsy', () => {\n it('does not include \"has-clear\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-clear');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n describe('when clearable is false and value is truthy', () => {\n it('does not include \"has-clear\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-clear');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n describe('has-focus', () => {\n describe('when hasFocus is true', () => {\n it('includes \"has-focus\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hasFocus = true;\n expect(inputClass.wrapperClasses).toContain('has-focus');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n\n describe('when hasFocus is false', () => {\n it('does not include \"has-focus\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hasFocus = false;\n expect(inputClass.wrapperClasses).not.toContain('has-focus');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n\n describe('is-small', () => {\n describe('when isSmall true', () => {\n it('includes \"is-small\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.isSmall = true;\n expect(inputClass.wrapperClasses).toContain('is-small');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n describe('when isSmall false', () => {\n it('does not include \"is-small\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.isSmall = false;\n expect(inputClass.wrapperClasses).not.toContain('is-small');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n describe('has-prefix', () => {\n describe('when formattedValueObject.prefix is truthy', () => {\n it('includes \"has-prefix\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { prefix: 'Prefix' };\n expect(inputClass.wrapperClasses).toContain('has-prefix');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n\n describe('when formattedValueObject.prefix is falsy', () => {\n it('does not include \"has-prefix\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { prefix: '' };\n expect(inputClass.wrapperClasses).not.toContain('has-prefix');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n\n describe('has-icon-left', () => {\n describe('when computedIconLeft is truthy', () => {\n it('includes \"has-icon-left\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" icon-left=\"apple\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('has-icon-left');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n\n describe('when computedIconLeft is falsy', () => {\n it('does not include \"has-icon-left\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-icon-left');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n\n describe('has-icon-separator', () => {\n describe('when showIconSeparator true', () => {\n it('includes \"has-icon-separator\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"credit-card\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('has-icon-separator');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n\n describe('when showIconSeparator false', () => {\n it('does not include \"has-icon-separator\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-icon-separator');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n\n describe('has-suffix', () => {\n describe('when formattedValueObject.suffix is truthy', () => {\n it('includes \"has-suffix\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { suffix: 'Suffix' };\n expect(inputClass.wrapperClasses).toContain('has-suffix');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n\n describe('when formattedValueObject.suffix is falsy', () => {\n it('does not include \"has-suffix\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { suffix: '' };\n expect(inputClass.wrapperClasses).not.toContain('has-suffix');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n\n describe('has-icon-right', () => {\n describe('when formattedValueObject.suffix is falsy and iconRight is truthy', () => {\n it('includes \"has-icon-right\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" icon-right=\"apple\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { suffix: '' };\n expect(inputClass.wrapperClasses).toContain('has-icon-right');\n });\n });\n\n describe('when formattedValueObject.suffix is truthy or iconRight is falsy', () => {\n it('does not include \"has-icon-right\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { suffix: 'Suffix' };\n expect(inputClass.wrapperClasses).not.toContain('has-icon-right');\n });\n });\n });\n\n describe('right-aligned', () => {\n describe('when type is \"currency\"', () => {\n it('includes \"right-aligned\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('right-aligned');\n });\n });\n });\n\n describe('left-aligned', () => {\n describe('when type is NOT \"currency\"', () => {\n it('includes \"left-aligned\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"text\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('left-aligned');\n });\n });\n });\n\n describe('has-custom-display', () => {\n describe('when hasCustomDisplaySlot is true', () => {\n it('includes \"has-custom-display\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"><div slot=\"custom-display\"></div></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('has-custom-display');\n });\n });\n\n describe('when hasCustomDisplaySlot is false', () => {\n it('does not include \"has-custom-display\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-custom-display');\n });\n });\n });\n });\n });\n\n describe('Methods', () => {\n describe('calculateCursorPositionOnFocus', () => {\n it('returns an object with cursor position details', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n\n const cursorPosition = inputClass.calculateCursorPositionOnFocus();\n expect(cursorPosition).toHaveProperty('startingPosition');\n expect(cursorPosition).toHaveProperty('valueLength');\n expect(cursorPosition).toHaveProperty('previousValueLength');\n expect(cursorPosition).toHaveProperty('hasSelection');\n });\n describe('startingPosition', () => {\n describe('when input field text is selected', () => {\n it('returns the selectionStart value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.selectionStart = 2;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.startingPosition).toBe(inputClass.inputField.selectionStart);\n });\n });\n describe('when input field text is NOT selected', () => {\n it('returns the valueLength as the startingPosition', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.startingPosition).toBe(inputClass.value.length);\n });\n });\n });\n describe('valueLength', () => {\n describe('when input field has value', () => {\n it('returns the valueLength', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.valueLength).toBe(inputClass.value.length);\n });\n });\n describe('when input field is empty', () => {\n it('returns zero', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.valueLength).toBe(0);\n });\n });\n });\n describe('previousValueLength', () => {\n describe('when input field has value', () => {\n it('returns the valueLength', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.previousValueLength).toBe(cursorData.valueLength);\n });\n });\n describe('when input field is empty', () => {\n it('returns the valueLength', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.previousValueLength).toBe(cursorData.valueLength);\n });\n });\n });\n describe('hasSelection', () => {\n describe('when input field text is selected', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.setSelectionRange(2, 5, 'forward');\n await specPage.waitForChanges();\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.hasSelection).toBe(true);\n });\n });\n describe('when input field text is NOT selected', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.hasSelection).toBe(false);\n });\n });\n });\n });\n describe('calculateCursorPositionOnInput', () => {\n it('returns an object with cursor position details', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n\n const cursorPosition = inputClass.calculateCursorPositionOnInput();\n expect(cursorPosition).toHaveProperty('startingPosition');\n expect(cursorPosition).toHaveProperty('valueLength');\n expect(cursorPosition).toHaveProperty('previousValueLength');\n expect(cursorPosition).toHaveProperty('hasSelection');\n });\n describe('startingPosition', () => {\n describe('when input field text is selected', () => {\n it('returns the selectionStart value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.selectionStart = 2;\n const cursorData = inputClass.calculateCursorPositionOnInput();\n expect(cursorData.startingPosition).toBe(inputClass.inputField.selectionStart);\n });\n });\n describe('when input field text is NOT selected', () => {\n it('returns zero', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnInput();\n expect(cursorData.startingPosition).toBe(0);\n });\n describe('if type is currency', () => {\n it('returns the formattedValue length', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnInput();\n expect(cursorData.startingPosition).toBe(\n inputClass.formattedValueObject.formattedValue.length\n );\n });\n });\n });\n });\n describe('valueLength', () => {\n it('returns the fomrattedValue length', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnInput();\n expect(cursorData.valueLength).toBe(inputClass.formattedValueObject.formattedValue.length);\n });\n });\n describe('previousValueLength', () => {\n it('returns the input field value length', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnInput();\n expect(cursorData.previousValueLength).toBe(inputClass.value.length);\n });\n });\n describe('hasSelection', () => {\n it('always returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnInput();\n expect(cursorData.hasSelection).toBe(false);\n });\n });\n });\n describe('formatAndUpdateValueFromProp', () => {\n it('calls getFormattedValue', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formattedValueSpy = jest.spyOn(inputClass, 'getFormattedValue');\n inputClass.formatAndUpdateValueFromProp();\n expect(formattedValueSpy).toHaveBeenCalled();\n });\n describe('when not pseudo', () => {\n it('sets the value of the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formatAndUpdateValueFromProp();\n expect(inputClass.inputField.value).toBe('My Value');\n });\n });\n });\n describe('getFormattedValue', () => {\n describe('when the type requires a formattingFunction', () => {\n it('returns an object of formatting results', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formattedValue = inputClass.getFormattedValue('123456789');\n expect(formattedValue).toHaveProperty('value');\n expect(formattedValue).toHaveProperty('formattedValue');\n expect(formattedValue).toHaveProperty('fullyFormattedValue');\n expect(formattedValue).toHaveProperty('prefix');\n expect(formattedValue).toHaveProperty('formattingCharacterCount');\n expect(formattedValue).toHaveProperty('maxlength');\n expect(formattedValue).toHaveProperty('minFormattedLength');\n expect(formattedValue).toHaveProperty('unformattedValue');\n });\n describe('when type is \"currency\"', () => {\n it('calls the associated formatter function', async () => {\n const currencySpy = jest.spyOn(formatCurrency, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345678');\n expect(currencySpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"phone\"', () => {\n it('calls the associated formatter function', async () => {\n const phoneSpy = jest.spyOn(formatPhoneNumber, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"phone\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345678');\n expect(phoneSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"ssn\"', () => {\n it('calls the associated formatter function', async () => {\n const ssnSpy = jest.spyOn(formatSSN, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345678');\n expect(ssnSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"tin\"', () => {\n it('calls the associated formatter function', async () => {\n const tinSpy = jest.spyOn(formatTIN, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"tin\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345678');\n expect(tinSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"alphanumeric\"', () => {\n it('calls the associated formatter function', async () => {\n const alphaNumSpy = jest.spyOn(formatAlphanumeric, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"alphanumeric\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345678abcdefg');\n expect(alphaNumSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"alpha\"', () => {\n it('calls the associated formatter function', async () => {\n const alphaSpy = jest.spyOn(formatAlpha, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"alpha\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('abcdefg');\n expect(alphaSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"numeric\"', () => {\n it('calls the associated formatter function', async () => {\n const numSpy = jest.spyOn(formatNumeric, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"numeric\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345678');\n expect(numSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"percentage\"', () => {\n it('calls the associated formatter function', async () => {\n const percentageSpy = jest.spyOn(formatNumeric, 'formatPercentage');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"percentage\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('50');\n expect(percentageSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"postal\"', () => {\n it('calls the associated formatter function', async () => {\n const postalSpy = jest.spyOn(formatPostalCode, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"postal\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345');\n expect(postalSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"date\"', () => {\n it('calls the associated formatter function', async () => {\n const dateSpy = jest.spyOn(formatDate, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"date\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('2023-01-01');\n expect(dateSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"credit-card\"', () => {\n it('calls the associated formatter function', async () => {\n const creditSpy = jest.spyOn(formatCreditCard.default, 'format');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"credit-card\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('4111111111111111');\n expect(creditSpy).toHaveBeenCalled();\n });\n });\n });\n describe('when the type does NOT require a formattingFunction', () => {\n it('returns a slightly different object of formatting results', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formattedValue = inputClass.getFormattedValue();\n expect(formattedValue).toHaveProperty('value');\n expect(formattedValue).toHaveProperty('formattedValue');\n expect(formattedValue).toHaveProperty('fullyFormattedValue');\n expect(formattedValue).toHaveProperty('formattingCharacterCount');\n expect(formattedValue).toHaveProperty('unformattedValue');\n });\n it('returns an object with the correct values', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formattedValue = inputClass.getFormattedValue('My Value');\n expect(formattedValue.value).toBe('My Value');\n expect(formattedValue.formattedValue).toBe('My Value');\n expect(formattedValue.fullyFormattedValue).toBe('My Value');\n expect(formattedValue.formattingCharacterCount).toBe(0);\n expect(formattedValue.unformattedValue).toBe('My Value');\n });\n });\n });\n describe('handleCurrencyDeletion', () => {\n describe('if text was selected for deletion', () => {\n it('does nothing except update textSelectedForDeletion value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"Amount\" type=\"currency\" value=\"$1,234.56\"></q2-input>',\n });\n\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const setSelectionRangeSpy = jest.spyOn(inputElement, 'setSelectionRange');\n inputClass.textSelectedForDeletion = true;\n\n inputClass.handleCurrencyDeletion();\n\n expect(setSelectionRangeSpy).not.toHaveBeenCalled();\n expect(inputClass.textSelectedForDeletion).toBe(false);\n setSelectionRangeSpy.mockRestore();\n });\n });\n describe('if text was NOT selected for deletion', () => {\n it('calls setSelectionRange to enforce a cursor position after \"Backspace\" or \"Delete\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const setSelectionRangeSpy = jest.spyOn(inputElement, 'setSelectionRange');\n inputElement.selectionStart = 3;\n inputElement.selectionEnd = 3;\n const deleteEvent = new CustomEvent('input', {\n bubbles: true,\n cancelable: true,\n });\n Object.defineProperty(deleteEvent, 'inputType', {\n value: 'deleteContentBackward',\n enumerable: true,\n });\n Object.defineProperty(deleteEvent, 'target', {\n value: inputElement,\n enumerable: true,\n });\n\n inputClass.handleCurrencyDeletion(deleteEvent);\n expect(setSelectionRangeSpy).toHaveBeenCalled();\n expect(setSelectionRangeSpy).toHaveBeenCalledWith(3, 3);\n expect(nextPaintMock).not.toHaveBeenCalled();\n setSelectionRangeSpy.mockRestore();\n });\n it('calls nextPaint if the newCursorPosition is zero', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.selectionStart = 0;\n inputElement.selectionEnd = 0;\n const deleteEvent = new CustomEvent('input', {\n bubbles: true,\n cancelable: true,\n });\n Object.defineProperty(deleteEvent, 'inputType', {\n value: 'deleteContentBackward',\n enumerable: true,\n });\n Object.defineProperty(deleteEvent, 'target', {\n value: inputElement,\n enumerable: true,\n });\n\n inputClass.handleCurrencyDeletion(deleteEvent);\n expect(nextPaintMock).toHaveBeenCalled();\n });\n });\n });\n describe('handleCurrencyKeydown', () => {\n describe('when keys are \"Backspace\" or \"Delete\"', () => {\n describe('when selection start and end are equal', () => {\n it('updates textSelectedForDeletion to false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.selectionStart = 2;\n inputElement.selectionEnd = 2;\n\n expect(inputClass.textSelectedForDeletion).toBeUndefined();\n const keydownEvent = new KeyboardEvent('keydown', { key: 'Backspace' });\n inputClass.handleCurrencyKeydown(keydownEvent);\n expect(inputClass.textSelectedForDeletion).toBe(false);\n });\n });\n });\n describe('when selection start and end are NOT equal', () => {\n it('updates textSelectedForDeletion to true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.selectionStart = 2;\n inputElement.selectionEnd = 4;\n\n expect(inputClass.textSelectedForDeletion).toBeUndefined();\n const keydownEvent = new KeyboardEvent('keydown', { key: 'Backspace' });\n inputClass.handleCurrencyKeydown(keydownEvent);\n expect(inputClass.textSelectedForDeletion).toBe(true);\n });\n });\n });\n describe('handleDataInput', () => {\n describe('when maxlength is true', () => {\n it('updates formattedValueObject with a new one at the expected maxlength', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.maxlength = 5;\n const newFormattedValueObject = inputClass.getFormattedValue('My Long Value');\n inputClass.handleDataInput(newFormattedValueObject);\n expect(inputClass.formattedValueObject.value.length).toBe(5);\n expect(inputClass.formattedValueObject).toEqual({\n value: 'My Lo',\n formattedValue: 'My Lo',\n minFormattedLength: undefined,\n formattingCharacterCount: 0,\n fullyFormattedValue: 'My Lo',\n unformattedValue: 'My Lo',\n });\n });\n });\n describe('when maxlength is undefined', () => {\n it('updates formattedValueObject with a new one', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const newFormattedValueObject = inputClass.getFormattedValue('Another Long Value');\n inputClass.handleDataInput(newFormattedValueObject);\n expect(inputClass.formattedValueObject).toEqual({\n value: 'Another Long Value',\n formattedValue: 'Another Long Value',\n minFormattedLength: undefined,\n formattingCharacterCount: 0,\n fullyFormattedValue: 'Another Long Value',\n unformattedValue: 'Another Long Value',\n });\n });\n });\n });\n describe('handleValueAndCursor', () => {\n it('emits an input event with data from formattedValueObject', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const inputSpy = jest.spyOn(inputClass.input, 'emit');\n inputClass.handleValueAndCursor();\n expect(inputSpy).toHaveBeenCalled();\n expect(inputSpy).toHaveBeenCalledWith({\n value: '12345678',\n formattedValue: '123-45-678',\n minFormattedLength: 11,\n });\n });\n it('calls setCursorPosition', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const setCursorSpy = jest.spyOn(inputClass, 'setCursorPosition');\n inputClass.handleValueAndCursor();\n expect(setCursorSpy).toHaveBeenCalled();\n });\n describe('when type is NOT number', () => {\n it('input field value is updated with formatted value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.handleValueAndCursor();\n expect(inputClass.inputField.value).toBe(inputClass.formattedValueObject.formattedValue);\n });\n });\n describe('when formattedValueObject value is falsy', () => {\n it('emits a clear event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const clearSpy = jest.spyOn(inputClass.clear, 'emit');\n inputClass.formattedValueObject.value = '';\n inputClass.handleValueAndCursor();\n expect(clearSpy).toHaveBeenCalled();\n });\n });\n });\n describe('initMutationObserver', () => {\n // Can't test this... yet?\n });\n describe('onClearInput', () => {\n it('emits an input event with event detail', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const inputSpy = jest.spyOn(inputClass.input, 'emit');\n inputClass.onClearInput();\n expect(inputSpy).toHaveBeenCalled();\n expect(inputSpy).toHaveBeenCalledWith({\n value: '',\n formattedValue: '',\n minFormattedLength: 11,\n });\n });\n it('emits a change event with event detail', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const changeSpy = jest.spyOn(inputClass.change, 'emit');\n inputClass.onClearInput();\n expect(changeSpy).toHaveBeenCalled();\n expect(changeSpy).toHaveBeenCalledWith({\n value: '',\n formattedValue: '',\n minFormattedLength: 11,\n });\n });\n it('emits a clear event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const changeSpy = jest.spyOn(inputClass.clear, 'emit');\n inputClass.onClearInput();\n expect(changeSpy).toHaveBeenCalled();\n });\n it('calls focus on the inputField element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.onClearInput();\n expect(focusSpy).toHaveBeenCalled();\n });\n });\n describe('onInputBlur', () => {\n it('sets hasFocus to false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hasFocus = true;\n inputClass.onInputBlur();\n expect(inputClass.hasFocus).toBe(false);\n });\n it('calls setMessageHeight', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.onInputBlur();\n expect(setMessageHeightMock).toHaveBeenCalled();\n });\n describe('when valueOnFocus is different from the formattedValueObject value', () => {\n it('updates the valueOnFocus property to the formattedValueObject value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.valueOnFocus = 'My Different Value';\n inputClass.onInputBlur();\n expect(inputClass.valueOnFocus).toBe(inputClass.formattedValueObject.value);\n });\n it('emits a change event with event detail', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.valueOnFocus = 'My Different Value';\n const changeSpy = jest.spyOn(inputClass.change, 'emit');\n inputClass.onInputBlur();\n expect(changeSpy).toHaveBeenCalled();\n expect(changeSpy).toHaveBeenCalledWith({\n value: inputClass.formattedValueObject.value,\n formattedValue: inputClass.formattedValueObject.fullyFormattedValue,\n minFormattedLength: inputClass.formattedValueObject.minFormattedLength,\n });\n });\n });\n });\n describe('onInputClick', () => {\n describe('if shouldCursorStayAtEnd returns true', () => {\n it('calls placeCursorAtEnd', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const placeCursorSpy = jest.spyOn(inputClass, 'placeCursorAtEnd');\n inputClass.isMobile = true;\n inputClass.onInputClick();\n expect(placeCursorSpy).toHaveBeenCalled();\n });\n });\n describe('if shouldCursorStayAtEnd returns false', () => {\n it('does not call placeCursorAtEnd', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" \"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const placeCursorSpy = jest.spyOn(inputClass, 'placeCursorAtEnd');\n inputClass.onInputClick();\n expect(placeCursorSpy).not.toHaveBeenCalled();\n });\n });\n });\n describe('onInputFocus', () => {\n it('sets hasFocus to true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hasFocus = false;\n inputClass.onInputFocus();\n expect(inputClass.hasFocus).toBe(true);\n });\n it('calls setMessageHeight', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.onInputFocus();\n expect(setMessageHeightMock).toHaveBeenCalled();\n });\n it('sets valueOnFocus to the current input field value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.valueOnFocus = '';\n inputClass.onInputFocus();\n expect(inputClass.valueOnFocus).toBe(inputClass.inputField.value);\n });\n describe('when inputField tagname is \"INPUT\"', () => {\n describe('when shouldCursorStartAtEnd returns true', () => {\n it('adds placeCursorAtEnd to the queue', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const placeCursorSpy = jest.spyOn(inputClass, 'placeCursorAtEnd');\n inputClass.onInputFocus();\n inputClass.scheduledAfterRender[0](); // call it to verify the expected function is in the queue\n expect(inputClass.scheduledAfterRender.length).toBe(1);\n expect(placeCursorSpy).toHaveBeenCalled();\n });\n });\n describe('when shouldCursorStartAtEnd returns false', () => {\n it('adds setCursorPosition to the queue', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const setCursorSpy = jest.spyOn(inputClass, 'setCursorPosition');\n inputClass.onInputFocus();\n inputClass.scheduledAfterRender[0](); // call it to verify the expected function is in the queue\n expect(inputClass.scheduledAfterRender.length).toBe(1);\n expect(setCursorSpy).toHaveBeenCalled();\n });\n });\n });\n });\n describe('onInputInput', () => {\n it('calls event.stopPropogation', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = new CustomEvent('input');\n Object.defineProperty(event, 'target', {\n value: inputElement,\n enumerable: true,\n });\n const stopPropagationSpy = jest.spyOn(event, 'stopPropagation');\n inputClass.onInputInput(event);\n expect(stopPropagationSpy).toHaveBeenCalled();\n });\n it('if type is \"currency\", calls handleCurrencyDeletion', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = new CustomEvent('input');\n Object.defineProperty(event, 'target', {\n value: inputElement,\n enumerable: true,\n });\n const handleCurrencySpy = jest.spyOn(inputClass, 'handleCurrencyDeletion');\n inputClass.onInputInput(event);\n expect(handleCurrencySpy).toHaveBeenCalled();\n });\n it('calls handleDataInput', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = new CustomEvent('input');\n Object.defineProperty(event, 'target', {\n value: inputElement,\n enumerable: true,\n });\n const handleDataInputSpy = jest.spyOn(inputClass, 'handleDataInput');\n inputClass.onInputInput(event);\n expect(handleDataInputSpy).toHaveBeenCalled();\n });\n it('calls validateInput', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = new CustomEvent('input');\n Object.defineProperty(event, 'target', {\n value: inputElement,\n enumerable: true,\n });\n const validateInputSpy = jest.spyOn(inputClass, 'validateInput');\n inputClass.onInputInput(event);\n expect(validateInputSpy).toHaveBeenCalled();\n });\n });\n describe('onInputKeydown', () => {\n describe('when type is currency', () => {\n it('calls handleCurrencyKeydown', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = new KeyboardEvent('keydown', { key: 'Backspace' });\n const handleCurrencySpy = jest.spyOn(inputClass, 'handleCurrencyKeydown');\n inputClass.onInputKeydown(event);\n expect(handleCurrencySpy).toHaveBeenCalled();\n });\n });\n describe('when shouldCursorStayAtEnd returns true and specific keys are pressed', () => {\n it('calls preventDefault on the event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = new KeyboardEvent('keydown', { key: 'ArrowLeft' });\n const preventDefaultSpy = jest.spyOn(event, 'preventDefault');\n inputClass.isMobile = true;\n inputClass.onInputKeydown(event);\n expect(preventDefaultSpy).toHaveBeenCalled();\n });\n });\n describe('when key is \"Enter\" and valueOnFocus does not match formattedValueObject.value', () => {\n it('updates valueOnFocus to the formattedValueObject value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.valueOnFocus = 'My Different Value';\n const event = new KeyboardEvent('keydown', { key: 'Enter' });\n inputClass.onInputKeydown(event);\n expect(inputClass.valueOnFocus).toBe(inputClass.formattedValueObject.value);\n });\n it('emits a change event with event detail', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.valueOnFocus = 'My Different Value';\n const changeSpy = jest.spyOn(inputClass.change, 'emit');\n const event = new KeyboardEvent('keydown', { key: 'Enter' });\n inputClass.onInputKeydown(event);\n expect(changeSpy).toHaveBeenCalled();\n expect(changeSpy).toHaveBeenCalledWith({\n value: inputClass.formattedValueObject.value,\n formattedValue: inputClass.formattedValueObject.fullyFormattedValue,\n minFormattedLength: inputClass.formattedValueObject.minFormattedLength,\n });\n });\n });\n });\n describe('onInputPaste', () => {\n describe('when type is currency', () => {\n it('calls preventDefault on the clipboard event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = {\n preventDefault: jest.fn(),\n clipboardData: {\n getData: jest.fn().mockReturnValue('123'),\n },\n } as unknown as ClipboardEvent;\n const preventDefaultSpy = jest.spyOn(event, 'preventDefault');\n inputClass.onInputPaste(event);\n expect(preventDefaultSpy).toHaveBeenCalled();\n });\n it('calls handleDataInput', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = {\n preventDefault: jest.fn(),\n clipboardData: {\n getData: jest.fn().mockReturnValue('123'),\n },\n } as unknown as ClipboardEvent;\n const handleDataInputSpy = jest.spyOn(inputClass, 'handleDataInput');\n inputClass.onInputPaste(event);\n expect(handleDataInputSpy).toHaveBeenCalled();\n });\n });\n });\n describe('onMutationObserved', () => {\n it('updates checkSlotCount to force a re-render', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.checkSlotCount = 0;\n inputClass.onMutationObserved();\n expect(inputClass.checkSlotCount).toBe(1);\n });\n });\n describe('onRefocusInput', () => {\n describe('when showMessages returns true', () => {\n it('calls focus on the inputField element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.errors = ['My Error'];\n inputClass.onRefocusInput();\n expect(focusSpy).toHaveBeenCalled();\n });\n it('calls setMessageHeight', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n inputClass.onRefocusInput();\n expect(setMessageHeightMock).toHaveBeenCalled();\n });\n });\n });\n describe('onToggleVisibility', () => {\n it('dispatches a focus event on the hostElement', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const dispatchEventSpy = jest.spyOn(inputClass.hostElement, 'dispatchEvent');\n inputClass.onToggleVisibility();\n const calledEvent = dispatchEventSpy.mock.calls[0][0] as FocusEvent;\n expect(dispatchEventSpy).toHaveBeenCalled();\n expect(calledEvent.type).toBe('focus');\n });\n it('changes textHidden to the opposite of its current value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.textHidden = true;\n inputClass.onToggleVisibility();\n expect(inputClass.textHidden).toBe(false);\n });\n });\n describe('placeCursorAtEnd', () => {\n it('updates the selectionStart and selectionEnd to the input field value length', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.selectionStart = 0;\n inputElement.selectionEnd = 5;\n\n inputClass.placeCursorAtEnd();\n expect(inputElement.selectionStart).toBe(inputElement.value.length);\n expect(inputElement.selectionEnd).toBe(inputElement.value.length);\n });\n });\n describe('setCursorPosition', () => {\n describe('when canSetSelection returns true and cursor has no selection', () => {\n describe('when type is \"currency\"', () => {\n describe('when previousValueLength - valueLength is 1', () => {\n it('calls setSelectionRange 1 less than startingPosition', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n const cursorData = {\n startingPosition: 3,\n valueLength: 6,\n previousValueLength: 7,\n hasSelection: false,\n };\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.setSelectionRange = setSelectionRangeMock;\n inputClass.setCursorPosition(cursorData);\n expect(setSelectionRangeMock).toHaveBeenCalled();\n expect(setSelectionRangeMock).toHaveBeenCalledWith(2, 2);\n });\n });\n describe('when previousValueLength - valueLength is NOT 1', () => {\n it('calls setSelectionRange at the startingPosition - difference', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"1234567\"></q2-input>',\n });\n const cursorData = {\n startingPosition: 3,\n valueLength: 5,\n previousValueLength: 7,\n hasSelection: false,\n };\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.setSelectionRange = setSelectionRangeMock;\n inputClass.setCursorPosition(cursorData);\n expect(setSelectionRangeMock).toHaveBeenCalled();\n expect(setSelectionRangeMock).toHaveBeenCalledWith(1, 1);\n });\n });\n });\n describe('when type is NOT \"currency\"', () => {\n describe('when difference is greater than zero', () => {\n it('calls setSelectionRange at the startingPosition + difference', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"text\" value=\"Test Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.setSelectionRange = setSelectionRangeMock;\n const cursorData = {\n startingPosition: 3,\n valueLength: 8,\n previousValueLength: 10,\n hasSelection: false,\n };\n inputClass.setCursorPosition(cursorData);\n expect(setSelectionRangeMock).toHaveBeenCalled();\n expect(setSelectionRangeMock).toHaveBeenCalledWith(3, 3);\n });\n });\n describe('when difference is less than or equal to zero', () => {\n it('calls setSelectionRange with only the startingPosition', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"text\" value=\"Test Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.setSelectionRange = setSelectionRangeMock;\n const cursorData = {\n startingPosition: 3,\n valueLength: 8,\n previousValueLength: 8,\n hasSelection: false,\n };\n inputClass.setCursorPosition(cursorData);\n expect(setSelectionRangeMock).toHaveBeenCalled();\n expect(setSelectionRangeMock).toHaveBeenCalledWith(3, 3);\n });\n });\n });\n });\n });\n describe('validateInput', () => {\n it('updates the validity property to the validity object of the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.value = 'My Value';\n inputClass.validateInput();\n expect(inputClass.validity).toBe(inputElement.validity);\n });\n });\n });\n });\n\n describe('Render Methods', () => {\n describe('renderCountDOM', () => {\n describe('when showCount is true', () => {\n it('renders a character counter', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"abc\" show-count></q2-input>',\n });\n const counter = specPage.root.shadowRoot.querySelector('.count-tag');\n expect(counter).not.toBeNull();\n });\n it('displays the number of characters in the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"abc\" show-count></q2-input>',\n });\n const counter = specPage.root.shadowRoot.querySelector('.count-tag');\n expect(counter).toEqualText('3');\n });\n describe('when maxlength is provided', () => {\n it('renders a character counter in relation to the maxlength', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" maxlength=\"10\" value=\"abc\" show-count></q2-input>',\n });\n const counter = specPage.root.shadowRoot.querySelector('.count-tag');\n expect(counter).toEqualText('3/10');\n });\n });\n });\n });\n describe('renderInputContainerDOM', () => {\n it('renders a div with class input-icons-container-left', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n containerElement = inputElement.shadowRoot.querySelector('.input-icons-container-left');\n expect(containerElement).not.toBeNull();\n });\n it('renders a div with class input-icons-container-right', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n containerElement = inputElement.shadowRoot.querySelector('.input-icons-container-right');\n expect(containerElement).not.toBeNull();\n });\n it('renders a clear button in the input-icons-container-right element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n containerElement = inputElement.shadowRoot.querySelector('.input-icons-container-right');\n const clearButton = containerElement.querySelector('[test-id=\"clearButton\"]');\n expect(clearButton).not.toBeNull();\n });\n });\n describe('renderStandardInputDOM', () => {\n it('renders a standard input element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n const input = inputElement.shadowRoot.querySelector('.input-field');\n expect(input).not.toBeNull();\n });\n it('sets expected default attributes on the input element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('input');\n expect(inputElement.getAttribute('type')).toBe('text');\n expect(inputElement.getAttribute('size')).toBeNull();\n expect(inputElement.getAttribute('maxlength')).toBeNull();\n expect(inputElement.getAttribute('min')).toBeNull();\n expect(inputElement.getAttribute('max')).toBeNull();\n expect(inputElement.getAttribute('step')).toBeNull();\n expect(inputElement.getAttribute('aria-current')).toBeNull();\n expect(inputElement.getAttribute('aria-describedby')).toBeNull();\n expect(inputElement.getAttribute('aria-required')).toBe('true');\n expect(inputElement.getAttribute('aria-invalid')).toBe('false');\n expect(inputElement.getAttribute('aria-owns')).toBeNull();\n expect(inputElement.getAttribute('aria-haspopup')).toBeNull();\n expect(inputElement.getAttribute('aria-expanded')).toBeNull();\n expect(inputElement.getAttribute('aria-activedescendant')).toBeNull();\n expect(inputElement.getAttribute('autocomplete')).toBe('off');\n expect(inputElement.getAttribute('autocapitalize')).toBeNull();\n expect(inputElement.getAttribute('autocorrect')).toBe('off');\n expect(inputElement.getAttribute('autofocus')).toBeNull();\n expect(inputElement.getAttribute('placeholder')).toBeNull();\n expect(inputElement.getAttribute('role')).toBeNull();\n expect(inputElement.getAttribute('test-id')).toBe('inputField');\n expect(inputElement.getAttribute('readonly')).toBeNull();\n expect(inputElement.getAttribute('disabled')).toBeNull();\n expect(inputElement.getAttribute('input-mode')).toBeNull();\n });\n describe('when hasCustomDisplaySlot is true', () => {\n it('renders a slotted element and puts the \"sr\" class on the input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"><div slot=\"custom-display\"></div></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('input');\n const slottedElement = specPage.root.shadowRoot.querySelector('.custom-display-container');\n expect(slottedElement).not.toBeNull();\n expect(inputElement.className).toContain('sr');\n });\n });\n });\n describe('renderPseudoInputDOM', () => {\n it('renders a button element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" pseudo></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.tagName).toBe('BUTTON');\n });\n it('displays placeholder text', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" placeholder=\"My Placeholder\" pseudo></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement).toEqualText('My Placeholder');\n });\n it('displays value text', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\" pseudo></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement).toEqualText('My Value');\n });\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"q2-input-test.spec.js","sourceRoot":"","sources":["../../../../../src/components/q2-input/test/q2-input-test.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { SpecPage } from '@stencil/core/testing';\nimport { setupSpecPageWithLoc } from '@/utils/helpers';\nimport {\n getAriaValueFromProp,\n handleAriaLabel,\n overrideFocus,\n setMessageHeight,\n nextPaint,\n} from '../../../utils/index';\nimport * as formatCurrency from '../formatting/currency';\nimport * as formatPhoneNumber from '../formatting/phone';\nimport * as formatSSN from '../formatting/ssn';\nimport * as formatTIN from '../formatting/tin';\nimport * as formatAlphanumeric from '../formatting/alphanumeric';\nimport * as formatAlpha from '../formatting/alpha';\nimport * as formatNumeric from '../formatting/numeric';\nimport * as formatPostalCode from '../formatting/postal';\nimport * as formatDate from '../formatting/date';\nimport * as formatCreditCard from '../formatting/credit-card';\nimport { Q2Input } from '../q2-input';\n\n// function we want to validate are being called\nconst overrideFocusMock = jest.fn();\nconst handleAriaLabelMock = jest.fn();\nconst setMessageHeightMock = jest.fn();\nconst nextPaintMock = jest.fn();\nconst getSelectionMock = jest.fn().mockImplementation(() => ({ toString: () => '' }));\nconst setSelectionRangeMock = jest.fn();\n\n// reassigning the helper functions to their mocks\n(overrideFocus as any) = overrideFocusMock;\n(handleAriaLabel as any) = handleAriaLabelMock;\n(setMessageHeight as any) = setMessageHeightMock;\n(nextPaint as any) = nextPaintMock;\n\ndescribe('q2-input', () => {\n let specPage: SpecPage;\n let inputClass;\n let inputElement;\n let containerElement;\n const translationStringsDict = {\n 'tecton.element.input.label': 'My Label',\n 'tecton.element.input.placeholder': 'My Placeholder',\n 'tecton.element.input.error': 'My Error',\n 'tecton.element.input.hint': 'My Hint',\n 'tecton.element.input.optional': '(optional)',\n 'tecton.element.input.readonly': '(read only)',\n 'tecton.element.input.toggleAriaLabel.hide': 'Hide',\n 'tecton.element.input.toggleAriaLabel.show': 'Show',\n };\n\n beforeEach(() => {\n // create our own methods in the test environment so we can validate our cursor method logic\n let selectionText = '';\n\n Object.defineProperty(window, 'getSelection', { value: getSelectionMock, writable: true });\n Object.defineProperty(Q2Input.prototype, 'selectionStart', {\n configurable: true,\n get: function () {\n return this._selectionStart || 0;\n },\n set: function (value) {\n this._selectionStart = value;\n if (value !== this._selectionEnd) {\n selectionText = this.value.substring(value, this._selectionEnd || 0);\n }\n },\n });\n\n Object.defineProperty(Q2Input.prototype, 'selectionEnd', {\n configurable: true,\n get: function () {\n return this._selectionEnd || 0;\n },\n set: function (value) {\n this._selectionEnd = value;\n if (this._selectionStart !== value) {\n selectionText = this.value.substring(this._selectionStart || 0, value);\n }\n },\n });\n\n HTMLInputElement.prototype.setSelectionRange = function (start, end, direction = 'none') {\n this._selectionStart = start;\n this._selectionEnd = end;\n this._selectionDirection = direction;\n selectionText = this.value.substring(start, end);\n };\n\n // add a getSelection method to the window object in the test environment\n // @ts-expect-error (TS doesn't like overriding window.getSelection)\n window.getSelection = () => {\n return {\n toString: () => {\n return selectionText || '';\n },\n };\n };\n\n // compensates for the errors when InputEvent is not available in the test environment\n if (typeof InputEvent === 'undefined') {\n // @ts-expect-error (TS doesn't like the limited implementation of the InputEvent)\n global.InputEvent = class InputEvent extends Event {\n constructor(type: 'string', options = {}) {\n super(type, options);\n }\n };\n }\n });\n\n afterEach(() => {\n // clear mocks\n overrideFocusMock.mockClear();\n handleAriaLabelMock.mockClear();\n setMessageHeightMock.mockClear();\n nextPaintMock.mockClear();\n getSelectionMock.mockClear();\n setSelectionRangeMock.mockClear();\n });\n\n describe('Localization', () => {\n it('localizes label', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"tecton.element.input.label\"></q2-input>',\n },\n translationStringsDict\n );\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label');\n });\n it('localizes placeholder', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input placeholder=\"tecton.element.input.placeholder\"></q2-input>',\n },\n translationStringsDict\n );\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('placeholder')).toBe('My Placeholder');\n });\n it('localizes error message', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n },\n translationStringsDict\n );\n inputClass = specPage.rootInstance;\n inputClass.errors = ['tecton.element.input.error'];\n await specPage.waitForChanges();\n const errorElement = specPage.root.shadowRoot.querySelector('.messages-container');\n expect(errorElement).toEqualText('My Error');\n });\n it('localizes hint message', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n },\n translationStringsDict\n );\n inputClass = specPage.rootInstance;\n inputClass.hints = ['tecton.element.input.hint'];\n await specPage.waitForChanges();\n const hintElement = specPage.root.shadowRoot.querySelector('.messages-container');\n expect(hintElement).toEqualText('My Hint');\n });\n it('localizes optional label', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" optional></q2-input>',\n },\n translationStringsDict\n );\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label(optional)');\n });\n it('localizes readonly label', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" readonly></q2-input>',\n },\n translationStringsDict\n );\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label(read only)');\n });\n });\n\n describe('Props', () => {\n describe('_preventEntry', () => {\n it('sets readonly attribute true without adding the (readonly) label', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" _prevent-entry></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(inputElement).toHaveAttribute('readonly');\n expect(label).toEqualText('My Label');\n expect(label).not.toEqualText('My Label (readonly)');\n });\n it('prevents user input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" _prevent-entry></q2-input>',\n });\n inputElement = specPage.root;\n inputElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'a' }));\n expect(inputElement.value).toBeUndefined();\n });\n });\n describe('_role', () => {\n it('is null by default', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root;\n expect(inputElement.getAttribute('role')).toBeNull();\n });\n it('sets the role attribute on the input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" _role=\"combobox\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('role')).toBe('combobox');\n });\n });\n describe('ariaActivedescendant', () => {\n it('sets the aria-activedescendant attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" aria-activedescendant=\"my-id\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-activedescendant')).toBe('my-id');\n });\n });\n describe('ariaExpanded', () => {\n it('sets the value of the aria-expanded attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" aria-expanded=\"true\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-expanded')).toBe('true');\n });\n it('is not added when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.hasAttribute('aria-expanded')).toBe(false);\n });\n });\n describe('ariaHaspopup', () => {\n const hasPopupValues = ['true', 'false', 'menu', 'listbox', 'tree', 'grid', 'dialog'];\n hasPopupValues.forEach(value => {\n it(`sets aria-haspopup attribute to \"${value}\" when provided \"${value}\"`, async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: `<q2-input label=\"My Label\" aria-haspopup=\"${value}\"></q2-input>`,\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-haspopup')).toBe(value);\n });\n });\n it('is not added when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.hasAttribute('aria-haspopup')).toBe(false);\n });\n it('is set as an empty string when provided with no value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" aria-haspopup></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-haspopup')).toBe('');\n });\n it('is set to null when provided an invalid value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" aria-haspopup=\"invalid\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-haspopup')).toBeNull();\n });\n });\n describe('ariaLabel', () => {\n it('is set to null when provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" aria-label=\"My Aria Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-label')).toBeNull();\n });\n });\n describe('ariaOwns', () => {\n it('sets the value of the aria-owns attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" aria-owns=\"my-id\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-owns')).toBe('my-id');\n });\n });\n describe('autocapitalize', () => {\n it('sets the value of the autocapitalize attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" autocapitalize=\"words\"></q2-input>',\n });\n inputElement = specPage.root;\n expect(inputElement.getAttribute('autocapitalize')).toBe('words');\n });\n });\n describe('autocomplete', () => {\n it('sets the value of the autocomplete attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" autocomplete=\"on\"></q2-input>',\n });\n inputElement = specPage.root;\n expect(inputElement.getAttribute('autocomplete')).toBe('on');\n });\n });\n describe('autocorrect', () => {\n it('sets the value of the autocorrect attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" autocorrect=\"on\"></q2-input>',\n });\n inputElement = specPage.root;\n expect(inputElement.getAttribute('autocorrect')).toBe('on');\n });\n });\n describe('autofocus', () => {\n it('sets the value of the autofocus attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.autofocus = true;\n await specPage.waitForChanges();\n inputElement = specPage.root;\n expect(inputElement).toHaveAttribute('autofocus');\n });\n it('focuses the <input> element when true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.autofocus = true;\n inputClass.componentDidLoad();\n await specPage.waitForChanges();\n expect(focusSpy).toHaveBeenCalled();\n });\n });\n describe('badgeTheme', () => {\n it('sets the badge theme to primary', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" badge-value=\"4\" badge-theme=\"primary\"></q2-input>',\n });\n inputElement = specPage.root;\n const badge = specPage.root.shadowRoot.querySelector('q2-badge');\n expect(inputElement.getAttribute('badge-theme')).toBe('primary');\n expect(badge.getAttribute('theme')).toBe('primary');\n });\n it('sets the badge theme to secondary', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" badge-value=\"4\" badge-theme=\"secondary\"></q2-input>',\n });\n inputElement = specPage.root;\n const badge = specPage.root.shadowRoot.querySelector('q2-badge');\n expect(inputElement.getAttribute('badge-theme')).toBe('secondary');\n expect(badge.getAttribute('theme')).toBe('secondary');\n });\n it('sets the badge theme to tertiary', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" badge-value=\"4\" badge-theme=\"tertiary\"></q2-input>',\n });\n inputElement = specPage.root;\n const badge = specPage.root.shadowRoot.querySelector('q2-badge');\n expect(inputElement.getAttribute('badge-theme')).toBe('tertiary');\n expect(badge.getAttribute('theme')).toBe('tertiary');\n });\n });\n describe('badgeValue', () => {\n it('displays a q2-badge on the right side of the input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" badge-value=\"4\"></q2-input>',\n });\n const badge = specPage.root.shadowRoot.querySelector('q2-badge');\n expect(badge).not.toBeNull();\n });\n it('displays the provided value as a q2-badge', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" badge-value=\"4\"></q2-input>',\n });\n inputElement = specPage.root;\n const badge = specPage.root.shadowRoot.querySelector('q2-badge');\n expect(inputElement.getAttribute('badge-value')).toBe('4');\n expect(badge).toEqualText('4');\n });\n });\n describe('clearable', () => {\n it('renders a clear button in the input-icons-container-right <div>', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable></q2-input>',\n });\n containerElement = specPage.root.shadowRoot.querySelector('.input-icons-container-right');\n const clearButton = containerElement.querySelector('[test-id=\"clearButton\"]');\n expect(clearButton).not.toBeNull();\n });\n });\n describe('current', () => {\n it('sets the value of the aria-current attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" current=\"page\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('aria-current')).toBe('page');\n });\n });\n describe('disabled', () => {\n it('sets the value of the disabled attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" disabled></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement).toHaveAttribute('disabled');\n });\n it('prevents user input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" disabled></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'a' }));\n expect(inputElement.value).toBe('');\n });\n it('prevents focusing the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" disabled></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.focus();\n expect(document.activeElement).not.toEqual(inputElement);\n });\n });\n describe('errors', () => {\n it('displays an error message', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n await specPage.waitForChanges();\n const errorElement = specPage.root.shadowRoot.querySelector('.messages-container');\n expect(errorElement).toEqualText('My Error');\n });\n it('displays multiple error messages in an unordered list', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error', 'Another Error'];\n await specPage.waitForChanges();\n const message = specPage.root.shadowRoot.querySelector('.messages-container');\n expect(message).not.toBeNull();\n const listItems = message.querySelectorAll('li');\n expect(listItems.length).toBe(2);\n expect(listItems[0]).toEqualText('My Error');\n expect(listItems[1]).toEqualText('Another Error');\n });\n });\n describe('formatModifiers', () => {\n it('sets the value of the formatModifiers attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" format-modifiers=\"currency\"></q2-input>',\n });\n inputElement = specPage.root;\n expect(inputElement.getAttribute('format-modifiers')).toBe('currency');\n });\n });\n describe('hideLabel', () => {\n it('hides the label when true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" hide-label></q2-input>',\n });\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toHaveClass('sr');\n });\n it('shows the label when false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" hide-label=\"false\"></q2-input>',\n });\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).not.toHaveClass('sr');\n });\n });\n describe('hideMessages', () => {\n describe('when true', () => {\n it('contributes to the showMessages() getter returning false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" hide-messages></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n expect(inputClass.showMessages).toBe(false);\n });\n });\n describe('when false', () => {\n it('contributes to the showMessages() getter returning true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" hide-messages=\"false\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n expect(inputClass.showMessages).toBe(true);\n });\n });\n });\n describe('hints', () => {\n it('displays a hint message', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hints = ['My Hint'];\n await specPage.waitForChanges();\n const hintElement = specPage.root.shadowRoot.querySelector('.messages-container');\n expect(hintElement).toEqualText('My Hint');\n });\n it('displays multiple hint messages in an unordered list', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hints = ['My Hint', 'Another Hint'];\n await specPage.waitForChanges();\n const message = specPage.root.shadowRoot.querySelector('.messages-container');\n expect(message).not.toBeNull();\n const listItems = message.querySelectorAll('li');\n expect(listItems.length).toBe(2);\n expect(listItems[0]).toEqualText('My Hint');\n expect(listItems[1]).toEqualText('Another Hint');\n });\n });\n describe('iconLeft', () => {\n it('renders an icon on the left side of the input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" icon-left=\"apple\"></q2-input>',\n });\n const icon = specPage.root.shadowRoot.querySelector('.icon-left');\n expect(icon).not.toBeNull();\n });\n it('does not render an icon when iconLeft is not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n const icon = specPage.root.shadowRoot.querySelector('.icon-left');\n expect(icon).toBeNull();\n });\n });\n describe('iconRight', () => {\n it('renders an icon on the right side of the input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" icon-right=\"apple\"></q2-input>',\n });\n const icon = specPage.root.shadowRoot.querySelector('.icon-right');\n expect(icon).not.toBeNull();\n });\n it('does not render an icon when iconRight is not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n const icon = specPage.root.shadowRoot.querySelector('.icon-right');\n expect(icon).toBeNull();\n });\n });\n describe('label', () => {\n it('displays the value in the <label> element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label');\n });\n });\n describe('max', () => {\n it('sets the value of the max attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" max=\"10\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('max')).toBe('10');\n });\n it('does not set the max attribute when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.hasAttribute('max')).toBe(false);\n });\n it('limits the incremented numerical value of the input field when type=\"number\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"number\" max=\"10\" value=\"10\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp' }));\n expect(inputElement.value).toBe('10');\n });\n });\n describe('maxLength', () => {\n it('sets the value of the maxlength attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" maxlength=\"10\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('maxlength')).toBe('10');\n });\n it('does not set the maxlength attribute when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.hasAttribute('maxlength')).toBe(false);\n });\n it('sets maxlength undefined if maxlength isNaN', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" maxlength=\"abc\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('maxlength')).toBeNull();\n });\n it('limits the number of characters entered into the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" maxlength=\"5\" value=\"abcde\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'f' }));\n expect(inputElement.value).toBe('abcde');\n });\n });\n describe('min', () => {\n it('sets the value of the min attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" min=\"10\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('min')).toBe('10');\n });\n it('does not set the min attribute when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.hasAttribute('min')).toBe(false);\n });\n it('limits the decremented numerical value of the input field when type=\"number\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"number\" min=\"10\" value=\"10\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown' }));\n expect(inputElement.value).toBe('10');\n });\n });\n describe('optional', () => {\n it('does not display the optional label when false', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" optional=\"false\"></q2-input>',\n },\n translationStringsDict\n );\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).not.toEqualText('My Label(optional)');\n });\n it('displays the optional label when true', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" optional></q2-input>',\n },\n translationStringsDict\n );\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label(optional)');\n });\n });\n describe('pattern', () => {\n it('sets the value of the pattern attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" pattern=\"[A-Za-z]{3}\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('pattern')).toBe('[A-Za-z]{3}');\n });\n it('does not set the pattern attribute when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.hasAttribute('pattern')).toBe(false);\n });\n });\n describe('placeholder', () => {\n it('sets the value of the placeholder attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input placeholder=\"My Placeholder\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('placeholder')).toBe('My Placeholder');\n });\n it('localizes the placeholder', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input placeholder=\"tecton.element.input.placeholder\"></q2-input>',\n },\n translationStringsDict\n );\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('placeholder')).toBe('My Placeholder');\n });\n });\n describe('pseudo', () => {\n it('displays the component as a button', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" pseudo></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.tagName).toBe('BUTTON');\n });\n });\n describe('readonly', () => {\n it('sets the value of the readonly attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" readonly></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement).toHaveAttribute('readonly');\n });\n it('localizes the readonly label', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" readonly></q2-input>',\n },\n translationStringsDict\n );\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label(read only)');\n });\n it('prevents user input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" readonly></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'a' }));\n expect(inputElement.value).toBe('');\n });\n });\n describe('role (deprecated)', () => {\n it('sets the role attribute in pseudo mode', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" role=\"combobox\" pseudo></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('role')).toBe('combobox');\n });\n });\n describe('showCount', () => {\n it('shows a character count element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" show-count></q2-input>',\n });\n const countElement = specPage.root.shadowRoot.querySelector('.count-tag');\n expect(countElement).not.toBeNull();\n });\n });\n describe('showVisibilityToggle', () => {\n describe('when type is \"text\"', () => {\n it('displays a visibility toggle button', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"text\" value=\"abc\" show-visibility-toggle></q2-input>',\n });\n const visibilityToggle = specPage.root.shadowRoot.querySelector('.btn-visibility-toggle');\n expect(visibilityToggle).not.toBeNull();\n });\n });\n describe('when type is \"password\"', () => {\n it('displays a visibility toggle button', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"password\" value=\"abc\" show-visibility-toggle></q2-input>',\n });\n const visibilityToggle = specPage.root.shadowRoot.querySelector('.btn-visibility-toggle');\n expect(visibilityToggle).not.toBeNull();\n });\n });\n describe('when type is \"ssn\"', () => {\n it('displays a visibility toggle button', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"123-45-6789\" show-visibility-toggle></q2-input>',\n });\n const visibilityToggle = specPage.root.shadowRoot.querySelector('.btn-visibility-toggle');\n expect(visibilityToggle).not.toBeNull();\n });\n });\n describe('when type is \"tin\"', () => {\n it('displays a visibility toggle button', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"tin\" value=\"12-3456789\" show-visibility-toggle></q2-input>',\n });\n const visibilityToggle = specPage.root.shadowRoot.querySelector('.btn-visibility-toggle');\n expect(visibilityToggle).not.toBeNull();\n });\n });\n it('translates the localized show/hide message on the visibility toggle button', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"password\" value=\"abc\" show-visibility-toggle></q2-input>',\n },\n translationStringsDict\n );\n inputClass = specPage.rootInstance;\n const visibilityToggle = specPage.root.shadowRoot.querySelector('.btn-visibility-toggle');\n expect(visibilityToggle.getAttribute('label')).toEqualText('Show');\n inputClass.textHidden = false;\n await specPage.waitForChanges();\n expect(visibilityToggle.getAttribute('label')).toEqualText('Hide');\n });\n it('switches the input type between \"text\" and \"password\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"text\" value=\"abc\" show-visibility-toggle></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('type')).toBe('text');\n inputClass.textHidden = true;\n await specPage.waitForChanges();\n expect(inputElement.getAttribute('type')).toBe('password');\n inputClass.textHidden = false;\n await specPage.waitForChanges();\n expect(inputElement.getAttribute('type')).toBe('text');\n });\n });\n describe('step', () => {\n it('sets the value of the input field step attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" step=\"2\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('step')).toBe('2');\n });\n });\n describe('textHidden', () => {\n it('defaults to true when type is \"password\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"password\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.textHidden).toBe(true);\n });\n it('defaults to false when type is not \"password\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.textHidden).toBe(false);\n });\n it('persists when added as an attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" text-hidden></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.textHidden).toBe(true);\n });\n });\n describe('type', () => {\n it('sets the value of the type attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input type=\"email\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('type')).toBe('email');\n });\n it('defaults to \"text\" when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('type')).toBe('text');\n });\n });\n describe('validity', () => {\n it('gets set when validateInput is called', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputClass.inputRef = inputElement;\n inputElement.value = '1';\n Object.defineProperty(inputElement, 'validity', {\n get: () => ({\n valid: false,\n patternMismatch: true,\n }),\n configurable: true,\n });\n inputClass.validateInput();\n expect(inputClass.validity).toEqual({\n valid: false,\n patternMismatch: true,\n });\n });\n });\n describe('value', () => {\n it('sets the value of the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.value).toBe('My Value');\n });\n it('does not set the value attribute when not provided', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.value).toBe('');\n });\n it('translates localized labels', async () => {\n specPage = await setupSpecPageWithLoc(\n {\n components: [Q2Input],\n html: '<q2-input label=\"tecton.element.input.label\"></q2-input>',\n },\n translationStringsDict\n );\n const label = specPage.root.shadowRoot.querySelector('label');\n expect(label).toEqualText('My Label');\n });\n });\n });\n\n describe('Events', () => {\n describe('change', () => {\n it('emits a change event when the input value is changed and loses focus', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const changeSpy = jest.spyOn(inputClass.change, 'emit');\n inputClass.value = 'My New Value';\n await specPage.waitForChanges();\n inputElement.blur();\n expect(changeSpy).toHaveBeenCalled();\n expect(changeSpy).toHaveBeenCalledWith({\n value: 'My New Value',\n formattedValue: 'My New Value',\n minFormattedLength: undefined,\n });\n });\n });\n\n describe('clear', () => {\n it('emits when the clear button is clicked', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\" clearable></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const clearSpy = jest.spyOn(inputClass.clear, 'emit');\n const clearButton: HTMLElement = specPage.root.shadowRoot.querySelector('[test-id=\"clearButton\"]');\n clearButton.click();\n expect(clearSpy).toHaveBeenCalled();\n });\n });\n\n describe('formatted', () => {\n it('emits when the input value is formatted', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const formattedSpy = jest.spyOn(inputClass.formatted, 'emit');\n inputElement.value = '12345678';\n inputElement.dispatchEvent(new Event('input'));\n expect(formattedSpy).toHaveBeenCalled();\n expect(formattedSpy).toHaveBeenCalledWith({\n value: '12345678',\n formattedValue: '123-45-678',\n fullyFormattedValue: '123-45-678',\n formattingCharacterCount: 2,\n unformattedValue: '12345678',\n minFormattedLength: 11,\n maxlength: 11,\n prefix: '',\n });\n });\n });\n\n describe('input', () => {\n it('emits when the input value is changed', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const inputSpy = jest.spyOn(inputClass.input, 'emit');\n inputElement.value = 'My Value';\n inputElement.dispatchEvent(new Event('input'));\n\n expect(inputSpy).toHaveBeenCalled();\n expect(inputSpy).toHaveBeenCalledWith({\n value: 'My Value',\n formattedValue: 'My Value',\n });\n });\n });\n\n describe('invalid', () => {\n it('emits when the input value is invalid according to the pattern attribute', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" pattern=\"[a-zA-Z]\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputClass.inputRef = inputElement;\n const invalidSpy = jest.spyOn(inputClass.invalid, 'emit');\n inputElement.value = '1';\n Object.defineProperty(inputElement, 'validity', {\n get: () => ({\n valid: false,\n patternMismatch: true,\n }),\n configurable: true,\n });\n inputElement.dispatchEvent(new Event('input'));\n inputClass.validateInput();\n expect(invalidSpy).toHaveBeenCalled();\n });\n });\n });\n\n describe('Component Lifecycle Events', () => {\n describe('disconnectedCallback', () => {\n it('calls manageClearableResizeObserver', async () => {\n const originalManagedClearableResizeObserver = Q2Input.prototype.manageClearableResizeObserver;\n Q2Input.prototype.manageClearableResizeObserver = jest.fn();\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.disconnectedCallback();\n expect(Q2Input.prototype.manageClearableResizeObserver).toHaveBeenCalled();\n Q2Input.prototype.manageClearableResizeObserver = originalManagedClearableResizeObserver;\n });\n it('calls disconnect() on mutationObserver', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const disconnectMock = jest.fn();\n const mockMutationObserver = {\n disconnect: disconnectMock,\n };\n inputClass.mutationObserver = mockMutationObserver as unknown as MutationObserver;\n inputClass.disconnectedCallback();\n expect(disconnectMock).toHaveBeenCalled();\n });\n it('sets mutationObserver to null', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.disconnectedCallback();\n expect(inputClass.mutationObserver).toBeNull();\n });\n });\n describe('componentWillLoad', () => {\n it('sets maxlength to undefined if maxlength isNaN', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" maxlength=\"abc\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.getAttribute('maxlength')).toBeNull();\n });\n it('sets the value of the formattedValueObject', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.formattedValueObject).toEqual({\n value: 'My Value',\n formattedValue: 'My Value',\n minFormattedLength: undefined,\n formattingCharacterCount: 0,\n fullyFormattedValue: 'My Value',\n unformattedValue: 'My Value',\n });\n });\n describe('formattedValue getter', () => {\n it('defines formattedValue getter on host element', async () => {\n const definePropertySpy = jest.spyOn(Object, 'defineProperty');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n expect(definePropertySpy).toHaveBeenCalledWith(\n specPage.root,\n 'formattedValue',\n expect.objectContaining({ get: expect.any(Function) })\n );\n definePropertySpy.mockRestore();\n });\n it('getter returns correctly formatted value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"98765432\"></q2-input>',\n });\n expect(specPage.root.formattedValue).toBe('987-65-432');\n });\n it('returns empty string when formattedValueObject is null', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n specPage.rootInstance.formattedValueObject = null;\n expect(specPage.root.formattedValue).toBe('');\n });\n });\n it('calls handleAriaLabel()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n expect(handleAriaLabelMock).toHaveBeenCalled();\n });\n it('calls manageClearableResizeObserver()', async () => {\n const originalDefineProperty = Object.defineProperty;\n const originalManagedClearableResizeObserver = Q2Input.prototype.manageClearableResizeObserver;\n Object.defineProperty = jest.fn();\n Q2Input.prototype.manageClearableResizeObserver = jest.fn();\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(Q2Input.prototype.manageClearableResizeObserver).toHaveBeenCalled();\n Q2Input.prototype.manageClearableResizeObserver = originalManagedClearableResizeObserver;\n Object.defineProperty = originalDefineProperty;\n });\n });\n describe('componentDidLoad', () => {\n it('calls overrideFocus()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n expect(overrideFocusMock).toHaveBeenCalled();\n });\n it('sets the value of the input field to the formattedValue when not in pseudo mode', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputClass = specPage.rootInstance;\n expect(inputElement.value).toBe(inputClass.formattedValueObject.formattedValue);\n });\n it('calls focus on the inputField when autofocus is true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.autofocus = true;\n inputClass.componentDidLoad();\n await specPage.waitForChanges();\n expect(focusSpy).toHaveBeenCalled();\n });\n });\n });\n\n describe('Listeners', () => {\n describe('onHostElementChange', () => {\n it('fires when the change event is consumed', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n const hostElementChangeSpy = jest.spyOn(inputClass, 'onHostElementChange');\n inputElement.dispatchEvent(new Event('change'));\n expect(hostElementChangeSpy).toHaveBeenCalled();\n });\n });\n describe('onHostElementFocus', () => {\n it('fires when the focus event is consumed', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const hostElementFocusSpy = jest.spyOn(inputClass, 'onHostElementFocus');\n inputElement = specPage.root;\n inputElement.dispatchEvent(new FocusEvent('focus'));\n expect(hostElementFocusSpy).toHaveBeenCalled();\n });\n describe('when event is NOT from the host element', () => {\n it('does NOT call focus() on the input element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.focus = jest.fn();\n const focusSpy = jest.spyOn(inputElement, 'focus');\n const differentElement = document.createElement('div');\n const focusEvent = new FocusEvent('focus');\n focusEvent.composedPath = jest.fn().mockReturnValue([differentElement]);\n inputClass.onHostElementFocus(focusEvent);\n expect(focusSpy).not.toHaveBeenCalled();\n });\n });\n describe('when event is from the host element', () => {\n it('calls focus() on the input element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.focus = jest.fn();\n const focusEvent = new FocusEvent('focus');\n focusEvent.composedPath = jest.fn().mockReturnValue([inputClass.hostElement]);\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.onHostElementFocus(focusEvent);\n expect(focusSpy).toHaveBeenCalled();\n });\n });\n });\n });\n\n describe('Public Methods API', () => {\n describe('Public Methods', () => {\n describe('checkValidity', () => {\n it('fires checkValidity on the input element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n inputClass.inputRef = inputElement.shadowRoot.querySelector('.input-field');\n inputClass.inputRef.checkValidity = jest.fn();\n const inputCheckValiditySpy = jest.spyOn(inputClass.inputRef, 'checkValidity');\n inputClass.checkValidity();\n expect(inputCheckValiditySpy).toHaveBeenCalled();\n });\n it('fires validateInput local method', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n inputClass.inputRef = inputElement.shadowRoot.querySelector('.input-field');\n inputClass.inputRef.checkValidity = jest.fn();\n const validateInputSpy = jest.spyOn(inputClass, 'validateInput');\n inputClass.checkValidity();\n expect(validateInputSpy).toHaveBeenCalled();\n });\n it('emits invalid event when ValidityState object has `valid: false`', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" pattern=\"[a-zA-Z]\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n inputClass.inputRef = inputElement.shadowRoot.querySelector('.input-field');\n inputClass.inputRef.checkValidity = jest.fn();\n inputClass.inputRef.validity = { valid: false };\n const invalidSpy = jest.spyOn(inputClass.invalid, 'emit');\n inputClass.checkValidity();\n expect(invalidSpy).toHaveBeenCalled();\n });\n });\n });\n describe('Test Methods', () => {\n describe('clearValue', () => {\n describe('when clearable is false', () => {\n it('does nothing if clearable is false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n inputClass.clearValue();\n expect(inputClass.value).toBe('My Value');\n });\n });\n\n describe('when clearable is true', () => {\n it('fires onClearInput local method', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n const clearInputSpy = jest.spyOn(inputClass, 'onClearInput');\n inputClass.clearValue();\n expect(clearInputSpy).toHaveBeenCalled();\n });\n it('emits input event with empty values', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n const inputSpy = jest.spyOn(inputClass.input, 'emit');\n inputClass.clearValue();\n expect(inputSpy).toHaveBeenCalledWith({\n value: '',\n formattedValue: '',\n minFormattedLength: undefined,\n });\n });\n it('emits change event with empty values', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n const changeSpy = jest.spyOn(inputClass.change, 'emit');\n inputClass.clearValue();\n expect(changeSpy).toHaveBeenCalledWith({\n value: '',\n formattedValue: '',\n minFormattedLength: undefined,\n });\n });\n it('emits clear event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n const clearSpy = jest.spyOn(inputClass.clear, 'emit');\n inputClass.clearValue();\n expect(clearSpy).toHaveBeenCalled();\n });\n it('calls focus() on the input element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.clearValue();\n expect(focusSpy).toHaveBeenCalled();\n });\n });\n });\n describe('setValue', () => {\n it('calls focus on the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.setValue('My Value');\n expect(focusSpy).toHaveBeenCalled();\n });\n it('dispatches a focus event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const dispatchEventSpy = jest.spyOn(inputElement, 'dispatchEvent');\n inputClass.setValue('My Value');\n const focusEvent = dispatchEventSpy.mock.calls[0][0] as FocusEvent;\n expect(focusEvent.type).toBe('focus');\n });\n it('updates the value of the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputClass.setValue('My Value');\n expect(inputElement.value).toBe('My Value');\n });\n it('updates the value of the input field with a formatted value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputClass.setValue('12345678');\n expect(inputElement.value).toBe('123-45-678');\n });\n it('dispatches an input event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const dispatchEventSpy = jest.spyOn(inputElement, 'dispatchEvent');\n inputClass.setValue('My Value');\n const inputEvent = dispatchEventSpy.mock.calls[1][0] as InputEvent;\n expect(inputEvent.type).toBe('input');\n });\n });\n });\n });\n\n describe('Watchers', () => {\n describe('ariaLabel', () => {\n it('ariaLabelObserver() calls handleAriaLabel() helper', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(handleAriaLabelMock).toHaveBeenCalledTimes(2); // initial calls\n inputClass.ariaLabel = 'My Aria Label';\n expect(handleAriaLabelMock).toHaveBeenCalledTimes(3);\n });\n });\n describe('clearable', () => {\n it('manageClearableResizeObserver() is called when clearable changes', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const resizeObserverSpy = jest.spyOn(inputClass, 'manageClearableResizeObserver');\n expect(resizeObserverSpy).not.toHaveBeenCalled();\n inputClass.clearable = false;\n expect(resizeObserverSpy).toHaveBeenCalled();\n });\n });\n describe('errors', () => {\n describe('when hasFocus is true', () => {\n it('errorsObserver() queues up setMessageHeight()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.scheduledAfterRender.length).toBe(0);\n inputClass.hasFocus = true;\n inputClass.errors = ['My Error'];\n expect(inputClass.scheduledAfterRender.length).toBe(1);\n });\n });\n describe('when hasFocus is false', () => {\n it('errorsObserver() does not queue up setMessageHeight()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.scheduledAfterRender.length).toBe(0);\n inputClass.hasFocus = false;\n inputClass.errors = ['My Error'];\n expect(inputClass.scheduledAfterRender.length).toBe(0);\n });\n });\n });\n describe('formatModifier', () => {\n it('calls formatAndUpdateValueFromProp() when formatModifier changes', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formatAndUpdateValueFromPropSpy = jest.spyOn(inputClass, 'formatAndUpdateValueFromProp');\n inputClass.formatModifier = 'ssn';\n expect(formatAndUpdateValueFromPropSpy).toHaveBeenCalled();\n });\n });\n describe('formattedValueObject', () => {\n it('emits the formatted event when formattedValueObject changes', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formattedSpy = jest.spyOn(inputClass.formatted, 'emit');\n const formattedValueObjectMock = {\n value: 'My New Value',\n formattedValue: 'My New Value',\n minFormattedLength: undefined,\n formattingCharacterCount: 0,\n fullyFormattedValue: 'My New Value',\n unformattedValue: 'My New Value',\n };\n inputClass.formattedValueObject = formattedValueObjectMock;\n expect(formattedSpy).toHaveBeenCalled();\n expect(formattedSpy).toHaveBeenCalledWith({\n ...formattedValueObjectMock,\n });\n });\n });\n describe('hints', () => {\n describe('when hasFocus is true', () => {\n it('hinstObserver() queues up setMessageHeight()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.scheduledAfterRender.length).toBe(0);\n inputClass.hasFocus = true;\n inputClass.hints = ['My Hint'];\n expect(inputClass.scheduledAfterRender.length).toBe(1);\n });\n });\n describe('when hasFocus is false', () => {\n it('hintsObserver() does not queue up setMessageHeight()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.scheduledAfterRender.length).toBe(0);\n inputClass.hasFocus = false;\n inputClass.hints = ['My Hint'];\n expect(inputClass.scheduledAfterRender.length).toBe(0);\n });\n });\n });\n describe('type', () => {\n it('typeObserver() calls formatAndUpdateValueFromProp()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formatAndUpdateValueFromPropSpy = jest.spyOn(inputClass, 'formatAndUpdateValueFromProp');\n inputClass.type = 'ssn';\n expect(formatAndUpdateValueFromPropSpy).toHaveBeenCalled();\n });\n });\n describe('value', () => {\n it('valueObserver() calls formatAndUpdateValueFromProp()', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formatAndUpdateValueFromPropSpy = jest.spyOn(inputClass, 'formatAndUpdateValueFromProp');\n inputClass.value = 'New Value';\n expect(formatAndUpdateValueFromPropSpy).toHaveBeenCalled();\n });\n });\n });\n\n describe('Local Methods', () => {\n describe('Getters', () => {\n describe('ariaAttributes', () => {\n it('returns aria attributes object', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.ariaAttributes).toEqual({\n ariOwns: getAriaValueFromProp(inputClass.ariaOwns),\n ariaHasPopup: getAriaValueFromProp(inputClass.ariaHasPopup, [\n 'true',\n 'false',\n 'menu',\n 'listbox',\n 'tree',\n 'grid',\n 'dialog',\n ]),\n ariaExpanded: getAriaValueFromProp(inputClass.ariaExpanded, ['true', 'false']),\n ariaActiveDescendant: getAriaValueFromProp(inputClass.ariaActiveDescendant),\n });\n });\n });\n describe('canSetSelection', () => {\n describe('when computedType is \"email\"', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"email\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.canSetSelection).toBe(false);\n });\n });\n describe('when computedType is \"number\"', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"number\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.canSetSelection).toBe(false);\n });\n });\n describe('when computedType is neither \"email\" nor \"number\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.canSetSelection).toBe(true);\n });\n });\n });\n describe('clearClasses', () => {\n it('returns an array with \"btn-clear\" class', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.clearClasses).toContain('btn-clear');\n });\n describe('adds \"hidden\" class', () => {\n it('when clearable is false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable=\"false\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.value = '';\n expect(inputClass.clearClasses).toContain('hidden');\n });\n it('when value prop is falsy', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n expect(inputElement.value).toBeFalsy();\n expect(inputClass.clearClasses).toContain('hidden');\n });\n it('when input field value is falsy', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.value).toBeFalsy();\n expect(inputClass.clearClasses).toContain('hidden');\n });\n });\n });\n describe('computedAutocomplete', () => {\n describe('if type = \"currency\"', () => {\n it('returns transaction-amount', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedAutocomplete).toBe('transaction-amount');\n });\n });\n describe('when autocomplete is not set', () => {\n it('returns \"off\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedAutocomplete).toBe('off');\n });\n });\n describe('when autocomplete is set', () => {\n it('returns the value of autocomplete', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" autocomplete=\"on\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedAutocomplete).toBe('on');\n });\n });\n });\n describe('computedClassForIconLeft', () => {\n it('returns a string with \"icon-left\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedClassForIconLeft).toContain('icon-left');\n });\n describe('when leftIconMuted is true in formattedValueObject', () => {\n it('returns a string with \"icon-left-muted\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { leftIconMuted: true };\n expect(inputClass.computedClassForIconLeft).toContain('icon-left-muted');\n });\n });\n });\n describe('computedIconLeft', () => {\n it('returns \"iconLeft\" prop value by default', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" icon-left=\"apple\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedIconLeft).toBe('apple');\n });\n describe('when formattedValueObject has a prefix', () => {\n it('short circuits and returns undefined', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { prefix: 'My Prefix' };\n expect(inputClass.computedIconLeft).toBeUndefined();\n });\n });\n describe('when type=\"search\"', () => {\n it('returns \"search\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"search\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedIconLeft).toBe('search');\n });\n });\n describe('when formattedValueObject has a leftIcon value', () => {\n it('returns the leftIcon value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { leftIcon: 'My Left Icon' };\n expect(inputClass.computedIconLeft).toBe('My Left Icon');\n });\n });\n });\n describe('computedType', () => {\n describe('when provided an unsupported type', () => {\n it('returns \"text\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"unsupported\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedType).toBe('text');\n });\n });\n describe('when provided a supported type', () => {\n it('returns the valid type from the inputTypeMap object', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"phone\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedType).toBe('tel');\n });\n });\n describe('when textHidden prop is true', () => {\n describe('when type is \"password\"', () => {\n it('returns \"password\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"password\" text-hidden></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedType).toBe('password');\n });\n });\n describe('when type is \"text\"', () => {\n it('returns \"password\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"text\" text-hidden></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedType).toBe('password');\n });\n });\n describe('when type is \"ssn\"', () => {\n it('returns \"password\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" text-hidden></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.computedType).toBe('password');\n });\n });\n });\n });\n describe('hasCustomDisplaySlot', () => {\n it('returns true when an element uses the \"custom-display\" slot', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"><span slot=\"custom-display\">My Custom Display</span></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.hasCustomDisplaySlot).toBe(true);\n });\n it('returns false when no element uses the \"custom-display\" slot', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.hasCustomDisplaySlot).toBe(false);\n });\n });\n describe('hasError', () => {\n it('returns true when errors array is not empty', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n expect(inputClass.hasError).toBe(true);\n });\n it('returns false when errors array is empty', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = [];\n expect(inputClass.hasError).toBe(false);\n });\n });\n describe('hasInputLeftSlot', () => {\n it('returns true when an element uses the \"input-left\" slot', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"><span slot=\"input-left\">My Input Left</span></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.hasInputLeftSlot).toBe(true);\n });\n it('returns false when no element uses the \"input-left\" slot', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.hasInputLeftSlot).toBe(false);\n });\n });\n describe('hasInputRightSlot', () => {\n it('returns true when an element uses the \"input-right\" slot', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"><span slot=\"input-right\">My Input Right</span></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.hasInputRightSlot).toBe(true);\n });\n it('returns false when no element uses the \"input-right\" slot', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.hasInputRightSlot).toBe(false);\n });\n });\n describe('inputDescribedBy', () => {\n describe('when showMessages is true', () => {\n it('returns a string with the input guid', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hints = ['My Hint'];\n const describedByString = `input-guid-${inputClass.guid}-description`;\n expect(inputClass.inputDescribedBy).toBe(describedByString);\n });\n });\n describe('when showMessages is false', () => {\n it('returns undefined', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputDescribedBy).toBeUndefined();\n });\n });\n });\n describe('inputField', () => {\n it('returns the input field element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputClass.inputField).toBe(inputElement);\n });\n });\n describe('inputId', () => {\n it('returns a string with the input guid', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const idString = `input-guid-${inputClass.guid}`;\n expect(inputClass.inputId).toBe(idString);\n });\n });\n describe('inputMode', () => {\n describe('when type is \"currency\"', () => {\n it('returns \"numeric\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('numeric');\n });\n });\n describe('when type is \"ssn\"', () => {\n it('returns \"numeric\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('numeric');\n });\n });\n describe('when type is \"tin\"', () => {\n it('returns \"numeric\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"tin\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('numeric');\n });\n });\n describe('when type is \"numeric\"', () => {\n it('returns \"decimal\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"numeric\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('decimal');\n });\n });\n describe('when type is \"percentage\"', () => {\n it('returns \"decimal\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"percentage\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('decimal');\n });\n });\n describe('when type is \"date\"', () => {\n it('returns \"numeric\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"date\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('numeric');\n });\n });\n describe('when type is \"credit-card\"', () => {\n it('returns \"numeric\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"credit-card\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBe('numeric');\n });\n });\n describe('when type is not provided', () => {\n it('returns undefined', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.inputMode).toBeUndefined();\n });\n });\n });\n describe('isMaskedType', () => {\n describe('when type is not in the \"maskedTypes\" array', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"search\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(false);\n });\n });\n describe('when type is \"currency\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"phone\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"phone\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"ssn\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"tin\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"tin\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"alphanumeric\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"alphanumeric\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"alpha\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"alpha\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"numeric\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"numeric\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"percentage\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"percentage\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"postal\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"postal\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"date\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"date\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n describe('when type is \"credit-card\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"credit-card\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.isMaskedType).toBe(true);\n });\n });\n });\n describe('messages', () => {\n describe('when errors are present', () => {\n it('returns the errors array', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n expect(inputClass.messages).toEqual(inputClass.errors);\n });\n });\n describe('when hints are present', () => {\n it('returns the hints array', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hints = ['My Hint'];\n expect(inputClass.messages).toEqual(inputClass.hints);\n });\n });\n describe('when errors and hints are both present', () => {\n it('returns only the errors array', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n inputClass.hints = ['My Hint'];\n expect(inputClass.messages).toEqual(inputClass.errors);\n expect(inputClass.messages).not.toEqual(inputClass.hints);\n });\n });\n describe('when errors and hints are both empty', () => {\n it('returns an empty array', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.messages).toEqual([]);\n });\n });\n });\n describe('shouldCursorStartAtEnd', () => {\n describe('when type is \"currency\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.shouldCursorStartAtEnd).toBe(true);\n });\n });\n describe('when type is NOT \"currency\"', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.shouldCursorStartAtEnd).toBe(false);\n });\n });\n });\n describe('shouldCursorStayAtEnd', () => {\n describe('when type is \"currency\" and isMobile is true', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.isMobile = true;\n expect(inputClass.shouldCursorStayAtEnd).toBe(true);\n });\n });\n describe('when type is NOT \"currency\"', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.shouldCursorStayAtEnd).toBe(false);\n });\n });\n describe('when isMobile is false', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.isMobile = false;\n expect(inputClass.shouldCursorStayAtEnd).toBe(false);\n });\n });\n });\n describe('showIconSeparator', () => {\n describe('when type is \"credit-card\"', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"credit-card\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.showIconSeparator).toBe(true);\n });\n });\n describe('when formattedValueObject.prefix has a value', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { prefix: 'My Prefix' };\n expect(inputClass.showIconSeparator).toBe(true);\n });\n });\n describe('when typs is NOT \"credit-card\" and formattedValueObject.prefix is empty', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.showIconSeparator).toBe(false);\n });\n });\n });\n describe('showMessages', () => {\n describe('when messages getter has length, and hideMessages is false', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n expect(inputClass.showMessages).toBe(true);\n });\n });\n describe('when hideMessages is true', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n inputClass.hideMessages = true;\n expect(inputClass.showMessages).toBe(false);\n });\n });\n describe('when messages getter is empty', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.showMessages).toBe(false);\n });\n });\n });\n describe('stringValue', () => {\n describe('when value is provided', () => {\n it('returns the value as a string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.stringValue).toBe('My Value');\n expect(typeof inputClass.stringValue).toBe('string');\n });\n });\n describe('when value is a coercable, non-string data type', () => {\n it('returns the value as a string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.value = 123;\n expect(inputClass.stringValue).toBe('123');\n expect(typeof inputClass.stringValue).toBe('string');\n inputClass.value = true;\n expect(inputClass.stringValue).toBe('true');\n expect(typeof inputClass.stringValue).toBe('string');\n });\n });\n describe('when value is a non-coercable data type', () => {\n it('returns an empty string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.value = { key: 'value' };\n expect(inputClass.stringValue).toBe('');\n });\n });\n describe('when value is not provided', () => {\n it('returns an empty string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.stringValue).toBe('');\n });\n });\n });\n describe('visibilityToggleAriaLabel', () => {\n describe('when textHidden is true', () => {\n it('returns the proper translation key', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" text-hidden></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.visibilityToggleAriaLabel).toBe('tecton.element.input.toggleAriaLabel.show');\n });\n });\n describe('when textHidden is false', () => {\n it('returns the proper translation key', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.visibilityToggleAriaLabel).toBe('tecton.element.input.toggleAriaLabel.hide');\n });\n });\n });\n describe('visibilityToggleText', () => {\n describe('when textHidden is true', () => {\n it('returns the proper translation key', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" text-hidden></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.visibilityToggleText).toBe('tecton.element.input.toggle.show');\n });\n });\n describe('when textHidden is false', () => {\n it('returns the proper translation key', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.visibilityToggleText).toBe('tecton.element.input.toggle.hide');\n });\n });\n });\n describe('wrapperClasses', () => {\n describe('has-error', () => {\n describe('when hasError is true', () => {\n it('includes \"has-error\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n expect(inputClass.wrapperClasses).toContain('has-error');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n describe('when hasError is false', () => {\n it('does not include \"has-error\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-error');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n describe('has-value', () => {\n describe('when value is truthy', () => {\n it('includes \"has-value\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('has-value');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n describe('when value is falsy', () => {\n it('does not include \"has-value\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-value');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n describe('has-clear', () => {\n describe('when clearable is true and value is truthy', () => {\n it('includes \"has-clear\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('has-clear');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n describe('when clearable is true and value is falsy', () => {\n it('does not include \"has-clear\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" clearable></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-clear');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n describe('when clearable is false and value is truthy', () => {\n it('does not include \"has-clear\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-clear');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n describe('has-focus', () => {\n describe('when hasFocus is true', () => {\n it('includes \"has-focus\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hasFocus = true;\n expect(inputClass.wrapperClasses).toContain('has-focus');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n\n describe('when hasFocus is false', () => {\n it('does not include \"has-focus\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hasFocus = false;\n expect(inputClass.wrapperClasses).not.toContain('has-focus');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n\n describe('is-small', () => {\n describe('when isSmall true', () => {\n it('includes \"is-small\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.isSmall = true;\n expect(inputClass.wrapperClasses).toContain('is-small');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n describe('when isSmall false', () => {\n it('does not include \"is-small\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.isSmall = false;\n expect(inputClass.wrapperClasses).not.toContain('is-small');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n describe('has-prefix', () => {\n describe('when formattedValueObject.prefix is truthy', () => {\n it('includes \"has-prefix\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { prefix: 'Prefix' };\n expect(inputClass.wrapperClasses).toContain('has-prefix');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n\n describe('when formattedValueObject.prefix is falsy', () => {\n it('does not include \"has-prefix\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { prefix: '' };\n expect(inputClass.wrapperClasses).not.toContain('has-prefix');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n\n describe('has-icon-left', () => {\n describe('when computedIconLeft is truthy', () => {\n it('includes \"has-icon-left\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" icon-left=\"apple\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('has-icon-left');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n\n describe('when computedIconLeft is falsy', () => {\n it('does not include \"has-icon-left\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-icon-left');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n\n describe('has-icon-separator', () => {\n describe('when showIconSeparator true', () => {\n it('includes \"has-icon-separator\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"credit-card\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('has-icon-separator');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n\n describe('when showIconSeparator false', () => {\n it('does not include \"has-icon-separator\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-icon-separator');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n\n describe('has-suffix', () => {\n describe('when formattedValueObject.suffix is truthy', () => {\n it('includes \"has-suffix\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { suffix: 'Suffix' };\n expect(inputClass.wrapperClasses).toContain('has-suffix');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n\n describe('when formattedValueObject.suffix is falsy', () => {\n it('does not include \"has-suffix\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { suffix: '' };\n expect(inputClass.wrapperClasses).not.toContain('has-suffix');\n expect(inputClass.wrapperClasses).toContain('field-container');\n });\n });\n });\n\n describe('has-icon-right', () => {\n describe('when formattedValueObject.suffix is falsy and iconRight is truthy', () => {\n it('includes \"has-icon-right\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" icon-right=\"apple\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { suffix: '' };\n expect(inputClass.wrapperClasses).toContain('has-icon-right');\n });\n });\n\n describe('when formattedValueObject.suffix is truthy or iconRight is falsy', () => {\n it('does not include \"has-icon-right\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formattedValueObject = { suffix: 'Suffix' };\n expect(inputClass.wrapperClasses).not.toContain('has-icon-right');\n });\n });\n });\n\n describe('right-aligned', () => {\n describe('when type is \"currency\"', () => {\n it('includes \"right-aligned\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('right-aligned');\n });\n });\n });\n\n describe('left-aligned', () => {\n describe('when type is NOT \"currency\"', () => {\n it('includes \"left-aligned\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"text\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('left-aligned');\n });\n });\n });\n\n describe('has-custom-display', () => {\n describe('when hasCustomDisplaySlot is true', () => {\n it('includes \"has-custom-display\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"><div slot=\"custom-display\"></div></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).toContain('has-custom-display');\n });\n });\n\n describe('when hasCustomDisplaySlot is false', () => {\n it('does not include \"has-custom-display\" in the class string', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n expect(inputClass.wrapperClasses).not.toContain('has-custom-display');\n });\n });\n });\n });\n });\n\n describe('Methods', () => {\n describe('calculateCursorPositionOnFocus', () => {\n it('returns an object with cursor position details', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n\n const cursorPosition = inputClass.calculateCursorPositionOnFocus();\n expect(cursorPosition).toHaveProperty('startingPosition');\n expect(cursorPosition).toHaveProperty('valueLength');\n expect(cursorPosition).toHaveProperty('previousValueLength');\n expect(cursorPosition).toHaveProperty('hasSelection');\n });\n describe('startingPosition', () => {\n describe('when input field text is selected', () => {\n it('returns the selectionStart value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.selectionStart = 2;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.startingPosition).toBe(inputClass.inputField.selectionStart);\n });\n });\n describe('when input field text is NOT selected', () => {\n it('returns the valueLength as the startingPosition', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.startingPosition).toBe(inputClass.value.length);\n });\n });\n });\n describe('valueLength', () => {\n describe('when input field has value', () => {\n it('returns the valueLength', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.valueLength).toBe(inputClass.value.length);\n });\n });\n describe('when input field is empty', () => {\n it('returns zero', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.valueLength).toBe(0);\n });\n });\n });\n describe('previousValueLength', () => {\n describe('when input field has value', () => {\n it('returns the valueLength', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.previousValueLength).toBe(cursorData.valueLength);\n });\n });\n describe('when input field is empty', () => {\n it('returns the valueLength', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.previousValueLength).toBe(cursorData.valueLength);\n });\n });\n });\n describe('hasSelection', () => {\n describe('when input field text is selected', () => {\n it('returns true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.setSelectionRange(2, 5, 'forward');\n await specPage.waitForChanges();\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.hasSelection).toBe(true);\n });\n });\n describe('when input field text is NOT selected', () => {\n it('returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnFocus();\n expect(cursorData.hasSelection).toBe(false);\n });\n });\n });\n });\n describe('calculateCursorPositionOnInput', () => {\n it('returns an object with cursor position details', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n\n const cursorPosition = inputClass.calculateCursorPositionOnInput();\n expect(cursorPosition).toHaveProperty('startingPosition');\n expect(cursorPosition).toHaveProperty('valueLength');\n expect(cursorPosition).toHaveProperty('previousValueLength');\n expect(cursorPosition).toHaveProperty('hasSelection');\n });\n describe('startingPosition', () => {\n describe('when input field text is selected', () => {\n it('returns the selectionStart value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.selectionStart = 2;\n const cursorData = inputClass.calculateCursorPositionOnInput();\n expect(cursorData.startingPosition).toBe(inputClass.inputField.selectionStart);\n });\n });\n describe('when input field text is NOT selected', () => {\n it('returns zero', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnInput();\n expect(cursorData.startingPosition).toBe(0);\n });\n describe('if type is currency', () => {\n it('returns the formattedValue length', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnInput();\n expect(cursorData.startingPosition).toBe(\n inputClass.formattedValueObject.formattedValue.length\n );\n });\n });\n });\n });\n describe('valueLength', () => {\n it('returns the fomrattedValue length', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnInput();\n expect(cursorData.valueLength).toBe(inputClass.formattedValueObject.formattedValue.length);\n });\n });\n describe('previousValueLength', () => {\n it('returns the input field value length', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnInput();\n expect(cursorData.previousValueLength).toBe(inputClass.value.length);\n });\n });\n describe('hasSelection', () => {\n it('always returns false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const cursorData = inputClass.calculateCursorPositionOnInput();\n expect(cursorData.hasSelection).toBe(false);\n });\n });\n });\n describe('formatAndUpdateValueFromProp', () => {\n it('calls getFormattedValue', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formattedValueSpy = jest.spyOn(inputClass, 'getFormattedValue');\n inputClass.formatAndUpdateValueFromProp();\n expect(formattedValueSpy).toHaveBeenCalled();\n });\n describe('when not pseudo', () => {\n it('sets the value of the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.formatAndUpdateValueFromProp();\n expect(inputClass.inputField.value).toBe('My Value');\n });\n });\n });\n describe('getFormattedValue', () => {\n describe('when the type requires a formattingFunction', () => {\n it('returns an object of formatting results', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formattedValue = inputClass.getFormattedValue('123456789');\n expect(formattedValue).toHaveProperty('value');\n expect(formattedValue).toHaveProperty('formattedValue');\n expect(formattedValue).toHaveProperty('fullyFormattedValue');\n expect(formattedValue).toHaveProperty('prefix');\n expect(formattedValue).toHaveProperty('formattingCharacterCount');\n expect(formattedValue).toHaveProperty('maxlength');\n expect(formattedValue).toHaveProperty('minFormattedLength');\n expect(formattedValue).toHaveProperty('unformattedValue');\n });\n describe('when type is \"currency\"', () => {\n it('calls the associated formatter function', async () => {\n const currencySpy = jest.spyOn(formatCurrency, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345678');\n expect(currencySpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"phone\"', () => {\n it('calls the associated formatter function', async () => {\n const phoneSpy = jest.spyOn(formatPhoneNumber, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"phone\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345678');\n expect(phoneSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"ssn\"', () => {\n it('calls the associated formatter function', async () => {\n const ssnSpy = jest.spyOn(formatSSN, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345678');\n expect(ssnSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"tin\"', () => {\n it('calls the associated formatter function', async () => {\n const tinSpy = jest.spyOn(formatTIN, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"tin\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345678');\n expect(tinSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"alphanumeric\"', () => {\n it('calls the associated formatter function', async () => {\n const alphaNumSpy = jest.spyOn(formatAlphanumeric, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"alphanumeric\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345678abcdefg');\n expect(alphaNumSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"alpha\"', () => {\n it('calls the associated formatter function', async () => {\n const alphaSpy = jest.spyOn(formatAlpha, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"alpha\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('abcdefg');\n expect(alphaSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"numeric\"', () => {\n it('calls the associated formatter function', async () => {\n const numSpy = jest.spyOn(formatNumeric, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"numeric\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345678');\n expect(numSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"percentage\"', () => {\n it('calls the associated formatter function', async () => {\n const percentageSpy = jest.spyOn(formatNumeric, 'formatPercentage');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"percentage\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('50');\n expect(percentageSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"postal\"', () => {\n it('calls the associated formatter function', async () => {\n const postalSpy = jest.spyOn(formatPostalCode, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"postal\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('12345');\n expect(postalSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"date\"', () => {\n it('calls the associated formatter function', async () => {\n const dateSpy = jest.spyOn(formatDate, 'default');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"date\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('2023-01-01');\n expect(dateSpy).toHaveBeenCalled();\n });\n });\n describe('when type is \"credit-card\"', () => {\n it('calls the associated formatter function', async () => {\n const creditSpy = jest.spyOn(formatCreditCard.default, 'format');\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"credit-card\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.getFormattedValue('4111111111111111');\n expect(creditSpy).toHaveBeenCalled();\n });\n });\n });\n describe('when the type does NOT require a formattingFunction', () => {\n it('returns a slightly different object of formatting results', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formattedValue = inputClass.getFormattedValue();\n expect(formattedValue).toHaveProperty('value');\n expect(formattedValue).toHaveProperty('formattedValue');\n expect(formattedValue).toHaveProperty('fullyFormattedValue');\n expect(formattedValue).toHaveProperty('formattingCharacterCount');\n expect(formattedValue).toHaveProperty('unformattedValue');\n });\n it('returns an object with the correct values', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const formattedValue = inputClass.getFormattedValue('My Value');\n expect(formattedValue.value).toBe('My Value');\n expect(formattedValue.formattedValue).toBe('My Value');\n expect(formattedValue.fullyFormattedValue).toBe('My Value');\n expect(formattedValue.formattingCharacterCount).toBe(0);\n expect(formattedValue.unformattedValue).toBe('My Value');\n });\n });\n });\n describe('handleCurrencyDeletion', () => {\n describe('if text was selected for deletion', () => {\n it('does nothing except update textSelectedForDeletion value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"Amount\" type=\"currency\" value=\"$1,234.56\"></q2-input>',\n });\n\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const setSelectionRangeSpy = jest.spyOn(inputElement, 'setSelectionRange');\n inputClass.textSelectedForDeletion = true;\n\n inputClass.handleCurrencyDeletion();\n\n expect(setSelectionRangeSpy).not.toHaveBeenCalled();\n expect(inputClass.textSelectedForDeletion).toBe(false);\n setSelectionRangeSpy.mockRestore();\n });\n });\n describe('if text was NOT selected for deletion', () => {\n it('calls setSelectionRange to enforce a cursor position after \"Backspace\" or \"Delete\"', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const setSelectionRangeSpy = jest.spyOn(inputElement, 'setSelectionRange');\n inputElement.selectionStart = 3;\n inputElement.selectionEnd = 3;\n const deleteEvent = new CustomEvent('input', {\n bubbles: true,\n cancelable: true,\n });\n Object.defineProperty(deleteEvent, 'inputType', {\n value: 'deleteContentBackward',\n enumerable: true,\n });\n Object.defineProperty(deleteEvent, 'target', {\n value: inputElement,\n enumerable: true,\n });\n\n inputClass.handleCurrencyDeletion(deleteEvent);\n expect(setSelectionRangeSpy).toHaveBeenCalled();\n expect(setSelectionRangeSpy).toHaveBeenCalledWith(3, 3);\n expect(nextPaintMock).not.toHaveBeenCalled();\n setSelectionRangeSpy.mockRestore();\n });\n it('calls nextPaint if the newCursorPosition is zero', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.selectionStart = 0;\n inputElement.selectionEnd = 0;\n const deleteEvent = new CustomEvent('input', {\n bubbles: true,\n cancelable: true,\n });\n Object.defineProperty(deleteEvent, 'inputType', {\n value: 'deleteContentBackward',\n enumerable: true,\n });\n Object.defineProperty(deleteEvent, 'target', {\n value: inputElement,\n enumerable: true,\n });\n\n inputClass.handleCurrencyDeletion(deleteEvent);\n expect(nextPaintMock).toHaveBeenCalled();\n });\n });\n });\n describe('handleCurrencyKeydown', () => {\n describe('when keys are \"Backspace\" or \"Delete\"', () => {\n describe('when selection start and end are equal', () => {\n it('updates textSelectedForDeletion to false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.selectionStart = 2;\n inputElement.selectionEnd = 2;\n\n expect(inputClass.textSelectedForDeletion).toBeUndefined();\n const keydownEvent = new KeyboardEvent('keydown', { key: 'Backspace' });\n inputClass.handleCurrencyKeydown(keydownEvent);\n expect(inputClass.textSelectedForDeletion).toBe(false);\n });\n });\n });\n describe('when selection start and end are NOT equal', () => {\n it('updates textSelectedForDeletion to true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.selectionStart = 2;\n inputElement.selectionEnd = 4;\n\n expect(inputClass.textSelectedForDeletion).toBeUndefined();\n const keydownEvent = new KeyboardEvent('keydown', { key: 'Backspace' });\n inputClass.handleCurrencyKeydown(keydownEvent);\n expect(inputClass.textSelectedForDeletion).toBe(true);\n });\n });\n });\n describe('handleDataInput', () => {\n describe('when maxlength is true', () => {\n it('updates formattedValueObject with a new one at the expected maxlength', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.maxlength = 5;\n const newFormattedValueObject = inputClass.getFormattedValue('My Long Value');\n inputClass.handleDataInput(newFormattedValueObject);\n expect(inputClass.formattedValueObject.value.length).toBe(5);\n expect(inputClass.formattedValueObject).toEqual({\n value: 'My Lo',\n formattedValue: 'My Lo',\n minFormattedLength: undefined,\n formattingCharacterCount: 0,\n fullyFormattedValue: 'My Lo',\n unformattedValue: 'My Lo',\n });\n });\n });\n describe('when maxlength is undefined', () => {\n it('updates formattedValueObject with a new one', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const newFormattedValueObject = inputClass.getFormattedValue('Another Long Value');\n inputClass.handleDataInput(newFormattedValueObject);\n expect(inputClass.formattedValueObject).toEqual({\n value: 'Another Long Value',\n formattedValue: 'Another Long Value',\n minFormattedLength: undefined,\n formattingCharacterCount: 0,\n fullyFormattedValue: 'Another Long Value',\n unformattedValue: 'Another Long Value',\n });\n });\n });\n });\n describe('handleValueAndCursor', () => {\n it('emits an input event with data from formattedValueObject', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const inputSpy = jest.spyOn(inputClass.input, 'emit');\n inputClass.handleValueAndCursor();\n expect(inputSpy).toHaveBeenCalled();\n expect(inputSpy).toHaveBeenCalledWith({\n value: '12345678',\n formattedValue: '123-45-678',\n minFormattedLength: 11,\n });\n });\n it('calls setCursorPosition', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const setCursorSpy = jest.spyOn(inputClass, 'setCursorPosition');\n inputClass.handleValueAndCursor();\n expect(setCursorSpy).toHaveBeenCalled();\n });\n describe('when type is NOT number', () => {\n it('input field value is updated with formatted value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.handleValueAndCursor();\n expect(inputClass.inputField.value).toBe(inputClass.formattedValueObject.formattedValue);\n });\n });\n describe('when formattedValueObject value is falsy', () => {\n it('emits a clear event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const clearSpy = jest.spyOn(inputClass.clear, 'emit');\n inputClass.formattedValueObject.value = '';\n inputClass.handleValueAndCursor();\n expect(clearSpy).toHaveBeenCalled();\n });\n });\n });\n describe('initMutationObserver', () => {\n // Can't test this... yet?\n });\n describe('onClearInput', () => {\n it('emits an input event with event detail', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const inputSpy = jest.spyOn(inputClass.input, 'emit');\n inputClass.onClearInput();\n expect(inputSpy).toHaveBeenCalled();\n expect(inputSpy).toHaveBeenCalledWith({\n value: '',\n formattedValue: '',\n minFormattedLength: 11,\n });\n });\n it('emits a change event with event detail', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const changeSpy = jest.spyOn(inputClass.change, 'emit');\n inputClass.onClearInput();\n expect(changeSpy).toHaveBeenCalled();\n expect(changeSpy).toHaveBeenCalledWith({\n value: '',\n formattedValue: '',\n minFormattedLength: 11,\n });\n });\n it('emits a clear event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const changeSpy = jest.spyOn(inputClass.clear, 'emit');\n inputClass.onClearInput();\n expect(changeSpy).toHaveBeenCalled();\n });\n it('calls focus on the inputField element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"ssn\" value=\"12345678\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.onClearInput();\n expect(focusSpy).toHaveBeenCalled();\n });\n });\n describe('onInputBlur', () => {\n it('sets hasFocus to false', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hasFocus = true;\n inputClass.onInputBlur();\n expect(inputClass.hasFocus).toBe(false);\n });\n it('calls setMessageHeight', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.onInputBlur();\n expect(setMessageHeightMock).toHaveBeenCalled();\n });\n describe('when valueOnFocus is different from the formattedValueObject value', () => {\n it('updates the valueOnFocus property to the formattedValueObject value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.valueOnFocus = 'My Different Value';\n inputClass.onInputBlur();\n expect(inputClass.valueOnFocus).toBe(inputClass.formattedValueObject.value);\n });\n it('emits a change event with event detail', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.valueOnFocus = 'My Different Value';\n const changeSpy = jest.spyOn(inputClass.change, 'emit');\n inputClass.onInputBlur();\n expect(changeSpy).toHaveBeenCalled();\n expect(changeSpy).toHaveBeenCalledWith({\n value: inputClass.formattedValueObject.value,\n formattedValue: inputClass.formattedValueObject.fullyFormattedValue,\n minFormattedLength: inputClass.formattedValueObject.minFormattedLength,\n });\n });\n });\n });\n describe('onInputClick', () => {\n describe('if shouldCursorStayAtEnd returns true', () => {\n it('calls placeCursorAtEnd', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const placeCursorSpy = jest.spyOn(inputClass, 'placeCursorAtEnd');\n inputClass.isMobile = true;\n inputClass.onInputClick();\n expect(placeCursorSpy).toHaveBeenCalled();\n });\n });\n describe('if shouldCursorStayAtEnd returns false', () => {\n it('does not call placeCursorAtEnd', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" \"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const placeCursorSpy = jest.spyOn(inputClass, 'placeCursorAtEnd');\n inputClass.onInputClick();\n expect(placeCursorSpy).not.toHaveBeenCalled();\n });\n });\n });\n describe('onInputFocus', () => {\n it('sets hasFocus to true', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.hasFocus = false;\n inputClass.onInputFocus();\n expect(inputClass.hasFocus).toBe(true);\n });\n it('calls setMessageHeight', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.onInputFocus();\n expect(setMessageHeightMock).toHaveBeenCalled();\n });\n it('sets valueOnFocus to the current input field value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.valueOnFocus = '';\n inputClass.onInputFocus();\n expect(inputClass.valueOnFocus).toBe(inputClass.inputField.value);\n });\n describe('when inputField tagname is \"INPUT\"', () => {\n describe('when shouldCursorStartAtEnd returns true', () => {\n it('adds placeCursorAtEnd to the queue', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const placeCursorSpy = jest.spyOn(inputClass, 'placeCursorAtEnd');\n inputClass.onInputFocus();\n inputClass.scheduledAfterRender[0](); // call it to verify the expected function is in the queue\n expect(inputClass.scheduledAfterRender.length).toBe(1);\n expect(placeCursorSpy).toHaveBeenCalled();\n });\n });\n describe('when shouldCursorStartAtEnd returns false', () => {\n it('adds setCursorPosition to the queue', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const setCursorSpy = jest.spyOn(inputClass, 'setCursorPosition');\n inputClass.onInputFocus();\n inputClass.scheduledAfterRender[0](); // call it to verify the expected function is in the queue\n expect(inputClass.scheduledAfterRender.length).toBe(1);\n expect(setCursorSpy).toHaveBeenCalled();\n });\n });\n });\n });\n describe('onInputInput', () => {\n it('calls event.stopPropogation', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = new CustomEvent('input');\n Object.defineProperty(event, 'target', {\n value: inputElement,\n enumerable: true,\n });\n const stopPropagationSpy = jest.spyOn(event, 'stopPropagation');\n inputClass.onInputInput(event);\n expect(stopPropagationSpy).toHaveBeenCalled();\n });\n it('if type is \"currency\", calls handleCurrencyDeletion', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = new CustomEvent('input');\n Object.defineProperty(event, 'target', {\n value: inputElement,\n enumerable: true,\n });\n const handleCurrencySpy = jest.spyOn(inputClass, 'handleCurrencyDeletion');\n inputClass.onInputInput(event);\n expect(handleCurrencySpy).toHaveBeenCalled();\n });\n it('calls handleDataInput', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = new CustomEvent('input');\n Object.defineProperty(event, 'target', {\n value: inputElement,\n enumerable: true,\n });\n const handleDataInputSpy = jest.spyOn(inputClass, 'handleDataInput');\n inputClass.onInputInput(event);\n expect(handleDataInputSpy).toHaveBeenCalled();\n });\n it('calls validateInput', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = new CustomEvent('input');\n Object.defineProperty(event, 'target', {\n value: inputElement,\n enumerable: true,\n });\n const validateInputSpy = jest.spyOn(inputClass, 'validateInput');\n inputClass.onInputInput(event);\n expect(validateInputSpy).toHaveBeenCalled();\n });\n });\n describe('onInputKeydown', () => {\n describe('when type is currency', () => {\n it('calls handleCurrencyKeydown', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = new KeyboardEvent('keydown', { key: 'Backspace' });\n const handleCurrencySpy = jest.spyOn(inputClass, 'handleCurrencyKeydown');\n inputClass.onInputKeydown(event);\n expect(handleCurrencySpy).toHaveBeenCalled();\n });\n });\n describe('when shouldCursorStayAtEnd returns true and specific keys are pressed', () => {\n it('calls preventDefault on the event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = new KeyboardEvent('keydown', { key: 'ArrowLeft' });\n const preventDefaultSpy = jest.spyOn(event, 'preventDefault');\n inputClass.isMobile = true;\n inputClass.onInputKeydown(event);\n expect(preventDefaultSpy).toHaveBeenCalled();\n });\n });\n describe('when key is \"Enter\" and valueOnFocus does not match formattedValueObject.value', () => {\n it('updates valueOnFocus to the formattedValueObject value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.valueOnFocus = 'My Different Value';\n const event = new KeyboardEvent('keydown', { key: 'Enter' });\n inputClass.onInputKeydown(event);\n expect(inputClass.valueOnFocus).toBe(inputClass.formattedValueObject.value);\n });\n it('emits a change event with event detail', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.valueOnFocus = 'My Different Value';\n const changeSpy = jest.spyOn(inputClass.change, 'emit');\n const event = new KeyboardEvent('keydown', { key: 'Enter' });\n inputClass.onInputKeydown(event);\n expect(changeSpy).toHaveBeenCalled();\n expect(changeSpy).toHaveBeenCalledWith({\n value: inputClass.formattedValueObject.value,\n formattedValue: inputClass.formattedValueObject.fullyFormattedValue,\n minFormattedLength: inputClass.formattedValueObject.minFormattedLength,\n });\n });\n });\n });\n describe('onInputPaste', () => {\n describe('when type is currency', () => {\n it('calls preventDefault on the clipboard event', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = {\n preventDefault: jest.fn(),\n clipboardData: {\n getData: jest.fn().mockReturnValue('123'),\n },\n } as unknown as ClipboardEvent;\n const preventDefaultSpy = jest.spyOn(event, 'preventDefault');\n inputClass.onInputPaste(event);\n expect(preventDefaultSpy).toHaveBeenCalled();\n });\n it('calls handleDataInput', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const event = {\n preventDefault: jest.fn(),\n clipboardData: {\n getData: jest.fn().mockReturnValue('123'),\n },\n } as unknown as ClipboardEvent;\n const handleDataInputSpy = jest.spyOn(inputClass, 'handleDataInput');\n inputClass.onInputPaste(event);\n expect(handleDataInputSpy).toHaveBeenCalled();\n });\n });\n });\n describe('onMutationObserved', () => {\n it('updates checkSlotCount to force a re-render', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.checkSlotCount = 0;\n inputClass.onMutationObserved();\n expect(inputClass.checkSlotCount).toBe(1);\n });\n });\n describe('onRefocusInput', () => {\n describe('when showMessages returns true', () => {\n it('calls focus on the inputField element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n const focusSpy = jest.spyOn(inputElement, 'focus');\n inputClass.errors = ['My Error'];\n inputClass.onRefocusInput();\n expect(focusSpy).toHaveBeenCalled();\n });\n it('calls setMessageHeight', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.errors = ['My Error'];\n inputClass.onRefocusInput();\n expect(setMessageHeightMock).toHaveBeenCalled();\n });\n });\n });\n describe('onToggleVisibility', () => {\n it('dispatches a focus event on the hostElement', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n const dispatchEventSpy = jest.spyOn(inputClass.hostElement, 'dispatchEvent');\n inputClass.onToggleVisibility();\n const calledEvent = dispatchEventSpy.mock.calls[0][0] as FocusEvent;\n expect(dispatchEventSpy).toHaveBeenCalled();\n expect(calledEvent.type).toBe('focus');\n });\n it('changes textHidden to the opposite of its current value', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputClass.textHidden = true;\n inputClass.onToggleVisibility();\n expect(inputClass.textHidden).toBe(false);\n });\n });\n describe('placeCursorAtEnd', () => {\n it('updates the selectionStart and selectionEnd to the input field value length', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.selectionStart = 0;\n inputElement.selectionEnd = 5;\n\n inputClass.placeCursorAtEnd();\n expect(inputElement.selectionStart).toBe(inputElement.value.length);\n expect(inputElement.selectionEnd).toBe(inputElement.value.length);\n });\n });\n describe('setCursorPosition', () => {\n describe('when canSetSelection returns true and cursor has no selection', () => {\n describe('when type is \"currency\"', () => {\n describe('when previousValueLength - valueLength is 1', () => {\n it('calls setSelectionRange 1 less than startingPosition', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"123456\"></q2-input>',\n });\n const cursorData = {\n startingPosition: 3,\n valueLength: 6,\n previousValueLength: 7,\n hasSelection: false,\n };\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.setSelectionRange = setSelectionRangeMock;\n inputClass.setCursorPosition(cursorData);\n expect(setSelectionRangeMock).toHaveBeenCalled();\n expect(setSelectionRangeMock).toHaveBeenCalledWith(2, 2);\n });\n });\n describe('when previousValueLength - valueLength is NOT 1', () => {\n it('calls setSelectionRange at the startingPosition - difference', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"currency\" value=\"1234567\"></q2-input>',\n });\n const cursorData = {\n startingPosition: 3,\n valueLength: 5,\n previousValueLength: 7,\n hasSelection: false,\n };\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.setSelectionRange = setSelectionRangeMock;\n inputClass.setCursorPosition(cursorData);\n expect(setSelectionRangeMock).toHaveBeenCalled();\n expect(setSelectionRangeMock).toHaveBeenCalledWith(1, 1);\n });\n });\n });\n describe('when type is NOT \"currency\"', () => {\n describe('when difference is greater than zero', () => {\n it('calls setSelectionRange at the startingPosition + difference', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"text\" value=\"Test Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.setSelectionRange = setSelectionRangeMock;\n const cursorData = {\n startingPosition: 3,\n valueLength: 8,\n previousValueLength: 10,\n hasSelection: false,\n };\n inputClass.setCursorPosition(cursorData);\n expect(setSelectionRangeMock).toHaveBeenCalled();\n expect(setSelectionRangeMock).toHaveBeenCalledWith(3, 3);\n });\n });\n describe('when difference is less than or equal to zero', () => {\n it('calls setSelectionRange with only the startingPosition', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" type=\"text\" value=\"Test Value\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.setSelectionRange = setSelectionRangeMock;\n const cursorData = {\n startingPosition: 3,\n valueLength: 8,\n previousValueLength: 8,\n hasSelection: false,\n };\n inputClass.setCursorPosition(cursorData);\n expect(setSelectionRangeMock).toHaveBeenCalled();\n expect(setSelectionRangeMock).toHaveBeenCalledWith(3, 3);\n });\n });\n });\n });\n });\n describe('validateInput', () => {\n it('updates the validity property to the validity object of the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n inputElement.value = 'My Value';\n inputClass.validateInput();\n expect(inputClass.validity).toBe(inputElement.validity);\n });\n });\n });\n });\n\n describe('Render Methods', () => {\n describe('renderCountDOM', () => {\n describe('when showCount is true', () => {\n it('renders a character counter', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"abc\" show-count></q2-input>',\n });\n const counter = specPage.root.shadowRoot.querySelector('.count-tag');\n expect(counter).not.toBeNull();\n });\n it('displays the number of characters in the input field', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"abc\" show-count></q2-input>',\n });\n const counter = specPage.root.shadowRoot.querySelector('.count-tag');\n expect(counter).toEqualText('3');\n });\n describe('when maxlength is provided', () => {\n it('renders a character counter in relation to the maxlength', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" maxlength=\"10\" value=\"abc\" show-count></q2-input>',\n });\n const counter = specPage.root.shadowRoot.querySelector('.count-tag');\n expect(counter).toEqualText('3/10');\n });\n });\n });\n });\n describe('renderInputContainerDOM', () => {\n it('renders a div with class input-icons-container-left', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n containerElement = inputElement.shadowRoot.querySelector('.input-icons-container-left');\n expect(containerElement).not.toBeNull();\n });\n it('renders a div with class input-icons-container-right', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n containerElement = inputElement.shadowRoot.querySelector('.input-icons-container-right');\n expect(containerElement).not.toBeNull();\n });\n it('renders a clear button in the input-icons-container-right element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n containerElement = inputElement.shadowRoot.querySelector('.input-icons-container-right');\n const clearButton = containerElement.querySelector('[test-id=\"clearButton\"]');\n expect(clearButton).not.toBeNull();\n });\n });\n describe('renderStandardInputDOM', () => {\n it('renders a standard input element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputClass = specPage.rootInstance;\n inputElement = specPage.root;\n const input = inputElement.shadowRoot.querySelector('.input-field');\n expect(input).not.toBeNull();\n });\n it('sets expected default attributes on the input element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('input');\n expect(inputElement.getAttribute('type')).toBe('text');\n expect(inputElement.getAttribute('size')).toBeNull();\n expect(inputElement.getAttribute('maxlength')).toBeNull();\n expect(inputElement.getAttribute('min')).toBeNull();\n expect(inputElement.getAttribute('max')).toBeNull();\n expect(inputElement.getAttribute('step')).toBeNull();\n expect(inputElement.getAttribute('aria-current')).toBeNull();\n expect(inputElement.getAttribute('aria-describedby')).toBeNull();\n expect(inputElement.getAttribute('aria-required')).toBe('true');\n expect(inputElement.getAttribute('aria-invalid')).toBe('false');\n expect(inputElement.getAttribute('aria-owns')).toBeNull();\n expect(inputElement.getAttribute('aria-haspopup')).toBeNull();\n expect(inputElement.getAttribute('aria-expanded')).toBeNull();\n expect(inputElement.getAttribute('aria-activedescendant')).toBeNull();\n expect(inputElement.getAttribute('autocomplete')).toBe('off');\n expect(inputElement.getAttribute('autocapitalize')).toBeNull();\n expect(inputElement.getAttribute('autocorrect')).toBe('off');\n expect(inputElement.getAttribute('autofocus')).toBeNull();\n expect(inputElement.getAttribute('placeholder')).toBeNull();\n expect(inputElement.getAttribute('role')).toBeNull();\n expect(inputElement.getAttribute('test-id')).toBe('inputField');\n expect(inputElement.getAttribute('readonly')).toBeNull();\n expect(inputElement.getAttribute('disabled')).toBeNull();\n expect(inputElement.getAttribute('input-mode')).toBeNull();\n });\n describe('when hasCustomDisplaySlot is true', () => {\n it('renders a slotted element and puts the \"sr\" class on the input', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\"><div slot=\"custom-display\"></div></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('input');\n const slottedElement = specPage.root.shadowRoot.querySelector('.custom-display-container');\n expect(slottedElement).not.toBeNull();\n expect(inputElement.className).toContain('sr');\n });\n });\n });\n describe('renderPseudoInputDOM', () => {\n it('renders a button element', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" pseudo></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement.tagName).toBe('BUTTON');\n });\n it('displays placeholder text', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" placeholder=\"My Placeholder\" pseudo></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement).toEqualText('My Placeholder');\n });\n it('displays value text', async () => {\n specPage = await setupSpecPageWithLoc({\n components: [Q2Input],\n html: '<q2-input label=\"My Label\" value=\"My Value\" pseudo></q2-input>',\n });\n inputElement = specPage.root.shadowRoot.querySelector('.input-field');\n expect(inputElement).toEqualText('My Value');\n });\n });\n });\n});\n"]}
|