q2-tecton-elements 1.45.1 → 1.45.2

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.
Files changed (120) hide show
  1. package/dist/cjs/q2-message.cjs.entry.js +1 -1
  2. package/dist/cjs/q2-message.cjs.entry.js.map +1 -1
  3. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +1 -1
  4. package/dist/cjs/q2-stepper-vertical.cjs.entry.js.map +1 -1
  5. package/dist/cjs/q2-stepper.cjs.entry.js +1 -1
  6. package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
  7. package/dist/collection/components/q2-message/q2-message.css +3 -3
  8. package/dist/collection/components/q2-stepper/q2-stepper.css +4 -2
  9. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.css +5 -16
  10. package/dist/components/q2-message2.js +1 -1
  11. package/dist/components/q2-message2.js.map +1 -1
  12. package/dist/components/q2-stepper-vertical.js +1 -1
  13. package/dist/components/q2-stepper-vertical.js.map +1 -1
  14. package/dist/components/q2-stepper.js +1 -1
  15. package/dist/components/q2-stepper.js.map +1 -1
  16. package/dist/esm/q2-message.entry.js +1 -1
  17. package/dist/esm/q2-message.entry.js.map +1 -1
  18. package/dist/esm/q2-stepper-vertical.entry.js +1 -1
  19. package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
  20. package/dist/esm/q2-stepper.entry.js +1 -1
  21. package/dist/esm/q2-stepper.entry.js.map +1 -1
  22. package/dist/q2-tecton-elements/p-445990a8.entry.js +2 -0
  23. package/dist/q2-tecton-elements/p-445990a8.entry.js.map +1 -0
  24. package/dist/q2-tecton-elements/p-a977e723.entry.js +2 -0
  25. package/dist/q2-tecton-elements/p-a977e723.entry.js.map +1 -0
  26. package/dist/q2-tecton-elements/p-c016bd18.entry.js +2 -0
  27. package/dist/q2-tecton-elements/p-c016bd18.entry.js.map +1 -0
  28. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  29. package/dist/test/elements/q2-action-sheet-test.e2e.js +5 -1
  30. package/dist/test/elements/q2-action-sheet-test.e2e.js.map +1 -1
  31. package/dist/test/elements/q2-avatar-test.e2e.js +2 -3
  32. package/dist/test/elements/q2-avatar-test.e2e.js.map +1 -1
  33. package/dist/test/elements/q2-badge-test.e2e.js +5 -1
  34. package/dist/test/elements/q2-badge-test.e2e.js.map +1 -1
  35. package/dist/test/elements/q2-btn-test.e2e.js +5 -1
  36. package/dist/test/elements/q2-btn-test.e2e.js.map +1 -1
  37. package/dist/test/elements/q2-calendar-test.e2e.js +5 -1
  38. package/dist/test/elements/q2-calendar-test.e2e.js.map +1 -1
  39. package/dist/test/elements/q2-card-test.e2e.js +5 -1
  40. package/dist/test/elements/q2-card-test.e2e.js.map +1 -1
  41. package/dist/test/elements/q2-chart-area-test.e2e.js +5 -1
  42. package/dist/test/elements/q2-chart-area-test.e2e.js.map +1 -1
  43. package/dist/test/elements/q2-chart-bar-test.e2e.js +5 -1
  44. package/dist/test/elements/q2-chart-bar-test.e2e.js.map +1 -1
  45. package/dist/test/elements/q2-chart-donut-test.e2e.js +5 -1
  46. package/dist/test/elements/q2-chart-donut-test.e2e.js.map +1 -1
  47. package/dist/test/elements/q2-checkbox-group-test.e2e.js +5 -1
  48. package/dist/test/elements/q2-checkbox-group-test.e2e.js.map +1 -1
  49. package/dist/test/elements/q2-checkbox-test.e2e.js +5 -1
  50. package/dist/test/elements/q2-checkbox-test.e2e.js.map +1 -1
  51. package/dist/test/elements/q2-currency-test.e2e.js +5 -1
  52. package/dist/test/elements/q2-currency-test.e2e.js.map +1 -1
  53. package/dist/test/elements/q2-data-table-test.e2e.js +5 -1
  54. package/dist/test/elements/q2-data-table-test.e2e.js.map +1 -1
  55. package/dist/test/elements/q2-dropdown-item-test.e2e.js +5 -1
  56. package/dist/test/elements/q2-dropdown-item-test.e2e.js.map +1 -1
  57. package/dist/test/elements/q2-dropdown-test.e2e.js +5 -1
  58. package/dist/test/elements/q2-dropdown-test.e2e.js.map +1 -1
  59. package/dist/test/elements/q2-editable-field-test.e2e.js +5 -1
  60. package/dist/test/elements/q2-editable-field-test.e2e.js.map +1 -1
  61. package/dist/test/elements/q2-icon-test.e2e.js +5 -1
  62. package/dist/test/elements/q2-icon-test.e2e.js.map +1 -1
  63. package/dist/test/elements/q2-input-test.e2e.js +5 -1
  64. package/dist/test/elements/q2-input-test.e2e.js.map +1 -1
  65. package/dist/test/elements/q2-loading-test.e2e.js +5 -1
  66. package/dist/test/elements/q2-loading-test.e2e.js.map +1 -1
  67. package/dist/test/elements/q2-loc-test.e2e.js +5 -1
  68. package/dist/test/elements/q2-loc-test.e2e.js.map +1 -1
  69. package/dist/test/elements/q2-message-test.e2e.js +5 -1
  70. package/dist/test/elements/q2-message-test.e2e.js.map +1 -1
  71. package/dist/test/elements/q2-optgroup-test.e2e.js +5 -1
  72. package/dist/test/elements/q2-optgroup-test.e2e.js.map +1 -1
  73. package/dist/test/elements/q2-option-list-test.e2e.js +5 -1
  74. package/dist/test/elements/q2-option-list-test.e2e.js.map +1 -1
  75. package/dist/test/elements/q2-option-test.e2e.js +5 -1
  76. package/dist/test/elements/q2-option-test.e2e.js.map +1 -1
  77. package/dist/test/elements/q2-pagination-test.e2e.js +5 -1
  78. package/dist/test/elements/q2-pagination-test.e2e.js.map +1 -1
  79. package/dist/test/elements/q2-pill-test.e2e.js +2 -3
  80. package/dist/test/elements/q2-pill-test.e2e.js.map +1 -1
  81. package/dist/test/elements/q2-popover-test.e2e.js +6 -2
  82. package/dist/test/elements/q2-popover-test.e2e.js.map +1 -1
  83. package/dist/test/elements/q2-radio-group-test.e2e.js +5 -1
  84. package/dist/test/elements/q2-radio-group-test.e2e.js.map +1 -1
  85. package/dist/test/elements/q2-radio-test.e2e.js +5 -1
  86. package/dist/test/elements/q2-radio-test.e2e.js.map +1 -1
  87. package/dist/test/elements/q2-relative-time-test.e2e.js +8 -4
  88. package/dist/test/elements/q2-relative-time-test.e2e.js.map +1 -1
  89. package/dist/test/elements/q2-section-test.e2e.js +5 -1
  90. package/dist/test/elements/q2-section-test.e2e.js.map +1 -1
  91. package/dist/test/elements/q2-select-test.e2e.js +5 -1
  92. package/dist/test/elements/q2-select-test.e2e.js.map +1 -1
  93. package/dist/test/elements/q2-stepper-pane-test.e2e.js +5 -1
  94. package/dist/test/elements/q2-stepper-pane-test.e2e.js.map +1 -1
  95. package/dist/test/elements/q2-stepper-test.e2e.js +5 -1
  96. package/dist/test/elements/q2-stepper-test.e2e.js.map +1 -1
  97. package/dist/test/elements/q2-stepper-vertical-test.e2e.js +5 -1
  98. package/dist/test/elements/q2-stepper-vertical-test.e2e.js.map +1 -1
  99. package/dist/test/elements/q2-tab-container-test.e2e.js +5 -1
  100. package/dist/test/elements/q2-tab-container-test.e2e.js.map +1 -1
  101. package/dist/test/elements/q2-tab-pane-test.e2e.js +5 -1
  102. package/dist/test/elements/q2-tab-pane-test.e2e.js.map +1 -1
  103. package/dist/test/elements/q2-tag-test.e2e.js +2 -3
  104. package/dist/test/elements/q2-tag-test.e2e.js.map +1 -1
  105. package/dist/test/elements/q2-textarea-test.e2e.js +5 -1
  106. package/dist/test/elements/q2-textarea-test.e2e.js.map +1 -1
  107. package/dist/test/elements/q2-tooltip-test.e2e.js +5 -1
  108. package/dist/test/elements/q2-tooltip-test.e2e.js.map +1 -1
  109. package/dist/test/elements/tecton-tab-pane-test.e2e.js +5 -1
  110. package/dist/test/elements/tecton-tab-pane-test.e2e.js.map +1 -1
  111. package/dist/test/helpers.js +1 -1
  112. package/dist/test/helpers.js.map +1 -1
  113. package/dist/types/workspace/workspace/tecton-production_release_1.45.x/packages/q2-tecton-elements/.stencil/test/helpers.d.ts +1 -1
  114. package/package.json +3 -3
  115. package/dist/q2-tecton-elements/p-4f7e2c8a.entry.js +0 -2
  116. package/dist/q2-tecton-elements/p-4f7e2c8a.entry.js.map +0 -1
  117. package/dist/q2-tecton-elements/p-bf125cdf.entry.js +0 -2
  118. package/dist/q2-tecton-elements/p-bf125cdf.entry.js.map +0 -1
  119. package/dist/q2-tecton-elements/p-f418967b.entry.js +0 -2
  120. package/dist/q2-tecton-elements/p-f418967b.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"q2-input-test.e2e.js","sourceRoot":"","sources":["../../../test/elements/q2-input-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EElement, E2EPage } from '@stencil/core/testing';\nimport {\n evaluateA11y,\n setTestStrings,\n setup,\n dispatchEvent,\n testDeprecatedAriaLabel,\n getActiveElementTestId,\n getNestedAssignedElementLength,\n getNestedElementStyle,\n} from '../helpers';\n\ndescribe('q2-input', () => {\n describe('[A11y] guideline compliance', () => {\n it('Does not have accessibility violations', async () => {\n const page = await setup({ html: `<q2-input label=\"A11y Testing Enabled\" />` });\n const hasViolations = await evaluateA11y(page);\n\n expect(hasViolations).toBe(false);\n });\n });\n\n async function getInnerInputDimensions(page: E2EPage) {\n return page.$eval('body', () =>\n document.querySelector('q2-input').shadowRoot.querySelector('input').getClientRects()[0].toJSON()\n );\n }\n\n it('should be registered in the dom and accept values', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"platform is awesome\" />' });\n const label = await page.find('q2-input >>> label');\n\n expect(label.innerText.trim()).toEqual('platform is awesome');\n });\n\n describe('focus', () => {\n let page: E2EPage;\n let input: E2EElement;\n let fieldContainer: E2EElement;\n\n beforeEach(async () => {\n page = await setup({ html: `<q2-input></q2-input>` });\n input = await page.find('q2-input');\n fieldContainer = await page.find('q2-input >>> .field-container');\n\n expect(await innerActiveTestId(page)).toBeUndefined();\n expect(fieldContainer).not.toHaveClass('has-focus');\n });\n\n const innerActiveTestId = async (page: E2EPage) => {\n return page.$eval('q2-input', el => el.shadowRoot.activeElement?.getAttribute('test-id'));\n };\n\n it('focuses inner button when focus event is dispatched', async function (): Promise<void> {\n await input.triggerEvent('focus');\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('inputField');\n expect(fieldContainer).toHaveClass('has-focus');\n });\n\n it('focuses inner button when element.focus() is called', async function (): Promise<void> {\n await input.focus();\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('inputField');\n expect(fieldContainer).toHaveClass('has-focus');\n });\n\n it('adds has-focus to fieldContainer when input focused', async () => {\n const innerInput = await page.find('q2-input >>> input.input-field');\n await innerInput.focus();\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('inputField');\n expect(fieldContainer).toHaveClass('has-focus');\n });\n\n describe('when pseudo is true', () => {\n beforeEach(async () => {\n await input.setProperty('pseudo', true);\n await page.waitForChanges();\n\n fieldContainer = await page.find('q2-input >>> .field-container');\n expect(fieldContainer).not.toHaveClass('has-focus');\n });\n\n it('focuses inner button when focus event is dispatched', async function (): Promise<void> {\n await input.triggerEvent('focus');\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('q2InputInnerClearButton');\n expect(fieldContainer).toHaveClass('has-focus');\n });\n\n it('focuses inner button when element.focus() is called', async function (): Promise<void> {\n await input.focus();\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('q2InputInnerClearButton');\n expect(fieldContainer).toHaveClass('has-focus');\n });\n\n it('adds has-focus to fieldContainer when button is focused', async () => {\n const innerInput = await page.find('q2-input >>> button.input-field');\n await innerInput.focus();\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('q2InputInnerClearButton');\n expect(fieldContainer).toHaveClass('has-focus');\n });\n });\n });\n\n it('when readonly label text should include (read only) ', async function (): Promise<void> {\n const readonlyText = '(read only)';\n const page: E2EPage = await setup({ html: `<q2-input label=\"label text\"></q2-input>` });\n await setTestStrings(page, {\n 'tecton.element.input.readonly': readonlyText,\n });\n const element = await page.find('q2-input');\n await element.setProperty('readonly', true);\n await page.waitForChanges();\n const label = await page.find('q2-input >>> label');\n expect(label.textContent).toEqual(`label text${readonlyText}`);\n });\n\n it('should show errors when the element has focus if error array is populated', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" />' });\n const input = await page.find('q2-input');\n input.setProperty('errors', ['broke']);\n await page.waitForChanges();\n\n const { messagesHeight, hasErrorClass } = await page.$eval('q2-input', element => {\n return {\n messagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n hasErrorClass: !!element.shadowRoot.querySelector('.has-error'),\n };\n });\n\n // errors are not visible when not in focus\n expect(messagesHeight).toEqual(0);\n\n // error indicator is present\n expect(hasErrorClass).toBe(true);\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'focus');\n\n const { expandedMessagesHeight, messagesText } = await page.$eval('q2-input', element => {\n const messageContainer = element.shadowRoot.querySelector('.messages-container');\n return {\n expandedMessagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n messagesText: (messageContainer as HTMLElement).innerText.trim(),\n };\n });\n\n // errors are displayed when in focus\n expect(expandedMessagesHeight).toBeGreaterThan(0);\n\n // error message is correct\n expect(messagesText).toEqual('broke');\n });\n\n it('should not show messages when strings are present if hideMessages is true', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" hide-messages />' });\n const input = await page.find('q2-input');\n input.setProperty('errors', ['broke']);\n\n await page.waitForChanges();\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'focus');\n\n const { messagesHeight, hasErrorClass } = await page.$eval('q2-input', element => {\n return {\n messagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n hasErrorClass: !!element.shadowRoot.querySelector('.has-error'),\n };\n });\n\n // errors are not displayed WHILE in focus\n expect(messagesHeight).toEqual(0);\n\n // indicator is still shown\n expect(hasErrorClass).toBe(true);\n });\n\n it('should show error message when error icon is clicked', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" />' });\n const input = await page.find('q2-input');\n input.setProperty('errors', ['broke']);\n await page.waitForChanges();\n\n const { messagesHeight, hasErrorClass } = await page.$eval('q2-input', element => {\n return {\n messagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n hasErrorClass: !!element.shadowRoot.querySelector('.has-error'),\n };\n });\n\n // errors are not visible when not in focus\n expect(messagesHeight).toEqual(0);\n\n // error indicator is present\n expect(hasErrorClass).toBe(true);\n\n await dispatchEvent(page, ['q2-input', '[test-id=\"divIconError\"]'], 'click');\n\n const { expandedMessagesHeight, messagesText } = await page.$eval('q2-input', element => {\n const messageContainer = element.shadowRoot.querySelector('.messages-container');\n return {\n expandedMessagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n messagesText: (messageContainer as HTMLElement).innerText.trim(),\n };\n });\n\n // errors are displayed when in focus\n expect(expandedMessagesHeight).toBeGreaterThan(0);\n\n // error message is correct\n expect(messagesText).toEqual('broke');\n });\n\n it('should show error message when error icon is clicked and input is currency type', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input type=\"currency\" label=\"foo\" />' });\n const input = await page.find('q2-input');\n input.setProperty('errors', ['broke']);\n await page.waitForChanges();\n\n const { messagesHeight, hasErrorClass } = await page.$eval('q2-input', element => {\n return {\n messagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n hasErrorClass: !!element.shadowRoot.querySelector('.has-error'),\n };\n });\n\n // errors are not visible when not in focus\n expect(messagesHeight).toEqual(0);\n\n // error indicator is present\n expect(hasErrorClass).toBe(true);\n\n await dispatchEvent(page, ['q2-input', '[test-id=\"divIconError\"]'], 'click');\n\n const { expandedMessagesHeight, messagesText } = await page.$eval('q2-input', element => {\n const messageContainer = element.shadowRoot.querySelector('.messages-container');\n return {\n expandedMessagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n messagesText: (messageContainer as HTMLElement).innerText.trim(),\n };\n });\n\n // errors are displayed when in focus\n expect(expandedMessagesHeight).toBeGreaterThan(0);\n\n // error message is correct\n expect(messagesText).toEqual('broke');\n });\n\n it('does not allow invalid input types', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" type=\"fire\" />' });\n const innerInput = await page.find('q2-input >>> .input-field');\n\n // sets input type to text if invalid type is passed in\n expect(await innerInput.getProperty('type')).toEqual('text');\n });\n\n it('should allow input types to be passed in', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" type=\"tel\" />' });\n const innerInput = await page.find('q2-input >>> .input-field');\n\n // sets input to type tel\n expect(await innerInput.getProperty('type')).toEqual('tel');\n expect(await innerInput.getAttribute('inputmode')).toBeNull();\n });\n\n it('maintains formattedValue on load', async () => {\n const page = await setup({\n html: `<q2-input type='phone' value='1234567890'></q2-input>`,\n });\n const inputField = await page.find('q2-input');\n const formattedVal = await inputField.getProperty('formattedValue');\n await page.waitForChanges();\n expect(formattedVal).toBe('(123) 456-7890');\n });\n\n it('should default to text if no type is passed in', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" />' });\n const innerInput = await page.find('q2-input >>> .input-field');\n\n // defaults input to type text\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toBeNull();\n });\n\n it('should fire input event that proxies inner input event', async function () {\n const page = await setup({ html: '<q2-input label=\"foo\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n\n const inputSpy = await input.spyOnEvent('input');\n\n await innerInput.press('f');\n\n await page.waitForChanges();\n // should receive a formatted input event\n expect(inputSpy).toHaveReceivedEventDetail({\n value: 'f',\n formattedValue: 'f',\n // minFormattedLength: undefined /* This present but filtered out by the test helper */\n });\n });\n\n it('should fire change event that proxies change(blur) input event', async function () {\n const page = await setup({ html: '<q2-input label=\"foo\" value=\"test inpu\"/>' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n\n await innerInput.press('t');\n const changeSpy = await input.spyOnEvent('change');\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'blur');\n\n // should receive formatted change event\n expect(changeSpy).toHaveReceivedEventDetail({\n value: 'test input',\n formattedValue: 'test input',\n });\n expect(changeSpy).toHaveReceivedEventTimes(1);\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'focus');\n await innerInput.press(' ');\n await dispatchEvent(page, ['q2-input', '.input-field'], 'input');\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'keydown', { key: 'Enter' });\n expect(changeSpy).toHaveReceivedEventDetail({\n value: 'test input ',\n formattedValue: 'test input ',\n });\n expect(changeSpy).toHaveReceivedEventTimes(2);\n\n const onInput = (event: CustomEvent) => {\n (event.target as HTMLQ2InputElement).value = event.detail.value;\n };\n input.setProperty('oninput', onInput);\n await page.waitForChanges();\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'focus');\n await innerInput.press(' ');\n expect(changeSpy).toHaveReceivedEventTimes(2);\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'keydown', { key: 'Enter' });\n expect(changeSpy).toHaveReceivedEventDetail({\n value: 'test input ',\n formattedValue: 'test input ',\n });\n expect(changeSpy).toHaveReceivedEventTimes(3);\n });\n\n it('should fire input event after content pasted into field', async function () {\n const page = await setup({ html: '<q2-input label=\"foo\" value=\"test\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n expect(await innerInput.getProperty('value')).toEqual('test');\n\n // fully replaces value on paste if nothing selected\n await dispatchEvent(page, ['q2-input', '.input-field'], 'paste', {\n pastedValue: 'pasted value',\n });\n\n expect(await innerInput.getProperty('value')).toEqual('testpasted value');\n\n await page.waitForChanges();\n expect(inputSpy).toHaveReceivedEventTimes(1);\n expect(inputSpy).toHaveReceivedEventDetail({\n value: 'testpasted value',\n formattedValue: 'testpasted value',\n // minFormattedLength: undefined /* This present but filtered out by the test helper */\n });\n\n // only replaces selected content on paste\n await input.setProperty('value', 'reset');\n\n await page.$eval('q2-input', element => {\n const inputEl = element.shadowRoot.querySelector<HTMLInputElement>('.input-field');\n inputEl.setSelectionRange(5, 7);\n });\n await page.waitForChanges();\n // in practice, the paste event triggers the input event tested above\n // this segment validates that the paste flow follows native browser behavior if an incomplete selection is made\n expect(inputSpy).toHaveReceivedEventTimes(1);\n });\n\n it('should fire input event after content pasted into currency field', async function () {\n const page = await setup({ html: '<q2-input label=\"foo\" value=\"4.44\" type=\"currency\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n expect(await innerInput.getProperty('value')).toEqual('4.44');\n\n // fully replaces value on paste if nothing selected\n await dispatchEvent(page, ['q2-input', '.input-field'], 'paste', {\n pastedValue: '2.3',\n });\n\n expect(await innerInput.getProperty('value')).toEqual('2.30');\n\n await page.waitForChanges();\n expect(inputSpy).toHaveReceivedEventTimes(1);\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '2.30',\n formattedValue: '$2.30',\n // minFormattedLength: undefined /* This present but filtered out by the test helper */\n });\n\n // only replaces selected content on paste\n await input.setProperty('value', 'reset');\n\n await page.$eval('q2-input', element => {\n const inputEl = element.shadowRoot.querySelector<HTMLInputElement>('.input-field');\n inputEl.setSelectionRange(5, 7);\n });\n await page.waitForChanges();\n // in practice, the paste event triggers the input event tested above\n // this segment validates that the paste flow follows native browser behavior if an incomplete selection is made\n expect(inputSpy).toHaveReceivedEventTimes(1);\n });\n\n it('should show hints when hints are present and error array is empty', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\"/>' });\n const input = await page.find('q2-input');\n await input.setProperty('hints', ['try harder']);\n await input.setProperty('errors', []);\n\n await page.waitForChanges();\n\n const messagesContainer = await page.find('q2-input >>> .messages-container');\n\n // hints are shown when errors are empty\n expect(messagesContainer.innerText.trim()).toEqual('try harder');\n\n await input.setProperty('errors', ['you did it wrong']);\n\n await page.waitForChanges();\n\n // errors shown instead of hints when errors are present\n expect(messagesContainer.innerText.trim()).toEqual('you did it wrong');\n });\n\n it('should render a localized optional string when the optional attribute is passed', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" optional />' });\n\n const inputLabel = await page.find('q2-input >>> label');\n\n // a localized optional is shown in the label\n expect(inputLabel.innerText.trim()).toEqual('footecton.element.input.optional');\n });\n\n describe('pseudo', () => {\n let page: E2EPage;\n let innerInput: E2EElement;\n let inputLabel: E2EElement;\n beforeEach(async function () {\n page = await setup({ html: '<q2-input label=\"label text\" value=\"value\" pseudo />' });\n innerInput = await page.find('q2-input >>> .input-field');\n inputLabel = await page.find('q2-input >>> .input-label');\n });\n\n it('should correctly render pseudo state', async function (): Promise<void> {\n // pseudo input should be a button\n expect(innerInput.tagName).toEqual('BUTTON');\n expect(await innerInput.getProperty('type')).toEqual('button');\n expect(inputLabel.innerText).toEqual('label text');\n });\n\n it('should not extend beyond the container when the value is long', async () => {\n const input = await page.find('q2-input');\n await input.setProperty(\n 'value',\n 'This is a very very very very very very very very very very very very very very very very very long value that should be truncated'\n );\n await page.waitForChanges();\n\n const { clientWidth, scrollWidth } = await page.$eval('q2-input', (el: HTMLQ2InputElement) => {\n const { clientWidth, scrollWidth } = el.shadowRoot.querySelector('.input-container');\n return { clientWidth, scrollWidth };\n });\n expect(clientWidth).toEqual(scrollWidth);\n });\n\n it('should fill the the container when the value is short', async () => {\n const input = await page.find('q2-input');\n await input.setProperty('value', 'Short value');\n await page.waitForChanges();\n\n const { clientWidth, scrollWidth } = await page.$eval('q2-input', (el: HTMLQ2InputElement) => {\n const { clientWidth, scrollWidth } = el.shadowRoot.querySelector('.input-container');\n return { clientWidth, scrollWidth };\n });\n expect(clientWidth).toEqual(scrollWidth);\n });\n\n describe('when optional', () => {\n it('should correctly render pseudo state', async function (): Promise<void> {\n await setTestStrings(page, {\n 'tecton.element.input.optional': '(Optional)',\n });\n const element = await page.find('q2-input');\n element.setProperty('optional', true);\n await page.waitForChanges();\n\n expect(inputLabel.innerText).toEqual('label text(Optional)');\n });\n });\n });\n\n it('should localize appropriate attribute strings', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input />' });\n await setTestStrings(page, {\n 'q2-input.label': 'Label Text',\n 'tecton.element.input.optional': '(Optional)',\n 'q2-input.ariaLabel': 'Aria-Label Text',\n 'q2-input.placeholder': 'Placeholder Text',\n 'q2-input.hint1': 'Hint 1 Text',\n 'q2-input.error1': 'Error 1 Text',\n });\n\n const input = await page.find('q2-input');\n\n input.setProperty('label', 'q2-input.label');\n input.setProperty('placeholder', 'q2-input.placeholder');\n input.setProperty('hints', ['q2-input.hint1']);\n\n await page.waitForChanges();\n\n const label = await page.find('q2-input >>> label');\n const labelText = label.innerText;\n const innerInput = await page.find('q2-input >>> .input-field');\n let ariaLabel = innerInput.getAttribute('aria-label');\n\n // label bound correctly\n expect(labelText).toEqual('Label Text');\n expect(ariaLabel).toEqual(null);\n\n input.setProperty('ariaLabel', 'q2-input.ariaLabel');\n\n await page.waitForChanges();\n\n const messageContainer = await page.find('q2-input >>> .messages-container');\n\n ariaLabel = innerInput.getAttribute('aria-label');\n const placeholder = innerInput.getAttribute('placeholder');\n\n // label is updated, hide-label is added, and aria-label is removed\n expect(await input.getProperty('aria-label')).toEqual(undefined);\n expect(await input.getProperty('label')).toEqual('Aria-Label Text');\n expect(await input.getProperty('hideLabel')).toEqual(true);\n\n // expect placeholder to be bound correctly\n expect(placeholder).toEqual('Placeholder Text');\n\n // expect localized hint to be shown since errors are not present\n expect(messageContainer.innerText).toEqual('Hint 1 Text');\n\n input.setProperty('hints', []);\n input.setProperty('errors', ['q2-input.error1']);\n\n await page.waitForChanges();\n\n // expect errors to be localized\n expect(messageContainer.innerText).toEqual('Error 1 Text');\n });\n\n /* Masking */\n\n // Currency\n it('should handle currency masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"currency\" label=\"Amount\" value=\"10\" autocomplete=\"on\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n let inputValue = await innerInput.getProperty('value');\n const inputPrefix = await page.find('q2-input >>> .input-prefix');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n expect(await innerInput.getProperty('autocomplete')).toEqual('transaction-amount');\n expect(inputPrefix).not.toBeNull();\n expect(inputPrefix.innerText).toEqual('$');\n\n // formats value on initial input\n expect(inputValue).toEqual('10.00');\n\n await innerInput.press('3');\n\n // input value gets reformatted correctly and emits value and formattedValue\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '100.03',\n formattedValue: '$100.03',\n });\n\n inputValue = await innerInput.getProperty('value');\n\n // formatted value is set back on inner input\n expect(inputValue).toEqual('100.03');\n\n await innerInput.press('4');\n await innerInput.press('5');\n await innerInput.press('6');\n await innerInput.press('7');\n await innerInput.press('8');\n await innerInput.press('9');\n\n // input value is formatted correctly with thousands\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '100034567.89',\n formattedValue: '$100,034,567.89',\n });\n\n // formatted value is set correctly back on inner input\n inputValue = await innerInput.getProperty('value');\n\n expect(inputValue).toEqual('100,034,567.89');\n\n await innerInput.press('e');\n await innerInput.press('a');\n await innerInput.press('0');\n await innerInput.press('1');\n await innerInput.press('2');\n\n // invalid input is ignored\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '100034567890.12',\n formattedValue: '$100,034,567,890.12',\n });\n\n inputValue = await innerInput.getProperty('value');\n\n // input value is reset to formatted value removing invalid input\n expect(inputValue).toEqual('100,034,567,890.12');\n\n await input.setProperty('value', '50');\n\n await page.waitForChanges();\n\n inputValue = await innerInput.getProperty('value');\n\n // setting value programatically from property allows numeric interpretation\n expect(inputValue).toEqual('50.00');\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'paste', {\n pastedValue: '2.3',\n });\n\n await page.waitForChanges();\n\n inputValue = await innerInput.getProperty('value');\n\n // setting value from paste allows numeric interpretation\n expect(inputValue).toEqual('2.30');\n });\n\n it('should reformat currency on format modifier change', async function () {\n const page = await setup({\n html: '<q2-input type=\"currency\" label=\"Amount\" value=\"10\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n let inputPrefix = await page.find('q2-input >>> .input-prefix');\n\n expect(inputPrefix).not.toBeNull();\n expect(inputPrefix.innerText).toEqual('$');\n\n input.setProperty('formatModifier', 'EUR');\n await page.waitForChanges();\n await innerInput.press('0');\n\n // format modifier property change will update formatting\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '100.00',\n formattedValue: '€100.00',\n });\n\n inputPrefix = await page.find('q2-input >>> .input-prefix');\n\n expect(inputPrefix).not.toBeNull();\n expect(inputPrefix.innerText).toEqual('€');\n });\n\n it('should convert value property to string to prevent non string values from blowing up, especially for currency', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input type=\"currency\" />' });\n const input = await page.find('q2-input');\n\n input.setProperty('value', 50);\n\n await page.waitForChanges();\n\n const innerInput = await page.find('q2-input >>> input');\n const innerInputValue = await innerInput.getProperty('value');\n\n expect(innerInputValue).toEqual('50.00');\n });\n\n it('should remove decimals if \"-integer\" appended to currency code', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"currency\" label=\"Amount\" value=\"10\" format-modifier=\"BHD-integer\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n let inputValue = await innerInput.getProperty('value');\n const inputPrefix = await page.find('q2-input >>> .input-prefix');\n await page.waitForChanges();\n\n expect(inputPrefix.innerText).toEqual('ب.د');\n expect(inputValue).toEqual('10');\n\n await innerInput.press('3');\n\n // input value gets reformatted correctly and emits value and formattedValue\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '103',\n formattedValue: '103ب.د',\n });\n\n inputValue = await innerInput.getProperty('value');\n\n // formatted value is set back on inner input\n expect(inputValue).toEqual('103');\n });\n\n // Phone Number\n it('handles phone number masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"phone\" label=\"Phone Number\" value=\"10\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n const inputPrefix = await page.find('q2-input >>> .input-prefix');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('type')).toEqual('tel');\n expect(await innerInput.getAttribute('inputmode')).toBeNull;\n // Prefix not rendered for US/default\n expect(inputPrefix).toBeNull();\n\n // formats value on initial input\n expect(await innerInput.getProperty('value')).toEqual('(10');\n\n await innerInput.press('3');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '103',\n formattedValue: '(103',\n minFormattedLength: 14,\n });\n\n expect(await innerInput.getProperty('value')).toEqual('(103');\n\n // correct formatting character allowed\n await innerInput.press(')');\n expect(await innerInput.getProperty('value')).toEqual('(103)');\n\n // incorrect formatting character replaced by correct one\n await innerInput.press('-');\n expect(await innerInput.getProperty('value')).toEqual('(103) ');\n\n await innerInput.press('4');\n expect(await innerInput.getProperty('value')).toEqual('(103) 4');\n\n // letter ignored\n await innerInput.press('a');\n expect(await innerInput.getProperty('value')).toEqual('(103) 4');\n\n // invalid characters ignored\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('(103) 4');\n\n await innerInput.press('5');\n expect(await innerInput.getProperty('value')).toEqual('(103) 45');\n\n await innerInput.press('6');\n expect(await innerInput.getProperty('value')).toEqual('(103) 456');\n\n await innerInput.press('7');\n expect(await innerInput.getProperty('value')).toEqual('(103) 456-7');\n\n await innerInput.press('8');\n expect(await innerInput.getProperty('value')).toEqual('(103) 456-78');\n\n await innerInput.press('9');\n expect(await innerInput.getProperty('value')).toEqual('(103) 456-789');\n\n await innerInput.press('0');\n expect(await innerInput.getProperty('value')).toEqual('(103) 456-7890');\n\n // Excess character not added\n await innerInput.press('0');\n expect(await innerInput.getProperty('value')).toEqual('(103) 456-7890');\n\n input.setProperty('value', '1234567890');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('(123) 456-7890');\n\n input.setProperty('value', '(098) 765-4321');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('(098) 765-4321');\n\n input.setProperty('value', '(123) 45678-90');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('(123) 456-7890');\n\n input.setProperty('value', '(1) 234-567890');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('(123) 456-7890');\n });\n\n // Brazil land phone number (xx) xxxx-xxxx\n it('handles brazil mobile phone number masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"phone\" label=\"Phone Number\" format-modifier=\"BR\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n input.setProperty('value', '2233334444');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('(22) 3333-4444');\n });\n\n // Brazil mobile number (xx) xxxxx-xxxx\n it('handles brazil mobile phone number masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"phone\" label=\"Phone Number\" format-modifier=\"BR\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n input.setProperty('value', '22333334444');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('(22) 33333-4444');\n expect(await innerInput.getProperty('value')).not.toEqual('(22) 3333-34444');\n });\n\n // UK land phone number https://en.wikipedia.org/wiki/Telephone_numbers_in_the_United_Kingdom\n it('handles UK mobile phone number masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input label=\"label text\" type=\"phone\" format-modifier=\"US\" value=\"1\" />',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n\n const input = await page.find('q2-input');\n const inputSpy = await input.spyOnEvent('input');\n\n await innerInput.press('0');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '10',\n formattedValue: '(10',\n minFormattedLength: 14,\n });\n\n input.setProperty('value', '10');\n input.setProperty('formatModifier', 'GB');\n await page.waitForChanges();\n\n await innerInput.press('3');\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '103',\n formattedValue: '+44 103',\n minFormattedLength: 13, // 9 + '+44 '\n });\n });\n\n it('handles alternate format modifiers for phone number masking', async function () {\n const page = await setup({\n html: '<q2-input type=\"phone\" label=\"Amount\" value=\"1234567890\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n let inputPrefix = await page.find('q2-input >>> .input-prefix');\n\n // Prefix not rendered for US/default\n expect(inputPrefix).toBeNull();\n expect(await innerInput.getProperty('value')).toEqual('(123) 456-7890');\n\n input.setProperty('formatModifier', 'MX');\n await page.waitForChanges();\n\n inputPrefix = await page.find('q2-input >>> .input-prefix');\n expect(inputPrefix).not.toBeNull();\n expect(inputPrefix.innerText).toEqual('+52');\n expect(await innerInput.getProperty('value')).toEqual('(123) 456-7890');\n\n input.setProperty('formatModifier', 'MT');\n input.setProperty('value', '12345678');\n await page.waitForChanges();\n\n inputPrefix = await page.find('q2-input >>> .input-prefix');\n expect(inputPrefix.innerText).toEqual('+356');\n expect(await innerInput.getProperty('value')).toEqual('12-34-56-78');\n });\n\n it('should incorporate phone prefix characters into minFormattedLength', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input label=\"label text\" type=\"phone\" format-modifier=\"US\" value=\"1\" />',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n\n const input = await page.find('q2-input');\n const inputSpy = await input.spyOnEvent('input');\n\n await innerInput.press('0');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '10',\n formattedValue: '(10',\n minFormattedLength: 14,\n });\n\n input.setProperty('value', '10');\n input.setProperty('formatModifier', 'MX');\n await page.waitForChanges();\n\n await innerInput.press('3');\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '103',\n formattedValue: '+52 (103',\n minFormattedLength: 18, // 14 + '+52 '\n });\n });\n\n // SSN\n it('handles ssn masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"ssn\" label=\"SSN\" value=\"123456789\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n // formats value on initial input\n expect(await innerInput.getProperty('value')).toEqual('123-45-6789');\n\n input.setProperty('value', '123');\n await page.waitForChanges();\n await innerInput.press('4');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '1234',\n formattedValue: '123-4',\n minFormattedLength: 11,\n });\n\n expect(await innerInput.getProperty('value')).toEqual('123-4');\n\n await innerInput.press('5');\n expect(await innerInput.getProperty('value')).toEqual('123-45');\n\n // correct formatting character allowed\n await innerInput.press('-');\n expect(await innerInput.getProperty('value')).toEqual('123-45-');\n\n // letter ignored\n await innerInput.press('a');\n expect(await innerInput.getProperty('value')).toEqual('123-45-');\n\n // invalid characters ignored\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('123-45-');\n\n await innerInput.press('6');\n expect(await innerInput.getProperty('value')).toEqual('123-45-6');\n\n await innerInput.press('7');\n expect(await innerInput.getProperty('value')).toEqual('123-45-67');\n\n await innerInput.press('8');\n expect(await innerInput.getProperty('value')).toEqual('123-45-678');\n\n await innerInput.press('9');\n expect(await innerInput.getProperty('value')).toEqual('123-45-6789');\n\n // Excess character not added\n await innerInput.press('0');\n expect(await innerInput.getProperty('value')).toEqual('123-45-6789');\n\n input.setProperty('value', '987654321');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('987-65-4321');\n\n input.setProperty('value', '123-45-6789');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('123-45-6789');\n\n input.setProperty('value', '1-2345678-9');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('123-45-6789');\n\n input.setProperty('value', '123-4-5678-9');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('123-45-6789');\n });\n\n // TIN\n it('handles tin masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"tin\" label=\"Tax Identification Number\" value=\"123456789\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n // formats value on initial input\n expect(await innerInput.getProperty('value')).toEqual('12-3456789');\n\n input.setProperty('value', '12');\n await page.waitForChanges();\n await innerInput.press('3');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '123',\n formattedValue: '12-3',\n minFormattedLength: 10,\n });\n\n expect(await innerInput.getProperty('value')).toEqual('12-3');\n // ignore non numeric\n await innerInput.press('@');\n expect(await innerInput.getProperty('value')).toEqual('12-3');\n await innerInput.press('4');\n await innerInput.press('5');\n await innerInput.press('6');\n await innerInput.press('7');\n await innerInput.press('8');\n await innerInput.press('9');\n expect(await innerInput.getProperty('value')).toEqual('12-3456789');\n });\n\n // Alphanumeric\n it('handles alphanumeric masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"alphanumeric\" label=\"Alphanumeric\" value=\"\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n\n await innerInput.press('1');\n\n // Allows numbers\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '1',\n formattedValue: '1',\n });\n\n expect(await innerInput.getProperty('value')).toEqual('1');\n\n // Allows lowercase letters\n await innerInput.press('a');\n expect(await innerInput.getProperty('value')).toEqual('1a');\n\n // Allows uppercase letters\n await innerInput.press('A');\n expect(await innerInput.getProperty('value')).toEqual('1aA');\n\n // invalid characters ignored\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('1aA');\n });\n\n // Alpha\n it('handles alpha masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"alpha\" label=\"Alpha\" value=\"\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n\n await innerInput.press('a');\n\n // Allows lowercase letters\n expect(inputSpy).toHaveReceivedEventDetail({\n value: 'a',\n formattedValue: 'a',\n });\n expect(await innerInput.getProperty('value')).toEqual('a');\n\n // Allows uppercase letters\n await innerInput.press('A');\n expect(await innerInput.getProperty('value')).toEqual('aA');\n\n // invalid characters ignored\n await innerInput.press('1');\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('aA');\n });\n\n // Numeric\n it('handles numeric masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"numeric\" label=\"Numeric\" value=\"\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('decimal');\n\n await innerInput.press('-');\n\n // Allows hyphen for negative\n expect(await innerInput.getProperty('value')).toEqual('-');\n\n // Allows numbers\n await innerInput.press('1');\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '-1',\n formattedValue: '-1',\n });\n expect(await innerInput.getProperty('value')).toEqual('-1');\n\n // Allows period\n await innerInput.press('.');\n expect(await innerInput.getProperty('value')).toEqual('-1.');\n\n // Allows comma and invalid value.\n await innerInput.press(',');\n expect(await innerInput.getProperty('value')).toEqual('-1.,');\n\n // invalid characters ignored\n await innerInput.press('a');\n await innerInput.press('A');\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('-1.,');\n });\n\n it('handles alternate format modifiers for numeric masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"numeric\" label=\"Numeric\" value=\"\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n input.setProperty('formatModifier', 'delimited');\n await page.waitForChanges();\n await innerInput.press('-');\n\n // Allows hyphen for negative\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '-',\n formattedValue: '-',\n });\n expect(await innerInput.getProperty('value')).toEqual('-');\n\n // Allows numbers\n await innerInput.press('1');\n expect(await innerInput.getProperty('value')).toEqual('-1');\n\n await innerInput.press('2');\n expect(await innerInput.getProperty('value')).toEqual('-12');\n\n await innerInput.press('3');\n expect(await innerInput.getProperty('value')).toEqual('-123');\n\n await innerInput.press('4');\n expect(await innerInput.getProperty('value')).toEqual('-1,234');\n\n await innerInput.press('5');\n await innerInput.press('6');\n await innerInput.press('7');\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567');\n\n // invalid characters ignored\n await innerInput.press('.');\n await innerInput.press(',');\n await innerInput.press('a');\n await innerInput.press('A');\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567');\n\n input.setProperty('formatModifier', 'integer');\n input.setProperty('value', '-1,234,567');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('-1234567');\n\n input.setProperty('formatModifier', '1dec');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567.0');\n\n input.setProperty('formatModifier', '4dec');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567.0000');\n });\n\n // Percentage\n it('handles percentage masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"percentage\" label=\"Percentage\" value=\"\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n const inputPrefix = await page.find('q2-input >>> .input-prefix');\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('decimal');\n expect(inputPrefix).not.toBeNull();\n expect(inputPrefix.innerText).toEqual('%');\n\n await innerInput.press('-');\n // Allows hyphen for negative\n expect(await innerInput.getProperty('value')).toEqual('-');\n\n // Allows numbers\n await innerInput.press('1');\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '-1',\n formattedValue: '-1%',\n });\n expect(await innerInput.getProperty('value')).toEqual('-1');\n\n // Allows period\n await innerInput.press('.');\n expect(await innerInput.getProperty('value')).toEqual('-1.');\n\n // Allows comma and invalid value.\n await innerInput.press(',');\n expect(await innerInput.getProperty('value')).toEqual('-1.,');\n\n // invalid characters ignored\n await innerInput.press('a');\n await innerInput.press('A');\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('-1.,');\n });\n\n it('handles alternate format modifiers for percentage masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"percentage\" label=\"Percentage\" value=\"\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n const inputPrefix = await page.find('q2-input >>> .input-prefix');\n\n expect(inputPrefix).not.toBeNull();\n expect(inputPrefix.innerText).toEqual('%');\n\n input.setProperty('formatModifier', 'delimited');\n await page.waitForChanges();\n await innerInput.press('-');\n\n // Allows hyphen for negative\n expect(await innerInput.getProperty('value')).toEqual('-');\n\n // Allows numbers\n await innerInput.press('1');\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '-1',\n formattedValue: '-1%',\n });\n expect(await innerInput.getProperty('value')).toEqual('-1');\n\n await innerInput.press('2');\n expect(await innerInput.getProperty('value')).toEqual('-12');\n\n await innerInput.press('3');\n expect(await innerInput.getProperty('value')).toEqual('-123');\n\n await innerInput.press('4');\n expect(await innerInput.getProperty('value')).toEqual('-1,234');\n\n await innerInput.press('5');\n await innerInput.press('6');\n await innerInput.press('7');\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567');\n\n // invalid characters ignored\n await innerInput.press('.');\n await innerInput.press(',');\n await innerInput.press('a');\n await innerInput.press('A');\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567');\n\n input.setProperty('formatModifier', 'integer');\n input.setProperty('value', '-1,234,567');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('-1234567');\n\n input.setProperty('formatModifier', '1dec');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567.0');\n\n input.setProperty('formatModifier', '4dec');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567.0000');\n });\n\n // Postal\n it('handles postal code masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"postal\" label=\"Postal Code\" value=\"12345\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n // formats value on initial input\n expect(await innerInput.getProperty('value')).toEqual('12345');\n\n input.setProperty('value', '123');\n await page.waitForChanges();\n await innerInput.press('4');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '1234',\n formattedValue: '1234',\n minFormattedLength: 5,\n });\n\n expect(await innerInput.getProperty('value')).toEqual('1234');\n\n // letter ignored\n await innerInput.press('a');\n expect(await innerInput.getProperty('value')).toEqual('1234');\n\n // invalid characters ignored\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('1234');\n\n await innerInput.press('5');\n expect(await innerInput.getProperty('value')).toEqual('12345');\n\n input.setProperty('value', '12345sdfg');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('12345');\n });\n\n it('handles alternate format modifiers for postal code masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"postal\" label=\"Postal Code\" value=\"12345\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n\n // formats value on initial input\n expect(await innerInput.getProperty('value')).toEqual('12345');\n\n input.setProperty('formatModifier', 'US+4');\n await page.waitForChanges();\n\n await innerInput.press('6');\n await innerInput.press('7');\n await innerInput.press('8');\n await innerInput.press('9');\n\n expect(await innerInput.getProperty('value')).toEqual('12345-6789');\n });\n\n // Date\n it('handles date masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"date\" label=\"Date\" value=\"10102019\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n // formats value on initial input\n expect(await innerInput.getProperty('value')).toEqual('10/10/2019');\n\n input.setProperty('value', '1234');\n await page.waitForChanges();\n await innerInput.press('5');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '12/34/5',\n formattedValue: '12/34/5',\n minFormattedLength: 10,\n });\n\n expect(await innerInput.getProperty('value')).toEqual('12/34/5');\n\n // letter ignored\n await innerInput.press('a');\n expect(await innerInput.getProperty('value')).toEqual('12/34/5');\n\n // invalid characters ignored\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('12/34/5');\n\n await innerInput.press('6');\n await innerInput.press('7');\n await innerInput.press('8');\n expect(await innerInput.getProperty('value')).toEqual('12/34/5678');\n\n await innerInput.press('8');\n expect(await innerInput.getProperty('value')).toEqual('12/34/5678');\n });\n\n it('handles alternate format modifiers for date masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"date\" label=\"Date\" value=\"10102019\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('10/10/2019');\n\n input.setProperty('formatModifier', 'M-D-YYYY');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('10-10-2019');\n\n input.setProperty('value', '');\n await page.waitForChanges();\n\n await innerInput.press('1');\n expect(await innerInput.getProperty('value')).toEqual('1');\n\n // incorrect formatting char ignored\n await innerInput.press('/');\n expect(await innerInput.getProperty('value')).toEqual('1');\n\n // correct formatting char accepted\n await innerInput.press('-');\n expect(await innerInput.getProperty('value')).toEqual('1-');\n\n await innerInput.press('1');\n await innerInput.press('0');\n await innerInput.press('2');\n await innerInput.press('0');\n await innerInput.press('1');\n await innerInput.press('9');\n expect(await innerInput.getProperty('value')).toEqual('1-10-2019');\n });\n\n it('should only allow permitted, nonformatting characters up to maxlength', async () => {\n const page = await setup({\n html: '<q2-input type=\"date\" maxlength=\"3\" label=\"Date\"></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n\n await innerInput.press('1');\n await innerInput.press('0');\n await innerInput.press('2');\n expect(await innerInput.getProperty('value')).toEqual('10/2');\n\n await innerInput.press('2');\n expect(await innerInput.getProperty('value')).toEqual('10/2');\n await page.waitForChanges();\n\n // correct formatting char accepted\n await innerInput.press('Backspace');\n expect(await innerInput.getProperty('value')).toEqual('10/');\n\n await innerInput.press('/');\n await innerInput.press('1');\n expect(await innerInput.getProperty('value')).toEqual('10/1');\n });\n\n it('should allow inserting permitted characters up to maxlength when our input provides a placeholder', async () => {\n const page = await setup({\n html: '<q2-input type=\"currency\" maxlength=\"2\" label=\"Amount\"></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n\n await innerInput.press('1');\n await innerInput.press('0');\n await innerInput.press('2');\n expect(await innerInput.getProperty('value')).toEqual('0.10');\n });\n\n it('should allow pasting text up to the character limit and truncate whatever is left over', async function () {\n const page = await setup({\n html: '<q2-input type=\"text\" maxlength=10 label=\"text-test\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n\n const pasteValue = '01234567890123456789';\n const expectedValue = '0123456789';\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'paste', {\n pastedValue: pasteValue,\n });\n expect(await innerInput.getProperty('value')).toEqual(expectedValue);\n });\n\n describe('cursor', () => {\n it('does not move the cursor in reverse when maxlength is set', async () => {\n const maxlength = 4;\n const page = await setup({\n html: '<q2-input maxlength=\"' + maxlength.toString() + '\" ></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n\n // max length is 4, so we should be able to enter 4 characters\n for (let i = 0; i < maxlength; i++) {\n await innerInput.press('a');\n }\n\n // move the cursor to the middle of the string\n await innerInput.press('ArrowLeft');\n await innerInput.press('ArrowLeft');\n\n // add characters to the middle of the string\n await innerInput.press('f');\n await innerInput.press('o');\n\n expect(await innerInput.getProperty('value')).toEqual('aafo');\n });\n\n it('does not move the cursor position when first character is deleted', async () => {\n const page = await setup({\n html: '<q2-input type=\"text\" value=\"abcde 12345\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n const currentPosition = await innerInput.getProperty('selectionStart');\n for (let i = 0; i < currentPosition - 1; i++) {\n await innerInput.press('ArrowLeft');\n }\n await innerInput.press('Backspace');\n await page.waitForChanges();\n const newPosition = await innerInput.getProperty('selectionStart');\n expect(newPosition).toEqual(0);\n });\n\n it('sets the cursor to where the user clicks to focus', async () => {\n const page = await setup({\n html: '<q2-input type=\"text\" value=\"Tony Stark\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n const valueLength = (await innerInput.getProperty('value')).length;\n const dimensions = await getInnerInputDimensions(page);\n\n // Simulate clicking a character in the middle of the input\n await page.mouse.click(dimensions.left + 50, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toBeLessThan(valueLength);\n });\n\n it('sets the cursor to where the user clicks if the input is already focused', async () => {\n const page = await setup({\n html: '<q2-input type=\"text\" value=\"Tony Stark\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n const valueLength = (await innerInput.getProperty('value')).length;\n const dimensions = await getInnerInputDimensions(page);\n\n await innerInput.focus();\n await page.waitForChanges();\n\n // Simulate clicking a character in the middle of the input\n await page.mouse.click(dimensions.left + 50, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toBeLessThan(valueLength);\n });\n\n describe(\"when type is 'currency'\", () => {\n it('does not move the cursor to the end when first character is deleted', async () => {\n const page = await setup({\n html: '<q2-input type=\"currency\" value=\"123\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n const currentPosition = await innerInput.getProperty('selectionStart');\n // For loop pushes cursor to left end position of input.value\n for (let i = 0; i < currentPosition - 1; i++) {\n await innerInput.press('ArrowLeft');\n }\n await innerInput.press('Backspace');\n await page.waitForChanges();\n const newPosition = await innerInput.getProperty('selectionStart');\n // 0 represents that cursor stays at far left (beginning position of input.value)\n expect(newPosition).toEqual(0);\n });\n\n it('moves the cursor to the left and right when pressing the arrow keys', async () => {\n const page = await setup({\n html: '<q2-input type=\"currency\" value=\"185940958\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n let value = await innerInput.getProperty('value');\n\n // move the cursor to the middle of the string\n const pressTimes = 4;\n for (let i = 0; i < pressTimes; i++) await innerInput.press('ArrowLeft');\n expect(await innerInput.getProperty('selectionStart')).toEqual(value.length - pressTimes);\n\n // add characters to the middle of the string\n await innerInput.press('3');\n await innerInput.press('3');\n\n expect(await innerInput.getProperty('value')).toEqual('18,594,095,338.00');\n\n // move the cursor back to the end of the string\n for (let i = 0; i < pressTimes; i++) await innerInput.press('ArrowRight');\n value = await innerInput.getProperty('value');\n expect(await innerInput.getProperty('selectionStart')).toEqual(value.length);\n });\n\n it('sets the cursor to the end regardless of where the user clicks to focus', async () => {\n const page = await setup({\n html: '<q2-input type=\"currency\" value=\"185940958\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n const valueLength = (await innerInput.getProperty('value')).length;\n const dimensions = await getInnerInputDimensions(page);\n\n // Simulate clicking a character in the middle of the input\n await page.mouse.click(dimensions.right - 50, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toEqual(valueLength);\n });\n\n it('sets the cursor to where the user clicks if the input is already focused', async () => {\n const page = await setup({\n html: '<q2-input type=\"currency\" value=\"185940958\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n const valueLength = (await innerInput.getProperty('value')).length;\n const dimensions = await getInnerInputDimensions(page);\n\n await innerInput.focus();\n await page.waitForChanges();\n\n // Simulate clicking a character in the middle of the input\n await page.mouse.click(dimensions.right - 50, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toBeLessThan(valueLength);\n });\n });\n\n describe('when on mobile', () => {\n let page: E2EPage;\n let innerInput: E2EElement;\n let inputValueLength: number;\n beforeEach(async () => {\n page = await setup({ html: '' });\n page.setUserAgent(\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'\n );\n await page.setContent('<q2-input type=\"text\" value=\"Tony Stark\"></q2input>');\n await page.waitForChanges();\n innerInput = await page.find('q2-input >>> .input-field');\n inputValueLength = (await innerInput.getProperty('value')).length;\n const dimensions = await getInnerInputDimensions(page);\n await page.touchscreen.tap(dimensions.left + 50, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toEqual(7);\n });\n\n it('moves the cursor when ArrowLeft is pressed', async () => {\n const pressTimes = 4;\n for (let i = 0; i < pressTimes; i++) await innerInput.press('ArrowLeft');\n expect(await innerInput.getProperty('selectionStart')).toEqual(3);\n });\n\n it('moves the cursor when ArrowRight is pressed', async () => {\n await innerInput.press('ArrowRight');\n expect(await innerInput.getProperty('selectionStart')).toEqual(8);\n });\n\n it('moves the cursor to the beginning when ArrowUp is pressed', async () => {\n await innerInput.press('ArrowUp');\n expect(await innerInput.getProperty('selectionStart')).toEqual(0);\n });\n\n it('moves the cursor to the end when ArrowDown is pressed', async () => {\n await innerInput.press('ArrowDown');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('moves the cursor to the end when End is pressed', async () => {\n await innerInput.press('End');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('moves the cursor to the beginning when Home is pressed', async () => {\n await innerInput.press('Home');\n expect(await innerInput.getProperty('selectionStart')).toEqual(0);\n });\n\n describe(\"when type is 'currency'\", () => {\n beforeEach(async () => {\n const input = await page.find('q2-input');\n await input.setProperty('type', 'currency');\n await input.setProperty('value', '1234567890');\n await page.waitForChanges();\n innerInput = await page.find('q2-input >>> .input-field');\n inputValueLength = (await innerInput.getProperty('value')).length;\n await innerInput.focus();\n const dimensions = await getInnerInputDimensions(page);\n await page.touchscreen.tap(dimensions.left - 50, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('does not move the cursor when ArrowLeft is pressed', async () => {\n const pressTimes = 4;\n for (let i = 0; i < pressTimes; i++) await innerInput.press('ArrowLeft');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('does not move the cursor when ArrowRight is pressed', async () => {\n await innerInput.press('ArrowRight');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('does not move the cursor when ArrowUp is pressed', async () => {\n await innerInput.press('ArrowUp');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('does not move the cursor when ArrowDown is pressed', async () => {\n await innerInput.press('ArrowDown');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('does not move the cursor when End is pressed', async () => {\n await innerInput.press('End');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('does not move the cursor when Home is pressed', async () => {\n await innerInput.press('Home');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('sets the cursor at the end regardless of where the user clicks', async () => {\n const dimensions = await getInnerInputDimensions(page);\n\n // Simulate clicking a character in the middle of the input\n await page.touchscreen.tap(dimensions.left - 100, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n });\n });\n });\n\n it('does not allow invalid autocomplete types', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input autocomplete />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n\n // sets input autocomplete to nothing to make sure 'off' is returned\n expect(await innerInput.getProperty('autocomplete')).toEqual('off');\n\n input.setProperty('autocomplete', '');\n await page.waitForChanges();\n\n // sets input autocomplete to empty string to make sure 'off' is returned\n expect(await innerInput.getProperty('autocomplete')).toEqual('off');\n });\n\n it('allows autocomplete types', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input autocomplete=\"name\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n\n // sets input autocomplete to null to make sure 'off' is returned\n expect(await innerInput.getProperty('autocomplete')).toEqual('name');\n\n input.setProperty('autocomplete', 'on');\n await page.waitForChanges();\n\n // sets input autocomplete to null to make sure 'off' is returned\n expect(await innerInput.getProperty('autocomplete')).toEqual('on');\n });\n\n it('should show toggle button when visibility toggle is enabled', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input show-visibility-toggle />' });\n const toggleButton = await page.find('q2-input >>> [test-id=\"toggleVisibilityButton\"]');\n expect(toggleButton).not.toBeNull();\n });\n\n it('should not show toggle button when visibility toggle is not enabled', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input />' });\n const toggleButton = await page.find('q2-input >>> [test-id=\"toggleVisibilityButton\"]');\n expect(toggleButton).toBeNull();\n });\n\n it('should not show toggle button even if visibility toggle is enabled but the type is not text/password', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input show-visibility-toggle type=\"number\" />' });\n const toggleButton = await page.find('q2-input >>> [test-id=\"toggleVisibilityButton\"]');\n expect(toggleButton).toBeNull();\n });\n\n it('should switch inner input type to \"password\" when visibility toggle is clicked for type=text', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input type=\"text\" show-visibility-toggle />' });\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n const innerInput = await page.find('q2-input >>> .input-field');\n expect(await innerInput.getProperty('type')).toEqual('password');\n\n // clicking again should change it back to \"text\"\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n expect(await innerInput.getProperty('type')).toEqual('text');\n });\n\n it('should switch inner input type to \"text\" when visibility toggle is clicked for type=password', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input type=\"password\" show-visibility-toggle />' });\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n const innerInput = await page.find('q2-input >>> .input-field');\n expect(await innerInput.getProperty('type')).toEqual('text');\n\n // clicking again should change it back to \"password\"\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n expect(await innerInput.getProperty('type')).toEqual('password');\n });\n\n it('should move focus to q2-input when visibility toggle is clicked for type=password', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input type=\"password\" show-visibility-toggle />' });\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputFocusSpy = await innerInput.spyOnEvent('focus');\n expect(await innerInput.getProperty('type')).toEqual('password');\n expect(inputFocusSpy).toHaveReceivedEventTimes(0);\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(inputFocusSpy).toHaveReceivedEventTimes(1);\n });\n\n it('should switch inner input type to \"password\" when visibility toggle is clicked for type=ssn', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input type=\"ssn\" show-visibility-toggle />' });\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n const innerInput = await page.find('q2-input >>> .input-field');\n expect(await innerInput.getProperty('type')).toEqual('password');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n\n // clicking again should change it back to \"tel\"\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n });\n\n it('should match the input entered when the user types quickly', async () => {\n const page = await setup({ html: '<q2-input type=\"currency\" />' });\n\n const innerInput = await page.find('q2-input >>> [test-id=\"inputField\"]');\n await innerInput.type('12233445678', { delay: 5 });\n const innerInputValue = await innerInput.getProperty('value');\n\n expect(innerInputValue).toEqual('122,334,456.78');\n });\n\n // Number\n it('handles number type', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"number\" label=\"Number\" value=\"1\" ></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n expect(await innerInput.getProperty('type')).toEqual('number');\n await innerInput.press('ArrowUp');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('2');\n });\n\n it('handles number type with valid positive decimal number', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"number\" label=\"Number\" ></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n expect(await innerInput.getProperty('type')).toEqual('number');\n await innerInput.press('1');\n await innerInput.press('.');\n await innerInput.press('2');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('1.2');\n });\n\n it('handles number type with incomplete positive decimal number (ends with period)', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"number\" label=\"Number\" ></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n expect(await innerInput.getProperty('type')).toEqual('number');\n await innerInput.press('1');\n await innerInput.press('.');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('1');\n });\n\n it('handles number type with negative decimal number', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"number\" label=\"Number\" ></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n expect(await innerInput.getProperty('type')).toEqual('number');\n await innerInput.type('-1.2');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('-1.2');\n });\n\n it('handles number type with step', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"number\" label=\"Number\" value=\"10\" step=\"5\" ></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n expect(await innerInput.getProperty('type')).toEqual('number');\n await innerInput.press('ArrowUp');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('15');\n\n await innerInput.press('ArrowDown');\n await innerInput.press('ArrowDown');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('5');\n });\n\n describe('Events', () => {\n let page: E2EPage;\n let innerInput: E2EElement;\n let input: E2EElement;\n beforeEach(async () => {\n page = await setup({ html: '<q2-input/>' });\n input = await page.find('q2-input');\n innerInput = await page.find('q2-input >>> .input-field');\n });\n\n describe('Standard events', () => {\n it('events all necessary events when printable keys are pressed', async () => {\n const keydownSpy = await input.spyOnEvent('keydown');\n const inputSpy = await input.spyOnEvent('input');\n const keyupSpy = await input.spyOnEvent('keyup');\n\n await innerInput.press('a');\n await page.waitForChanges();\n\n expect(keydownSpy).toHaveReceivedEventTimes(1);\n expect(keydownSpy).toHaveReceivedEventDetail(0);\n expect(inputSpy).toHaveReceivedEventTimes(1);\n expect(inputSpy).toHaveReceivedEventDetail({ value: 'a', formattedValue: 'a' });\n expect(keyupSpy).toHaveReceivedEventTimes(1);\n expect(keyupSpy).toHaveReceivedEventDetail(0);\n });\n\n it('events all necessary events when non-printable keys are pressed', async () => {\n const keydownSpy = await input.spyOnEvent('keydown');\n const inputSpy = await input.spyOnEvent('input');\n const keyupSpy = await input.spyOnEvent('keyup');\n\n await innerInput.press('Home');\n await page.waitForChanges();\n\n expect(keydownSpy).toHaveReceivedEventTimes(1);\n expect(keydownSpy).toHaveReceivedEventDetail(0);\n expect(inputSpy).toHaveReceivedEventTimes(0);\n expect(keyupSpy).toHaveReceivedEventTimes(1);\n expect(keyupSpy).toHaveReceivedEventDetail(0);\n });\n });\n });\n\n describe('Props', () => {\n describe('ariaExpanded', () => {\n it('uses \"true\" as value when provided', async () => {\n const page = await setup({\n html: `<q2-input aria-expanded=\"true\" value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-expanded', 'true');\n });\n\n it('uses \"false\" as value when provided', async () => {\n const page = await setup({\n html: `<q2-input aria-expanded=\"false\" value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-expanded', 'false');\n });\n\n it('is not added when it is not provided', async () => {\n const page = await setup({\n html: `<q2-input value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).not.toHaveAttribute('aria-expanded');\n });\n\n it('no value unless explicitly set', async () => {\n const page = await setup({\n html: `<q2-input aria-expanded value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-expanded', '');\n });\n });\n describe('ariaHasPopup', () => {\n it('uses \"true\" as value when provided', async () => {\n const page = await setup({\n html: `<q2-input aria-haspopup=\"true\" value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-haspopup', 'true');\n });\n\n it('uses \"false\" as value when provided', async () => {\n const page = await setup({\n html: `<q2-input aria-haspopup=\"false\" value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-haspopup', 'false');\n });\n\n it('is not added when it is not provided', async () => {\n const page = await setup({\n html: `<q2-input value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).not.toHaveAttribute('aria-haspopup');\n });\n\n it('translates to empty string if not passed a value', async () => {\n const page = await setup({\n html: `<q2-input aria-haspopup value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-haspopup', '');\n });\n\n const hasPopupValues = ['true', 'false', 'menu', 'listbox', 'tree', 'grid', 'dialog'];\n hasPopupValues.forEach(async value => {\n it(`sets aria-haspopup to \"${value}\" when passed value \"${value}\"`, async () => {\n const page = await setup({\n html: `<q2-input aria-haspopup='${value}' value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-haspopup', value);\n });\n });\n\n it('sets aria-haspopup to `null` when not provided a valid string', async () => {\n const page = await setup({\n html: `<q2-input aria-haspopup='foo' value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-haspopup', null);\n });\n });\n describe('clearable', () => {\n describe('when false (default)', () => {\n it('does not display the clear icon when not provided (default)', async () => {\n const page = await setup({ html: '<q2-input value=\"Tony\"/>' });\n const clearButton = await page.find('q2-input >>> [test-id=\"clearButton\"]');\n expect(clearButton).toBeFalsy();\n });\n\n it('starts observing width when added at runtime', async () => {\n const page = await setup({ html: '<q2-input value=\"Tony\" />' });\n await page.evaluate(() => {\n document.body.style.margin = '0';\n });\n await page.waitForChanges();\n\n const input = await page.find('q2-input');\n await input.setProperty('clearable', true);\n await page.waitForChanges();\n\n let clearButtonWidth = await getNestedElementStyle(\n page,\n ['q2-input', '[test-id=\"clearButton\"]'],\n 'width'\n );\n expect(clearButtonWidth).toBe('44px');\n\n await page.setViewport({ width: 189, height: 400 });\n await page.waitForChanges();\n\n clearButtonWidth = await getNestedElementStyle(\n page,\n ['q2-input', '[test-id=\"clearButton\"]'],\n 'width'\n );\n expect(clearButtonWidth).toBe('20px');\n });\n });\n\n describe('when true', () => {\n it('displays the clear button when there is a value', async () => {\n const page = await setup({ html: '<q2-input value=\"Tony\" clearable/>' });\n const clearButton = await page.find('q2-input >>> [test-id=\"clearButton\"]');\n expect(clearButton).toBeTruthy();\n });\n\n it('clears the value and emits events when the clear button is clicked', async () => {\n const page = await setup({ html: '<q2-input value=\"Tony\" clearable/>' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> input');\n const clearButton = await page.find('q2-input >>> [test-id=\"clearButton\"]');\n\n const inputSpy = await input.spyOnEvent('input');\n const changeSpy = await input.spyOnEvent('change');\n const clearSpy = await input.spyOnEvent('clear');\n\n expect(await innerInput.getProperty('value')).toEqual('Tony');\n expect(inputSpy).toHaveReceivedEventTimes(0);\n expect(changeSpy).toHaveReceivedEventTimes(0);\n expect(clearSpy).toHaveReceivedEventTimes(0);\n\n await clearButton.click();\n await page.waitForChanges();\n\n const eventDetail = { value: '', formattedValue: '' };\n expect(await innerInput.getProperty('value')).toEqual('');\n expect(inputSpy).toHaveReceivedEventDetail(eventDetail);\n expect(changeSpy).toHaveReceivedEventDetail(eventDetail);\n expect(clearSpy).toHaveReceivedEventTimes(1);\n });\n\n it('clear button is 44px when component is more than 190px wide', async () => {\n const page = await setup({ html: '<q2-input value=\"Tony\" clearable/>' });\n await page.setViewport({ width: 193, height: 400 });\n await page.evaluate(() => {\n document.body.style.margin = '0';\n });\n await page.waitForChanges();\n\n const clearButtonWidth = await getNestedElementStyle(\n page,\n ['q2-input', '[test-id=\"clearButton\"]'],\n 'width'\n );\n expect(clearButtonWidth).toBe('44px');\n });\n\n it('clear button is 20px when component is less than 190px wide', async () => {\n const page = await setup({ html: '<q2-input value=\"Tony\" clearable/>' });\n await page.setViewport({ width: 189, height: 400 });\n await page.evaluate(() => {\n document.body.style.margin = '0';\n });\n await page.waitForChanges();\n\n const clearButtonWidth = await getNestedElementStyle(\n page,\n ['q2-input', '[test-id=\"clearButton\"]'],\n 'width'\n );\n expect(clearButtonWidth).toBe('20px');\n });\n });\n });\n describe('autofocus', () => {\n describe('when autofocus is enabled', () => {\n it('focuses on input element on page load', async () => {\n const page = await setup({\n html: `<q2-input autofocus></q2-input>`,\n });\n\n const q2Input = await page.find('q2-input >>> input');\n expect(q2Input).toHaveAttribute('autofocus');\n expect(await getActiveElementTestId(page)).toBe('inputField');\n });\n });\n\n describe('when autofocus is disabled', () => {\n it('does not focus on input element on page load', async () => {\n const page = await setup({\n html: `<q2-input></q2-input>`,\n });\n\n const q2Input = await page.find('q2-input >>> input');\n expect(q2Input).not.toHaveAttribute('autofocus');\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n });\n\n describe('badgeValue', () => {\n describe('when not provided', () => {\n it('does not add the badge element', async () => {\n const page = await setup({ html: '<q2-input />' });\n const badge = await page.find('q2-input >>> q2-badge');\n expect(badge).toBeNull();\n });\n });\n\n describe('when provided', () => {\n it('adds badge element', async () => {\n const page = await setup({ html: '<q2-input badge-value=\"5\"/>' });\n const badge = await page.find('q2-input >>> q2-badge');\n expect(badge.textContent).toEqual('5');\n });\n });\n });\n\n describe('badgeTheme', () => {\n let page: E2EPage;\n let input: E2EElement;\n let badge: E2EElement;\n beforeEach(async () => {\n page = await setup({ html: '<q2-input badge-value=\"5\"/>' });\n input = await page.find('q2-input');\n badge = await page.find('q2-input >>> q2-badge');\n });\n\n describe('when not provided', () => {\n it('does not add the badge element', async () => {\n expect(badge).not.toHaveAttribute('theme');\n });\n });\n\n describe('when provided', () => {\n beforeEach(async () => {\n await input.setProperty('badgeTheme', 'primary');\n await page.waitForChanges();\n });\n\n it('adds badge element', async () => {\n expect(badge).toEqualAttribute('theme', 'primary');\n });\n });\n });\n\n describe('textHidden', () => {\n describe('when not provided', () => {\n it('is not automatically added', async () => {\n const page = await setup({ html: '<q2-input />' });\n const input = await page.find('q2-input');\n\n expect(await input).not.toHaveAttribute('text-hidden');\n });\n\n it('is automatically added when type=\"password\"', async () => {\n const page = await setup({ html: '<q2-input type=\"password\"/>' });\n const input = await page.find('q2-input');\n\n expect(await input).toHaveAttribute('text-hidden');\n });\n });\n\n describe('when provided', () => {\n it('persists after render', async () => {\n const page = await setup({ html: '<q2-input text-hidden/>' });\n const input = await page.find('q2-input');\n\n expect(await input).toHaveAttribute('text-hidden');\n });\n });\n });\n\n describe('hideLabel', () => {\n describe('when hideLabel is provided', () => {\n it('hides the label element', async () => {\n const page = await setup({ html: '<q2-input hide-label/>' });\n const input = await page.find('q2-input');\n\n expect(input).toHaveAttribute('hide-label');\n\n input.setProperty('label', 'My Label');\n await page.waitForChanges();\n\n expect(input).toHaveAttribute('hide-label');\n\n input.setAttribute('label', 'Your Label');\n await page.waitForChanges();\n\n expect(input).toHaveAttribute('hide-label');\n const inputStyle = await input.getComputedStyle();\n expect(parseInt(inputStyle.height)).toBe(46);\n });\n });\n describe('when hideLabel is NOT provided', () => {\n it('when optional is provided, it hides the label element', async () => {\n const page = await setup({ html: '<q2-input optional/>' });\n const input = await page.find('q2-input');\n const label = await page.find('q2-input >>> label');\n const hasSRClass = label.classList.contains('sr');\n\n expect(hasSRClass).toBeTruthy();\n const inputStyle = await input.getComputedStyle();\n expect(parseInt(inputStyle.height)).toBe(46);\n });\n\n it('when readonly is provided, it hides the label element', async () => {\n const page = await setup({ html: '<q2-input readonly/>' });\n const input = await page.find('q2-input');\n const label = await page.find('q2-input >>> label');\n const hasSRClass = label.classList.contains('sr');\n\n expect(hasSRClass).toBeTruthy();\n const inputStyle = await input.getComputedStyle();\n expect(parseInt(inputStyle.height)).toBe(46);\n });\n\n it('when label is provided, it shows the label element', async () => {\n const page = await setup({ html: '<q2-input label=\"My Label\"/>' });\n const input = await page.find('q2-input');\n const label = await page.find('q2-input >>> label');\n const hasSRClass = label.classList.contains('sr');\n\n expect(hasSRClass).toBeFalsy();\n const inputStyle = await input.getComputedStyle();\n expect(parseInt(inputStyle.height)).toBe(69);\n });\n\n it('when label is not provided, it hides the label element', async () => {\n const page = await setup({ html: '<q2-input />' });\n const input = await page.find('q2-input');\n const label = await page.find('q2-input >>> label');\n const hasSRClass = label.classList.contains('sr');\n\n expect(hasSRClass).toBeTruthy();\n const inputStyle = await input.getComputedStyle();\n expect(parseInt(inputStyle.height)).toBe(46);\n });\n });\n });\n\n describe('type', () => {\n describe('numeric', () => {\n describe('format-modifier', () => {\n const formatModifierTest = [\n {\n modifier: 'integer',\n value: '-1000.00',\n expected: '-1000',\n },\n {\n modifier: 'integer-delimited',\n value: '1000000.00',\n expected: '1,000,000',\n },\n {\n modifier: 'integer-positive',\n value: '-1000.00',\n expected: '1000',\n },\n {\n modifier: 'integer-delimited-positive',\n value: '-1000000.00',\n expected: '1,000,000',\n },\n {\n modifier: '2decimal',\n value: '-1000.000',\n expected: '-1000.00',\n },\n {\n modifier: '2decimal-delimited',\n value: '1000000.000',\n expected: '1,000,000.00',\n },\n {\n modifier: '2decimal-positive',\n value: '-1000.000',\n expected: '1000.00',\n },\n {\n modifier: '2decimal-delimited-positive',\n value: '-1000000.000',\n expected: '1,000,000.00',\n },\n {\n modifier: '3decimal',\n value: '1000.00',\n expected: '1000.000',\n },\n {\n modifier: '2dec',\n value: '-1000.000',\n expected: '-1,000.00',\n },\n {\n modifier: 'delimited',\n value: '1000000.00',\n expected: '1,000,000',\n },\n ];\n\n formatModifierTest.forEach(test => {\n const { modifier, value, expected } = test;\n\n it(`on load formats correctly when set to \"${modifier}\" and value set to \"${value}\"`, async function (): Promise<void> {\n const page = await setup({\n html: `<q2-input type=\"numeric\" format-modifier=\"${modifier}\" label=\"Number\" value=\"${value}\"></q2-input>`,\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n const innerInputValue = await innerInput.getProperty('value');\n\n expect(innerInputValue).toEqual(expected);\n });\n it(`after load formats correctly when set to \"${modifier}\" and value set to \"${value}\"`, async function (): Promise<void> {\n const page = await setup({\n html: `<q2-input type=\"numeric\" format-modifier=\"${modifier}\" label=\"Number\"></q2-input>`,\n });\n const q2Input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n q2Input.setProperty('value', value);\n await page.waitForChanges();\n const innerInputValue = await innerInput.getProperty('value');\n\n expect(innerInputValue).toEqual(expected);\n });\n });\n });\n });\n });\n });\n\n describe('Methods', () => {\n describe('setValue', () => {\n it('sets the value of the input', async () => {\n const page = await setup({ html: '<q2-input label=\"My input\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> input');\n const inputChangeSpy = await input.spyOnEvent('change');\n const inputInputSpy = await input.spyOnEvent('input');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBeNull();\n const newValue = 'The truth is, I am Iron Man.';\n\n await input.callMethod('setValue', newValue);\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(1);\n expect(inputInputSpy).toHaveReceivedEventDetail({\n formattedValue: newValue,\n value: newValue,\n });\n expect(await input.getProperty('value')).toBeUndefined();\n expect(await innerInput.getProperty('value')).toEqual(newValue);\n expect(await getActiveElementTestId(page)).toEqual('inputField');\n\n await innerInput.press('Tab');\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(1);\n expect(inputChangeSpy).toHaveReceivedEventDetail({\n formattedValue: newValue,\n value: newValue,\n });\n expect(await input.getProperty('value')).toEqual(newValue);\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n\n it('sets the masked value of the input', async () => {\n const page = await setup({ html: '<q2-input label=\"My input\" type=\"phone\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> input');\n const inputChangeSpy = await input.spyOnEvent('change');\n const inputInputSpy = await input.spyOnEvent('input');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBeNull();\n const newValue = '5558675309';\n const formattedValue = '(555) 867-5309';\n\n await input.callMethod('setValue', newValue);\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(1);\n expect(inputInputSpy).toHaveReceivedEventDetail({\n formattedValue,\n minFormattedLength: formattedValue.length,\n value: newValue,\n });\n expect(await input.getProperty('value')).toBeUndefined();\n expect(await innerInput.getProperty('value')).toEqual(formattedValue);\n expect(await getActiveElementTestId(page)).toEqual('inputField');\n\n await innerInput.press('Tab');\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(1);\n expect(inputChangeSpy).toHaveReceivedEventDetail({\n formattedValue,\n minFormattedLength: formattedValue.length,\n value: newValue,\n });\n expect(await input.getProperty('value')).toEqual(newValue);\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n\n describe('clearValue', () => {\n it('clears the value of the input', async () => {\n const page = await setup({ html: '<q2-input label=\"My input\" value=\"My value\" clearable />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> input');\n const inputChangeSpy = await input.spyOnEvent('change');\n const inputInputSpy = await input.spyOnEvent('input');\n const inputClearSpy = await input.spyOnEvent('clear');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(inputClearSpy).toHaveReceivedEventTimes(0);\n expect(await innerInput.getProperty('value')).toEqual('My value');\n expect(await getActiveElementTestId(page)).toBeNull();\n\n await input.callMethod('clearValue');\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(1);\n expect(inputInputSpy).toHaveReceivedEventTimes(1);\n expect(inputClearSpy).toHaveReceivedEventTimes(1);\n expect(inputChangeSpy).toHaveReceivedEventDetail({\n formattedValue: '',\n value: '',\n });\n expect(inputInputSpy).toHaveReceivedEventDetail({\n formattedValue: '',\n value: '',\n });\n expect(await input.getProperty('value')).toEqual('');\n expect(await innerInput.getProperty('value')).toEqual('');\n expect(await getActiveElementTestId(page)).toEqual('inputField');\n });\n\n it('does not clear the value of the input when not clearable', async () => {\n const page = await setup({ html: '<q2-input label=\"My input\" value=\"My value\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> input');\n const inputChangeSpy = await input.spyOnEvent('change');\n const inputInputSpy = await input.spyOnEvent('input');\n const inputClearSpy = await input.spyOnEvent('clear');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(inputClearSpy).toHaveReceivedEventTimes(0);\n expect(await innerInput.getProperty('value')).toEqual('My value');\n expect(await getActiveElementTestId(page)).toBeNull();\n\n await input.callMethod('clearValue');\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(inputClearSpy).toHaveReceivedEventTimes(0);\n expect(await input.getProperty('value')).toEqual('My value');\n expect(await innerInput.getProperty('value')).toEqual('My value');\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n });\n\n describe('Slots', () => {\n describe('input-right', () => {\n it('does not have any nodes assigned to it when not provided', async () => {\n const page = await setup({\n html: `\n <q2-input></q2-input>\n `,\n });\n expect(\n await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-right]'])\n ).toBeUndefined();\n });\n it('has a node assigned to it when provided', async () => {\n const page = await setup({\n html: `\n <q2-input>\n <div slot=\"input-right\">Test</div>\n </q2-input>\n `,\n });\n expect(await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-right]'])).toEqual(1);\n });\n it('automatically updates when added at runtime', async () => {\n const page = await setup({\n html: `\n <q2-input></q2-input>\n `,\n });\n expect(\n await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-right]'])\n ).toBeUndefined();\n\n await page.$eval('q2-input', (element: HTMLElement) => {\n const slotDiv = document.createElement('div');\n slotDiv.slot = 'input-right';\n slotDiv.textContent = 'Test';\n element.appendChild(slotDiv);\n });\n await page.waitForChanges();\n\n expect(await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-right]'])).toEqual(1);\n\n await page.$eval('[slot=input-right]', (element: HTMLElement) => {\n element.remove();\n });\n await page.waitForChanges();\n\n expect(\n await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-right]'])\n ).toBeUndefined();\n });\n });\n\n describe('input-left', () => {\n it('does not have any nodes assigned to it when not provided', async () => {\n const page = await setup({\n html: `\n <q2-input></q2-input>\n `,\n });\n expect(\n await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-left]'])\n ).toBeUndefined();\n });\n it('has a node assigned to it when provided', async () => {\n const page = await setup({\n html: `\n <q2-input>\n <div slot=\"input-left\">Test</div>\n </q2-input>\n `,\n });\n expect(await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-left]'])).toEqual(1);\n });\n it('automatically updates when added at runtime', async () => {\n const page = await setup({\n html: `\n <q2-input></q2-input>\n `,\n });\n expect(\n await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-left]'])\n ).toBeUndefined();\n\n await page.$eval('q2-input', (element: HTMLElement) => {\n const slotDiv = document.createElement('div');\n slotDiv.slot = 'input-left';\n slotDiv.textContent = 'Test';\n element.appendChild(slotDiv);\n });\n await page.waitForChanges();\n\n expect(await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-left]'])).toEqual(1);\n\n await page.$eval('[slot=input-left]', (element: HTMLElement) => {\n element.remove();\n });\n await page.waitForChanges();\n\n expect(\n await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-left]'])\n ).toBeUndefined();\n });\n });\n describe('label', () => {\n it('does not have any nodes assigned to it when not provided', async () => {\n const page = await setup({\n html: `\n <q2-input></q2-input>\n `,\n });\n expect(await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=label]'])).toEqual(0);\n });\n it('has a node assigned to it when provided', async () => {\n const page = await setup({\n html: `\n <q2-input>\n <div slot=\"label\">Test</div>\n </q2-input>\n `,\n });\n expect(await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=label]'])).toEqual(1);\n });\n });\n });\n\n describe('Deprecations', () => {\n it('handles deprecated `ariaLabel` prop', async () => {\n const label = 'My Label';\n const page = await setup({ html: `<q2-input aria-label=\"${label}\" />` });\n await page.waitForChanges();\n await testDeprecatedAriaLabel(await page.find('q2-input'), label);\n // aria label no longer exists on the <input> element, so this will be null\n expect(await page.find('q2-input >>> input')).toEqualAttribute('aria-label', null);\n });\n });\n\n describe('Regressions', () => {\n describe('TCT-2169', () => {\n it('Limits the width of long values when pseudo is true', async () => {\n const value =\n 'Cras a felis massa. Nullam eu neque arcu. Vivamus vestibulum ut tortor blandit convallis. Quisque congue dictum augue tempor luctus. Nam vulputate eros vitae felis efficitur commodo. Donec lobortis aliquam maximus.';\n const page = await setup({ html: `<q2-input value=\"${value}\" pseudo />` });\n\n const customDisplayContainer = await page.find('q2-input >>> .custom-display-container');\n const customDisplayContainerStyle = await customDisplayContainer.getComputedStyle();\n expect(parseInt(customDisplayContainerStyle.width)).toBeLessThan(775);\n\n const customDisplaySpan = await page.find('q2-input >>> slot[name=custom-display] span');\n const customDisplaySpanStyles = await customDisplaySpan.getComputedStyle();\n expect(parseInt(customDisplaySpanStyles.width)).toBeLessThan(775);\n });\n\n it('Limits the width of the value when pseudo is true', async () => {\n const value = 'Cras a felis massa.';\n const page = await setup({ html: `<q2-input value=\"${value}\" pseudo />` });\n\n const customDisplayContainer = await page.find('q2-input >>> .custom-display-container');\n const customDisplayContainerStyle = await customDisplayContainer.getComputedStyle();\n expect(parseInt(customDisplayContainerStyle.width)).toBeLessThan(125);\n\n const customDisplaySpan = await page.find('q2-input >>> slot[name=custom-display] span');\n const customDisplaySpanStyles = await customDisplaySpan.getComputedStyle();\n expect(parseInt(customDisplaySpanStyles.width)).toBeLessThan(125);\n });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"q2-input-test.e2e.js","sourceRoot":"","sources":["../../../test/elements/q2-input-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EElement, E2EPage } from '@stencil/core/testing';\nimport {\n evaluateA11y,\n setTestStrings,\n setup,\n dispatchEvent,\n testDeprecatedAriaLabel,\n getActiveElementTestId,\n getNestedAssignedElementLength,\n getNestedElementStyle,\n getListOfStyleCompilationIssues,\n} from '../helpers';\n\ndescribe('q2-input', () => {\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-input></q2-input>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-input')).toHaveLength(0);\n });\n\n describe('[A11y] guideline compliance', () => {\n it('Does not have accessibility violations', async () => {\n const page = await setup({ html: `<q2-input label=\"A11y Testing Enabled\" />` });\n const hasViolations = await evaluateA11y(page);\n\n expect(hasViolations).toBe(false);\n });\n });\n\n async function getInnerInputDimensions(page: E2EPage) {\n return page.$eval('body', () =>\n document.querySelector('q2-input').shadowRoot.querySelector('input').getClientRects()[0].toJSON()\n );\n }\n\n it('should be registered in the dom and accept values', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"platform is awesome\" />' });\n const label = await page.find('q2-input >>> label');\n\n expect(label.innerText.trim()).toEqual('platform is awesome');\n });\n\n describe('focus', () => {\n let page: E2EPage;\n let input: E2EElement;\n let fieldContainer: E2EElement;\n\n beforeEach(async () => {\n page = await setup({ html: `<q2-input></q2-input>` });\n input = await page.find('q2-input');\n fieldContainer = await page.find('q2-input >>> .field-container');\n\n expect(await innerActiveTestId(page)).toBeUndefined();\n expect(fieldContainer).not.toHaveClass('has-focus');\n });\n\n const innerActiveTestId = async (page: E2EPage) => {\n return page.$eval('q2-input', el => el.shadowRoot.activeElement?.getAttribute('test-id'));\n };\n\n it('focuses inner button when focus event is dispatched', async function (): Promise<void> {\n await input.triggerEvent('focus');\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('inputField');\n expect(fieldContainer).toHaveClass('has-focus');\n });\n\n it('focuses inner button when element.focus() is called', async function (): Promise<void> {\n await input.focus();\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('inputField');\n expect(fieldContainer).toHaveClass('has-focus');\n });\n\n it('adds has-focus to fieldContainer when input focused', async () => {\n const innerInput = await page.find('q2-input >>> input.input-field');\n await innerInput.focus();\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('inputField');\n expect(fieldContainer).toHaveClass('has-focus');\n });\n\n describe('when pseudo is true', () => {\n beforeEach(async () => {\n await input.setProperty('pseudo', true);\n await page.waitForChanges();\n\n fieldContainer = await page.find('q2-input >>> .field-container');\n expect(fieldContainer).not.toHaveClass('has-focus');\n });\n\n it('focuses inner button when focus event is dispatched', async function (): Promise<void> {\n await input.triggerEvent('focus');\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('q2InputInnerClearButton');\n expect(fieldContainer).toHaveClass('has-focus');\n });\n\n it('focuses inner button when element.focus() is called', async function (): Promise<void> {\n await input.focus();\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('q2InputInnerClearButton');\n expect(fieldContainer).toHaveClass('has-focus');\n });\n\n it('adds has-focus to fieldContainer when button is focused', async () => {\n const innerInput = await page.find('q2-input >>> button.input-field');\n await innerInput.focus();\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('q2InputInnerClearButton');\n expect(fieldContainer).toHaveClass('has-focus');\n });\n });\n });\n\n it('when readonly label text should include (read only) ', async function (): Promise<void> {\n const readonlyText = '(read only)';\n const page: E2EPage = await setup({ html: `<q2-input label=\"label text\"></q2-input>` });\n await setTestStrings(page, {\n 'tecton.element.input.readonly': readonlyText,\n });\n const element = await page.find('q2-input');\n await element.setProperty('readonly', true);\n await page.waitForChanges();\n const label = await page.find('q2-input >>> label');\n expect(label.textContent).toEqual(`label text${readonlyText}`);\n });\n\n it('should show errors when the element has focus if error array is populated', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" />' });\n const input = await page.find('q2-input');\n input.setProperty('errors', ['broke']);\n await page.waitForChanges();\n\n const { messagesHeight, hasErrorClass } = await page.$eval('q2-input', element => {\n return {\n messagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n hasErrorClass: !!element.shadowRoot.querySelector('.has-error'),\n };\n });\n\n // errors are not visible when not in focus\n expect(messagesHeight).toEqual(0);\n\n // error indicator is present\n expect(hasErrorClass).toBe(true);\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'focus');\n\n const { expandedMessagesHeight, messagesText } = await page.$eval('q2-input', element => {\n const messageContainer = element.shadowRoot.querySelector('.messages-container');\n return {\n expandedMessagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n messagesText: (messageContainer as HTMLElement).innerText.trim(),\n };\n });\n\n // errors are displayed when in focus\n expect(expandedMessagesHeight).toBeGreaterThan(0);\n\n // error message is correct\n expect(messagesText).toEqual('broke');\n });\n\n it('should not show messages when strings are present if hideMessages is true', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" hide-messages />' });\n const input = await page.find('q2-input');\n input.setProperty('errors', ['broke']);\n\n await page.waitForChanges();\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'focus');\n\n const { messagesHeight, hasErrorClass } = await page.$eval('q2-input', element => {\n return {\n messagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n hasErrorClass: !!element.shadowRoot.querySelector('.has-error'),\n };\n });\n\n // errors are not displayed WHILE in focus\n expect(messagesHeight).toEqual(0);\n\n // indicator is still shown\n expect(hasErrorClass).toBe(true);\n });\n\n it('should show error message when error icon is clicked', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" />' });\n const input = await page.find('q2-input');\n input.setProperty('errors', ['broke']);\n await page.waitForChanges();\n\n const { messagesHeight, hasErrorClass } = await page.$eval('q2-input', element => {\n return {\n messagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n hasErrorClass: !!element.shadowRoot.querySelector('.has-error'),\n };\n });\n\n // errors are not visible when not in focus\n expect(messagesHeight).toEqual(0);\n\n // error indicator is present\n expect(hasErrorClass).toBe(true);\n\n await dispatchEvent(page, ['q2-input', '[test-id=\"divIconError\"]'], 'click');\n\n const { expandedMessagesHeight, messagesText } = await page.$eval('q2-input', element => {\n const messageContainer = element.shadowRoot.querySelector('.messages-container');\n return {\n expandedMessagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n messagesText: (messageContainer as HTMLElement).innerText.trim(),\n };\n });\n\n // errors are displayed when in focus\n expect(expandedMessagesHeight).toBeGreaterThan(0);\n\n // error message is correct\n expect(messagesText).toEqual('broke');\n });\n\n it('should show error message when error icon is clicked and input is currency type', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input type=\"currency\" label=\"foo\" />' });\n const input = await page.find('q2-input');\n input.setProperty('errors', ['broke']);\n await page.waitForChanges();\n\n const { messagesHeight, hasErrorClass } = await page.$eval('q2-input', element => {\n return {\n messagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n hasErrorClass: !!element.shadowRoot.querySelector('.has-error'),\n };\n });\n\n // errors are not visible when not in focus\n expect(messagesHeight).toEqual(0);\n\n // error indicator is present\n expect(hasErrorClass).toBe(true);\n\n await dispatchEvent(page, ['q2-input', '[test-id=\"divIconError\"]'], 'click');\n\n const { expandedMessagesHeight, messagesText } = await page.$eval('q2-input', element => {\n const messageContainer = element.shadowRoot.querySelector('.messages-container');\n return {\n expandedMessagesHeight: element.shadowRoot.querySelector('.messages-container').clientHeight,\n messagesText: (messageContainer as HTMLElement).innerText.trim(),\n };\n });\n\n // errors are displayed when in focus\n expect(expandedMessagesHeight).toBeGreaterThan(0);\n\n // error message is correct\n expect(messagesText).toEqual('broke');\n });\n\n it('does not allow invalid input types', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" type=\"fire\" />' });\n const innerInput = await page.find('q2-input >>> .input-field');\n\n // sets input type to text if invalid type is passed in\n expect(await innerInput.getProperty('type')).toEqual('text');\n });\n\n it('should allow input types to be passed in', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" type=\"tel\" />' });\n const innerInput = await page.find('q2-input >>> .input-field');\n\n // sets input to type tel\n expect(await innerInput.getProperty('type')).toEqual('tel');\n expect(await innerInput.getAttribute('inputmode')).toBeNull();\n });\n\n it('maintains formattedValue on load', async () => {\n const page = await setup({\n html: `<q2-input type='phone' value='1234567890'></q2-input>`,\n });\n const inputField = await page.find('q2-input');\n const formattedVal = await inputField.getProperty('formattedValue');\n await page.waitForChanges();\n expect(formattedVal).toBe('(123) 456-7890');\n });\n\n it('should default to text if no type is passed in', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" />' });\n const innerInput = await page.find('q2-input >>> .input-field');\n\n // defaults input to type text\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toBeNull();\n });\n\n it('should fire input event that proxies inner input event', async function () {\n const page = await setup({ html: '<q2-input label=\"foo\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n\n const inputSpy = await input.spyOnEvent('input');\n\n await innerInput.press('f');\n\n await page.waitForChanges();\n // should receive a formatted input event\n expect(inputSpy).toHaveReceivedEventDetail({\n value: 'f',\n formattedValue: 'f',\n // minFormattedLength: undefined /* This present but filtered out by the test helper */\n });\n });\n\n it('should fire change event that proxies change(blur) input event', async function () {\n const page = await setup({ html: '<q2-input label=\"foo\" value=\"test inpu\"/>' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n\n await innerInput.press('t');\n const changeSpy = await input.spyOnEvent('change');\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'blur');\n\n // should receive formatted change event\n expect(changeSpy).toHaveReceivedEventDetail({\n value: 'test input',\n formattedValue: 'test input',\n });\n expect(changeSpy).toHaveReceivedEventTimes(1);\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'focus');\n await innerInput.press(' ');\n await dispatchEvent(page, ['q2-input', '.input-field'], 'input');\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'keydown', { key: 'Enter' });\n expect(changeSpy).toHaveReceivedEventDetail({\n value: 'test input ',\n formattedValue: 'test input ',\n });\n expect(changeSpy).toHaveReceivedEventTimes(2);\n\n const onInput = (event: CustomEvent) => {\n (event.target as HTMLQ2InputElement).value = event.detail.value;\n };\n input.setProperty('oninput', onInput);\n await page.waitForChanges();\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'focus');\n await innerInput.press(' ');\n expect(changeSpy).toHaveReceivedEventTimes(2);\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'keydown', { key: 'Enter' });\n expect(changeSpy).toHaveReceivedEventDetail({\n value: 'test input ',\n formattedValue: 'test input ',\n });\n expect(changeSpy).toHaveReceivedEventTimes(3);\n });\n\n it('should fire input event after content pasted into field', async function () {\n const page = await setup({ html: '<q2-input label=\"foo\" value=\"test\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n expect(await innerInput.getProperty('value')).toEqual('test');\n\n // fully replaces value on paste if nothing selected\n await dispatchEvent(page, ['q2-input', '.input-field'], 'paste', {\n pastedValue: 'pasted value',\n });\n\n expect(await innerInput.getProperty('value')).toEqual('testpasted value');\n\n await page.waitForChanges();\n expect(inputSpy).toHaveReceivedEventTimes(1);\n expect(inputSpy).toHaveReceivedEventDetail({\n value: 'testpasted value',\n formattedValue: 'testpasted value',\n // minFormattedLength: undefined /* This present but filtered out by the test helper */\n });\n\n // only replaces selected content on paste\n await input.setProperty('value', 'reset');\n\n await page.$eval('q2-input', element => {\n const inputEl = element.shadowRoot.querySelector<HTMLInputElement>('.input-field');\n inputEl.setSelectionRange(5, 7);\n });\n await page.waitForChanges();\n // in practice, the paste event triggers the input event tested above\n // this segment validates that the paste flow follows native browser behavior if an incomplete selection is made\n expect(inputSpy).toHaveReceivedEventTimes(1);\n });\n\n it('should fire input event after content pasted into currency field', async function () {\n const page = await setup({ html: '<q2-input label=\"foo\" value=\"4.44\" type=\"currency\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n expect(await innerInput.getProperty('value')).toEqual('4.44');\n\n // fully replaces value on paste if nothing selected\n await dispatchEvent(page, ['q2-input', '.input-field'], 'paste', {\n pastedValue: '2.3',\n });\n\n expect(await innerInput.getProperty('value')).toEqual('2.30');\n\n await page.waitForChanges();\n expect(inputSpy).toHaveReceivedEventTimes(1);\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '2.30',\n formattedValue: '$2.30',\n // minFormattedLength: undefined /* This present but filtered out by the test helper */\n });\n\n // only replaces selected content on paste\n await input.setProperty('value', 'reset');\n\n await page.$eval('q2-input', element => {\n const inputEl = element.shadowRoot.querySelector<HTMLInputElement>('.input-field');\n inputEl.setSelectionRange(5, 7);\n });\n await page.waitForChanges();\n // in practice, the paste event triggers the input event tested above\n // this segment validates that the paste flow follows native browser behavior if an incomplete selection is made\n expect(inputSpy).toHaveReceivedEventTimes(1);\n });\n\n it('should show hints when hints are present and error array is empty', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\"/>' });\n const input = await page.find('q2-input');\n await input.setProperty('hints', ['try harder']);\n await input.setProperty('errors', []);\n\n await page.waitForChanges();\n\n const messagesContainer = await page.find('q2-input >>> .messages-container');\n\n // hints are shown when errors are empty\n expect(messagesContainer.innerText.trim()).toEqual('try harder');\n\n await input.setProperty('errors', ['you did it wrong']);\n\n await page.waitForChanges();\n\n // errors shown instead of hints when errors are present\n expect(messagesContainer.innerText.trim()).toEqual('you did it wrong');\n });\n\n it('should render a localized optional string when the optional attribute is passed', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input label=\"foo\" optional />' });\n\n const inputLabel = await page.find('q2-input >>> label');\n\n // a localized optional is shown in the label\n expect(inputLabel.innerText.trim()).toEqual('footecton.element.input.optional');\n });\n\n describe('pseudo', () => {\n let page: E2EPage;\n let innerInput: E2EElement;\n let inputLabel: E2EElement;\n beforeEach(async function () {\n page = await setup({ html: '<q2-input label=\"label text\" value=\"value\" pseudo />' });\n innerInput = await page.find('q2-input >>> .input-field');\n inputLabel = await page.find('q2-input >>> .input-label');\n });\n\n it('should correctly render pseudo state', async function (): Promise<void> {\n // pseudo input should be a button\n expect(innerInput.tagName).toEqual('BUTTON');\n expect(await innerInput.getProperty('type')).toEqual('button');\n expect(inputLabel.innerText).toEqual('label text');\n });\n\n it('should not extend beyond the container when the value is long', async () => {\n const input = await page.find('q2-input');\n await input.setProperty(\n 'value',\n 'This is a very very very very very very very very very very very very very very very very very long value that should be truncated'\n );\n await page.waitForChanges();\n\n const { clientWidth, scrollWidth } = await page.$eval('q2-input', (el: HTMLQ2InputElement) => {\n const { clientWidth, scrollWidth } = el.shadowRoot.querySelector('.input-container');\n return { clientWidth, scrollWidth };\n });\n expect(clientWidth).toEqual(scrollWidth);\n });\n\n it('should fill the the container when the value is short', async () => {\n const input = await page.find('q2-input');\n await input.setProperty('value', 'Short value');\n await page.waitForChanges();\n\n const { clientWidth, scrollWidth } = await page.$eval('q2-input', (el: HTMLQ2InputElement) => {\n const { clientWidth, scrollWidth } = el.shadowRoot.querySelector('.input-container');\n return { clientWidth, scrollWidth };\n });\n expect(clientWidth).toEqual(scrollWidth);\n });\n\n describe('when optional', () => {\n it('should correctly render pseudo state', async function (): Promise<void> {\n await setTestStrings(page, {\n 'tecton.element.input.optional': '(Optional)',\n });\n const element = await page.find('q2-input');\n element.setProperty('optional', true);\n await page.waitForChanges();\n\n expect(inputLabel.innerText).toEqual('label text(Optional)');\n });\n });\n });\n\n it('should localize appropriate attribute strings', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input />' });\n await setTestStrings(page, {\n 'q2-input.label': 'Label Text',\n 'tecton.element.input.optional': '(Optional)',\n 'q2-input.ariaLabel': 'Aria-Label Text',\n 'q2-input.placeholder': 'Placeholder Text',\n 'q2-input.hint1': 'Hint 1 Text',\n 'q2-input.error1': 'Error 1 Text',\n });\n\n const input = await page.find('q2-input');\n\n input.setProperty('label', 'q2-input.label');\n input.setProperty('placeholder', 'q2-input.placeholder');\n input.setProperty('hints', ['q2-input.hint1']);\n\n await page.waitForChanges();\n\n const label = await page.find('q2-input >>> label');\n const labelText = label.innerText;\n const innerInput = await page.find('q2-input >>> .input-field');\n let ariaLabel = innerInput.getAttribute('aria-label');\n\n // label bound correctly\n expect(labelText).toEqual('Label Text');\n expect(ariaLabel).toEqual(null);\n\n input.setProperty('ariaLabel', 'q2-input.ariaLabel');\n\n await page.waitForChanges();\n\n const messageContainer = await page.find('q2-input >>> .messages-container');\n\n ariaLabel = innerInput.getAttribute('aria-label');\n const placeholder = innerInput.getAttribute('placeholder');\n\n // label is updated, hide-label is added, and aria-label is removed\n expect(await input.getProperty('aria-label')).toEqual(undefined);\n expect(await input.getProperty('label')).toEqual('Aria-Label Text');\n expect(await input.getProperty('hideLabel')).toEqual(true);\n\n // expect placeholder to be bound correctly\n expect(placeholder).toEqual('Placeholder Text');\n\n // expect localized hint to be shown since errors are not present\n expect(messageContainer.innerText).toEqual('Hint 1 Text');\n\n input.setProperty('hints', []);\n input.setProperty('errors', ['q2-input.error1']);\n\n await page.waitForChanges();\n\n // expect errors to be localized\n expect(messageContainer.innerText).toEqual('Error 1 Text');\n });\n\n /* Masking */\n\n // Currency\n it('should handle currency masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"currency\" label=\"Amount\" value=\"10\" autocomplete=\"on\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n let inputValue = await innerInput.getProperty('value');\n const inputPrefix = await page.find('q2-input >>> .input-prefix');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n expect(await innerInput.getProperty('autocomplete')).toEqual('transaction-amount');\n expect(inputPrefix).not.toBeNull();\n expect(inputPrefix.innerText).toEqual('$');\n\n // formats value on initial input\n expect(inputValue).toEqual('10.00');\n\n await innerInput.press('3');\n\n // input value gets reformatted correctly and emits value and formattedValue\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '100.03',\n formattedValue: '$100.03',\n });\n\n inputValue = await innerInput.getProperty('value');\n\n // formatted value is set back on inner input\n expect(inputValue).toEqual('100.03');\n\n await innerInput.press('4');\n await innerInput.press('5');\n await innerInput.press('6');\n await innerInput.press('7');\n await innerInput.press('8');\n await innerInput.press('9');\n\n // input value is formatted correctly with thousands\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '100034567.89',\n formattedValue: '$100,034,567.89',\n });\n\n // formatted value is set correctly back on inner input\n inputValue = await innerInput.getProperty('value');\n\n expect(inputValue).toEqual('100,034,567.89');\n\n await innerInput.press('e');\n await innerInput.press('a');\n await innerInput.press('0');\n await innerInput.press('1');\n await innerInput.press('2');\n\n // invalid input is ignored\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '100034567890.12',\n formattedValue: '$100,034,567,890.12',\n });\n\n inputValue = await innerInput.getProperty('value');\n\n // input value is reset to formatted value removing invalid input\n expect(inputValue).toEqual('100,034,567,890.12');\n\n await input.setProperty('value', '50');\n\n await page.waitForChanges();\n\n inputValue = await innerInput.getProperty('value');\n\n // setting value programatically from property allows numeric interpretation\n expect(inputValue).toEqual('50.00');\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'paste', {\n pastedValue: '2.3',\n });\n\n await page.waitForChanges();\n\n inputValue = await innerInput.getProperty('value');\n\n // setting value from paste allows numeric interpretation\n expect(inputValue).toEqual('2.30');\n });\n\n it('should reformat currency on format modifier change', async function () {\n const page = await setup({\n html: '<q2-input type=\"currency\" label=\"Amount\" value=\"10\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n let inputPrefix = await page.find('q2-input >>> .input-prefix');\n\n expect(inputPrefix).not.toBeNull();\n expect(inputPrefix.innerText).toEqual('$');\n\n input.setProperty('formatModifier', 'EUR');\n await page.waitForChanges();\n await innerInput.press('0');\n\n // format modifier property change will update formatting\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '100.00',\n formattedValue: '€100.00',\n });\n\n inputPrefix = await page.find('q2-input >>> .input-prefix');\n\n expect(inputPrefix).not.toBeNull();\n expect(inputPrefix.innerText).toEqual('€');\n });\n\n it('should convert value property to string to prevent non string values from blowing up, especially for currency', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input type=\"currency\" />' });\n const input = await page.find('q2-input');\n\n input.setProperty('value', 50);\n\n await page.waitForChanges();\n\n const innerInput = await page.find('q2-input >>> input');\n const innerInputValue = await innerInput.getProperty('value');\n\n expect(innerInputValue).toEqual('50.00');\n });\n\n it('should remove decimals if \"-integer\" appended to currency code', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"currency\" label=\"Amount\" value=\"10\" format-modifier=\"BHD-integer\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n let inputValue = await innerInput.getProperty('value');\n const inputPrefix = await page.find('q2-input >>> .input-prefix');\n await page.waitForChanges();\n\n expect(inputPrefix.innerText).toEqual('ب.د');\n expect(inputValue).toEqual('10');\n\n await innerInput.press('3');\n\n // input value gets reformatted correctly and emits value and formattedValue\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '103',\n formattedValue: '103ب.د',\n });\n\n inputValue = await innerInput.getProperty('value');\n\n // formatted value is set back on inner input\n expect(inputValue).toEqual('103');\n });\n\n // Phone Number\n it('handles phone number masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"phone\" label=\"Phone Number\" value=\"10\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n const inputPrefix = await page.find('q2-input >>> .input-prefix');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('type')).toEqual('tel');\n expect(await innerInput.getAttribute('inputmode')).toBeNull;\n // Prefix not rendered for US/default\n expect(inputPrefix).toBeNull();\n\n // formats value on initial input\n expect(await innerInput.getProperty('value')).toEqual('(10');\n\n await innerInput.press('3');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '103',\n formattedValue: '(103',\n minFormattedLength: 14,\n });\n\n expect(await innerInput.getProperty('value')).toEqual('(103');\n\n // correct formatting character allowed\n await innerInput.press(')');\n expect(await innerInput.getProperty('value')).toEqual('(103)');\n\n // incorrect formatting character replaced by correct one\n await innerInput.press('-');\n expect(await innerInput.getProperty('value')).toEqual('(103) ');\n\n await innerInput.press('4');\n expect(await innerInput.getProperty('value')).toEqual('(103) 4');\n\n // letter ignored\n await innerInput.press('a');\n expect(await innerInput.getProperty('value')).toEqual('(103) 4');\n\n // invalid characters ignored\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('(103) 4');\n\n await innerInput.press('5');\n expect(await innerInput.getProperty('value')).toEqual('(103) 45');\n\n await innerInput.press('6');\n expect(await innerInput.getProperty('value')).toEqual('(103) 456');\n\n await innerInput.press('7');\n expect(await innerInput.getProperty('value')).toEqual('(103) 456-7');\n\n await innerInput.press('8');\n expect(await innerInput.getProperty('value')).toEqual('(103) 456-78');\n\n await innerInput.press('9');\n expect(await innerInput.getProperty('value')).toEqual('(103) 456-789');\n\n await innerInput.press('0');\n expect(await innerInput.getProperty('value')).toEqual('(103) 456-7890');\n\n // Excess character not added\n await innerInput.press('0');\n expect(await innerInput.getProperty('value')).toEqual('(103) 456-7890');\n\n input.setProperty('value', '1234567890');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('(123) 456-7890');\n\n input.setProperty('value', '(098) 765-4321');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('(098) 765-4321');\n\n input.setProperty('value', '(123) 45678-90');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('(123) 456-7890');\n\n input.setProperty('value', '(1) 234-567890');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('(123) 456-7890');\n });\n\n // Brazil land phone number (xx) xxxx-xxxx\n it('handles brazil mobile phone number masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"phone\" label=\"Phone Number\" format-modifier=\"BR\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n input.setProperty('value', '2233334444');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('(22) 3333-4444');\n });\n\n // Brazil mobile number (xx) xxxxx-xxxx\n it('handles brazil mobile phone number masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"phone\" label=\"Phone Number\" format-modifier=\"BR\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n input.setProperty('value', '22333334444');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('(22) 33333-4444');\n expect(await innerInput.getProperty('value')).not.toEqual('(22) 3333-34444');\n });\n\n // UK land phone number https://en.wikipedia.org/wiki/Telephone_numbers_in_the_United_Kingdom\n it('handles UK mobile phone number masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input label=\"label text\" type=\"phone\" format-modifier=\"US\" value=\"1\" />',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n\n const input = await page.find('q2-input');\n const inputSpy = await input.spyOnEvent('input');\n\n await innerInput.press('0');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '10',\n formattedValue: '(10',\n minFormattedLength: 14,\n });\n\n input.setProperty('value', '10');\n input.setProperty('formatModifier', 'GB');\n await page.waitForChanges();\n\n await innerInput.press('3');\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '103',\n formattedValue: '+44 103',\n minFormattedLength: 13, // 9 + '+44 '\n });\n });\n\n it('handles alternate format modifiers for phone number masking', async function () {\n const page = await setup({\n html: '<q2-input type=\"phone\" label=\"Amount\" value=\"1234567890\" />',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n let inputPrefix = await page.find('q2-input >>> .input-prefix');\n\n // Prefix not rendered for US/default\n expect(inputPrefix).toBeNull();\n expect(await innerInput.getProperty('value')).toEqual('(123) 456-7890');\n\n input.setProperty('formatModifier', 'MX');\n await page.waitForChanges();\n\n inputPrefix = await page.find('q2-input >>> .input-prefix');\n expect(inputPrefix).not.toBeNull();\n expect(inputPrefix.innerText).toEqual('+52');\n expect(await innerInput.getProperty('value')).toEqual('(123) 456-7890');\n\n input.setProperty('formatModifier', 'MT');\n input.setProperty('value', '12345678');\n await page.waitForChanges();\n\n inputPrefix = await page.find('q2-input >>> .input-prefix');\n expect(inputPrefix.innerText).toEqual('+356');\n expect(await innerInput.getProperty('value')).toEqual('12-34-56-78');\n });\n\n it('should incorporate phone prefix characters into minFormattedLength', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input label=\"label text\" type=\"phone\" format-modifier=\"US\" value=\"1\" />',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n\n const input = await page.find('q2-input');\n const inputSpy = await input.spyOnEvent('input');\n\n await innerInput.press('0');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '10',\n formattedValue: '(10',\n minFormattedLength: 14,\n });\n\n input.setProperty('value', '10');\n input.setProperty('formatModifier', 'MX');\n await page.waitForChanges();\n\n await innerInput.press('3');\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '103',\n formattedValue: '+52 (103',\n minFormattedLength: 18, // 14 + '+52 '\n });\n });\n\n // SSN\n it('handles ssn masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"ssn\" label=\"SSN\" value=\"123456789\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n // formats value on initial input\n expect(await innerInput.getProperty('value')).toEqual('123-45-6789');\n\n input.setProperty('value', '123');\n await page.waitForChanges();\n await innerInput.press('4');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '1234',\n formattedValue: '123-4',\n minFormattedLength: 11,\n });\n\n expect(await innerInput.getProperty('value')).toEqual('123-4');\n\n await innerInput.press('5');\n expect(await innerInput.getProperty('value')).toEqual('123-45');\n\n // correct formatting character allowed\n await innerInput.press('-');\n expect(await innerInput.getProperty('value')).toEqual('123-45-');\n\n // letter ignored\n await innerInput.press('a');\n expect(await innerInput.getProperty('value')).toEqual('123-45-');\n\n // invalid characters ignored\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('123-45-');\n\n await innerInput.press('6');\n expect(await innerInput.getProperty('value')).toEqual('123-45-6');\n\n await innerInput.press('7');\n expect(await innerInput.getProperty('value')).toEqual('123-45-67');\n\n await innerInput.press('8');\n expect(await innerInput.getProperty('value')).toEqual('123-45-678');\n\n await innerInput.press('9');\n expect(await innerInput.getProperty('value')).toEqual('123-45-6789');\n\n // Excess character not added\n await innerInput.press('0');\n expect(await innerInput.getProperty('value')).toEqual('123-45-6789');\n\n input.setProperty('value', '987654321');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('987-65-4321');\n\n input.setProperty('value', '123-45-6789');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('123-45-6789');\n\n input.setProperty('value', '1-2345678-9');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('123-45-6789');\n\n input.setProperty('value', '123-4-5678-9');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('123-45-6789');\n });\n\n // TIN\n it('handles tin masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"tin\" label=\"Tax Identification Number\" value=\"123456789\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n // formats value on initial input\n expect(await innerInput.getProperty('value')).toEqual('12-3456789');\n\n input.setProperty('value', '12');\n await page.waitForChanges();\n await innerInput.press('3');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '123',\n formattedValue: '12-3',\n minFormattedLength: 10,\n });\n\n expect(await innerInput.getProperty('value')).toEqual('12-3');\n // ignore non numeric\n await innerInput.press('@');\n expect(await innerInput.getProperty('value')).toEqual('12-3');\n await innerInput.press('4');\n await innerInput.press('5');\n await innerInput.press('6');\n await innerInput.press('7');\n await innerInput.press('8');\n await innerInput.press('9');\n expect(await innerInput.getProperty('value')).toEqual('12-3456789');\n });\n\n // Alphanumeric\n it('handles alphanumeric masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"alphanumeric\" label=\"Alphanumeric\" value=\"\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n\n await innerInput.press('1');\n\n // Allows numbers\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '1',\n formattedValue: '1',\n });\n\n expect(await innerInput.getProperty('value')).toEqual('1');\n\n // Allows lowercase letters\n await innerInput.press('a');\n expect(await innerInput.getProperty('value')).toEqual('1a');\n\n // Allows uppercase letters\n await innerInput.press('A');\n expect(await innerInput.getProperty('value')).toEqual('1aA');\n\n // invalid characters ignored\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('1aA');\n });\n\n // Alpha\n it('handles alpha masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"alpha\" label=\"Alpha\" value=\"\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n\n await innerInput.press('a');\n\n // Allows lowercase letters\n expect(inputSpy).toHaveReceivedEventDetail({\n value: 'a',\n formattedValue: 'a',\n });\n expect(await innerInput.getProperty('value')).toEqual('a');\n\n // Allows uppercase letters\n await innerInput.press('A');\n expect(await innerInput.getProperty('value')).toEqual('aA');\n\n // invalid characters ignored\n await innerInput.press('1');\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('aA');\n });\n\n // Numeric\n it('handles numeric masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"numeric\" label=\"Numeric\" value=\"\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('decimal');\n\n await innerInput.press('-');\n\n // Allows hyphen for negative\n expect(await innerInput.getProperty('value')).toEqual('-');\n\n // Allows numbers\n await innerInput.press('1');\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '-1',\n formattedValue: '-1',\n });\n expect(await innerInput.getProperty('value')).toEqual('-1');\n\n // Allows period\n await innerInput.press('.');\n expect(await innerInput.getProperty('value')).toEqual('-1.');\n\n // Allows comma and invalid value.\n await innerInput.press(',');\n expect(await innerInput.getProperty('value')).toEqual('-1.,');\n\n // invalid characters ignored\n await innerInput.press('a');\n await innerInput.press('A');\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('-1.,');\n });\n\n it('handles alternate format modifiers for numeric masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"numeric\" label=\"Numeric\" value=\"\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n input.setProperty('formatModifier', 'delimited');\n await page.waitForChanges();\n await innerInput.press('-');\n\n // Allows hyphen for negative\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '-',\n formattedValue: '-',\n });\n expect(await innerInput.getProperty('value')).toEqual('-');\n\n // Allows numbers\n await innerInput.press('1');\n expect(await innerInput.getProperty('value')).toEqual('-1');\n\n await innerInput.press('2');\n expect(await innerInput.getProperty('value')).toEqual('-12');\n\n await innerInput.press('3');\n expect(await innerInput.getProperty('value')).toEqual('-123');\n\n await innerInput.press('4');\n expect(await innerInput.getProperty('value')).toEqual('-1,234');\n\n await innerInput.press('5');\n await innerInput.press('6');\n await innerInput.press('7');\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567');\n\n // invalid characters ignored\n await innerInput.press('.');\n await innerInput.press(',');\n await innerInput.press('a');\n await innerInput.press('A');\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567');\n\n input.setProperty('formatModifier', 'integer');\n input.setProperty('value', '-1,234,567');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('-1234567');\n\n input.setProperty('formatModifier', '1dec');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567.0');\n\n input.setProperty('formatModifier', '4dec');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567.0000');\n });\n\n // Percentage\n it('handles percentage masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"percentage\" label=\"Percentage\" value=\"\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n const inputPrefix = await page.find('q2-input >>> .input-prefix');\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('decimal');\n expect(inputPrefix).not.toBeNull();\n expect(inputPrefix.innerText).toEqual('%');\n\n await innerInput.press('-');\n // Allows hyphen for negative\n expect(await innerInput.getProperty('value')).toEqual('-');\n\n // Allows numbers\n await innerInput.press('1');\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '-1',\n formattedValue: '-1%',\n });\n expect(await innerInput.getProperty('value')).toEqual('-1');\n\n // Allows period\n await innerInput.press('.');\n expect(await innerInput.getProperty('value')).toEqual('-1.');\n\n // Allows comma and invalid value.\n await innerInput.press(',');\n expect(await innerInput.getProperty('value')).toEqual('-1.,');\n\n // invalid characters ignored\n await innerInput.press('a');\n await innerInput.press('A');\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('-1.,');\n });\n\n it('handles alternate format modifiers for percentage masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"percentage\" label=\"Percentage\" value=\"\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n\n const inputPrefix = await page.find('q2-input >>> .input-prefix');\n\n expect(inputPrefix).not.toBeNull();\n expect(inputPrefix.innerText).toEqual('%');\n\n input.setProperty('formatModifier', 'delimited');\n await page.waitForChanges();\n await innerInput.press('-');\n\n // Allows hyphen for negative\n expect(await innerInput.getProperty('value')).toEqual('-');\n\n // Allows numbers\n await innerInput.press('1');\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '-1',\n formattedValue: '-1%',\n });\n expect(await innerInput.getProperty('value')).toEqual('-1');\n\n await innerInput.press('2');\n expect(await innerInput.getProperty('value')).toEqual('-12');\n\n await innerInput.press('3');\n expect(await innerInput.getProperty('value')).toEqual('-123');\n\n await innerInput.press('4');\n expect(await innerInput.getProperty('value')).toEqual('-1,234');\n\n await innerInput.press('5');\n await innerInput.press('6');\n await innerInput.press('7');\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567');\n\n // invalid characters ignored\n await innerInput.press('.');\n await innerInput.press(',');\n await innerInput.press('a');\n await innerInput.press('A');\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567');\n\n input.setProperty('formatModifier', 'integer');\n input.setProperty('value', '-1,234,567');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('-1234567');\n\n input.setProperty('formatModifier', '1dec');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567.0');\n\n input.setProperty('formatModifier', '4dec');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('-1,234,567.0000');\n });\n\n // Postal\n it('handles postal code masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"postal\" label=\"Postal Code\" value=\"12345\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n // formats value on initial input\n expect(await innerInput.getProperty('value')).toEqual('12345');\n\n input.setProperty('value', '123');\n await page.waitForChanges();\n await innerInput.press('4');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '1234',\n formattedValue: '1234',\n minFormattedLength: 5,\n });\n\n expect(await innerInput.getProperty('value')).toEqual('1234');\n\n // letter ignored\n await innerInput.press('a');\n expect(await innerInput.getProperty('value')).toEqual('1234');\n\n // invalid characters ignored\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('1234');\n\n await innerInput.press('5');\n expect(await innerInput.getProperty('value')).toEqual('12345');\n\n input.setProperty('value', '12345sdfg');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('12345');\n });\n\n it('handles alternate format modifiers for postal code masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"postal\" label=\"Postal Code\" value=\"12345\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n\n // formats value on initial input\n expect(await innerInput.getProperty('value')).toEqual('12345');\n\n input.setProperty('formatModifier', 'US+4');\n await page.waitForChanges();\n\n await innerInput.press('6');\n await innerInput.press('7');\n await innerInput.press('8');\n await innerInput.press('9');\n\n expect(await innerInput.getProperty('value')).toEqual('12345-6789');\n });\n\n // Date\n it('handles date masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"date\" label=\"Date\" value=\"10102019\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputSpy = await input.spyOnEvent('input');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n // formats value on initial input\n expect(await innerInput.getProperty('value')).toEqual('10/10/2019');\n\n input.setProperty('value', '1234');\n await page.waitForChanges();\n await innerInput.press('5');\n\n expect(inputSpy).toHaveReceivedEventDetail({\n value: '12/34/5',\n formattedValue: '12/34/5',\n minFormattedLength: 10,\n });\n\n expect(await innerInput.getProperty('value')).toEqual('12/34/5');\n\n // letter ignored\n await innerInput.press('a');\n expect(await innerInput.getProperty('value')).toEqual('12/34/5');\n\n // invalid characters ignored\n await innerInput.press('!');\n await innerInput.press('@');\n await innerInput.press('#');\n await innerInput.press('$');\n await innerInput.press('%');\n await innerInput.press('^');\n await innerInput.press('*');\n expect(await innerInput.getProperty('value')).toEqual('12/34/5');\n\n await innerInput.press('6');\n await innerInput.press('7');\n await innerInput.press('8');\n expect(await innerInput.getProperty('value')).toEqual('12/34/5678');\n\n await innerInput.press('8');\n expect(await innerInput.getProperty('value')).toEqual('12/34/5678');\n });\n\n it('handles alternate format modifiers for date masking', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"date\" label=\"Date\" value=\"10102019\" ></q2-input>',\n });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('10/10/2019');\n\n input.setProperty('formatModifier', 'M-D-YYYY');\n await page.waitForChanges();\n\n expect(await innerInput.getProperty('value')).toEqual('10-10-2019');\n\n input.setProperty('value', '');\n await page.waitForChanges();\n\n await innerInput.press('1');\n expect(await innerInput.getProperty('value')).toEqual('1');\n\n // incorrect formatting char ignored\n await innerInput.press('/');\n expect(await innerInput.getProperty('value')).toEqual('1');\n\n // correct formatting char accepted\n await innerInput.press('-');\n expect(await innerInput.getProperty('value')).toEqual('1-');\n\n await innerInput.press('1');\n await innerInput.press('0');\n await innerInput.press('2');\n await innerInput.press('0');\n await innerInput.press('1');\n await innerInput.press('9');\n expect(await innerInput.getProperty('value')).toEqual('1-10-2019');\n });\n\n it('should only allow permitted, nonformatting characters up to maxlength', async () => {\n const page = await setup({\n html: '<q2-input type=\"date\" maxlength=\"3\" label=\"Date\"></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n\n await innerInput.press('1');\n await innerInput.press('0');\n await innerInput.press('2');\n expect(await innerInput.getProperty('value')).toEqual('10/2');\n\n await innerInput.press('2');\n expect(await innerInput.getProperty('value')).toEqual('10/2');\n await page.waitForChanges();\n\n // correct formatting char accepted\n await innerInput.press('Backspace');\n expect(await innerInput.getProperty('value')).toEqual('10/');\n\n await innerInput.press('/');\n await innerInput.press('1');\n expect(await innerInput.getProperty('value')).toEqual('10/1');\n });\n\n it('should allow inserting permitted characters up to maxlength when our input provides a placeholder', async () => {\n const page = await setup({\n html: '<q2-input type=\"currency\" maxlength=\"2\" label=\"Amount\"></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n\n await innerInput.press('1');\n await innerInput.press('0');\n await innerInput.press('2');\n expect(await innerInput.getProperty('value')).toEqual('0.10');\n });\n\n it('should allow pasting text up to the character limit and truncate whatever is left over', async function () {\n const page = await setup({\n html: '<q2-input type=\"text\" maxlength=10 label=\"text-test\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n\n const pasteValue = '01234567890123456789';\n const expectedValue = '0123456789';\n\n await dispatchEvent(page, ['q2-input', '.input-field'], 'paste', {\n pastedValue: pasteValue,\n });\n expect(await innerInput.getProperty('value')).toEqual(expectedValue);\n });\n\n describe('cursor', () => {\n it('does not move the cursor in reverse when maxlength is set', async () => {\n const maxlength = 4;\n const page = await setup({\n html: '<q2-input maxlength=\"' + maxlength.toString() + '\" ></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n\n // max length is 4, so we should be able to enter 4 characters\n for (let i = 0; i < maxlength; i++) {\n await innerInput.press('a');\n }\n\n // move the cursor to the middle of the string\n await innerInput.press('ArrowLeft');\n await innerInput.press('ArrowLeft');\n\n // add characters to the middle of the string\n await innerInput.press('f');\n await innerInput.press('o');\n\n expect(await innerInput.getProperty('value')).toEqual('aafo');\n });\n\n it('does not move the cursor position when first character is deleted', async () => {\n const page = await setup({\n html: '<q2-input type=\"text\" value=\"abcde 12345\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n const currentPosition = await innerInput.getProperty('selectionStart');\n for (let i = 0; i < currentPosition - 1; i++) {\n await innerInput.press('ArrowLeft');\n }\n await innerInput.press('Backspace');\n await page.waitForChanges();\n const newPosition = await innerInput.getProperty('selectionStart');\n expect(newPosition).toEqual(0);\n });\n\n it('sets the cursor to where the user clicks to focus', async () => {\n const page = await setup({\n html: '<q2-input type=\"text\" value=\"Tony Stark\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n const valueLength = (await innerInput.getProperty('value')).length;\n const dimensions = await getInnerInputDimensions(page);\n\n // Simulate clicking a character in the middle of the input\n await page.mouse.click(dimensions.left + 50, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toBeLessThan(valueLength);\n });\n\n it('sets the cursor to where the user clicks if the input is already focused', async () => {\n const page = await setup({\n html: '<q2-input type=\"text\" value=\"Tony Stark\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n const valueLength = (await innerInput.getProperty('value')).length;\n const dimensions = await getInnerInputDimensions(page);\n\n await innerInput.focus();\n await page.waitForChanges();\n\n // Simulate clicking a character in the middle of the input\n await page.mouse.click(dimensions.left + 50, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toBeLessThan(valueLength);\n });\n\n describe(\"when type is 'currency'\", () => {\n it('does not move the cursor to the end when first character is deleted', async () => {\n const page = await setup({\n html: '<q2-input type=\"currency\" value=\"123\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n const currentPosition = await innerInput.getProperty('selectionStart');\n // For loop pushes cursor to left end position of input.value\n for (let i = 0; i < currentPosition - 1; i++) {\n await innerInput.press('ArrowLeft');\n }\n await innerInput.press('Backspace');\n await page.waitForChanges();\n const newPosition = await innerInput.getProperty('selectionStart');\n // 0 represents that cursor stays at far left (beginning position of input.value)\n expect(newPosition).toEqual(0);\n });\n\n it('moves the cursor to the left and right when pressing the arrow keys', async () => {\n const page = await setup({\n html: '<q2-input type=\"currency\" value=\"185940958\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n let value = await innerInput.getProperty('value');\n\n // move the cursor to the middle of the string\n const pressTimes = 4;\n for (let i = 0; i < pressTimes; i++) await innerInput.press('ArrowLeft');\n expect(await innerInput.getProperty('selectionStart')).toEqual(value.length - pressTimes);\n\n // add characters to the middle of the string\n await innerInput.press('3');\n await innerInput.press('3');\n\n expect(await innerInput.getProperty('value')).toEqual('18,594,095,338.00');\n\n // move the cursor back to the end of the string\n for (let i = 0; i < pressTimes; i++) await innerInput.press('ArrowRight');\n value = await innerInput.getProperty('value');\n expect(await innerInput.getProperty('selectionStart')).toEqual(value.length);\n });\n\n it('sets the cursor to the end regardless of where the user clicks to focus', async () => {\n const page = await setup({\n html: '<q2-input type=\"currency\" value=\"185940958\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n const valueLength = (await innerInput.getProperty('value')).length;\n const dimensions = await getInnerInputDimensions(page);\n\n // Simulate clicking a character in the middle of the input\n await page.mouse.click(dimensions.right - 50, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toEqual(valueLength);\n });\n\n it('sets the cursor to where the user clicks if the input is already focused', async () => {\n const page = await setup({\n html: '<q2-input type=\"currency\" value=\"185940958\"></q2input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n const valueLength = (await innerInput.getProperty('value')).length;\n const dimensions = await getInnerInputDimensions(page);\n\n await innerInput.focus();\n await page.waitForChanges();\n\n // Simulate clicking a character in the middle of the input\n await page.mouse.click(dimensions.right - 50, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toBeLessThan(valueLength);\n });\n });\n\n describe('when on mobile', () => {\n let page: E2EPage;\n let innerInput: E2EElement;\n let inputValueLength: number;\n beforeEach(async () => {\n page = await setup({ html: '' });\n page.setUserAgent(\n 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'\n );\n await page.setContent('<q2-input type=\"text\" value=\"Tony Stark\"></q2input>');\n await page.waitForChanges();\n innerInput = await page.find('q2-input >>> .input-field');\n inputValueLength = (await innerInput.getProperty('value')).length;\n const dimensions = await getInnerInputDimensions(page);\n await page.touchscreen.tap(dimensions.left + 50, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toEqual(7);\n });\n\n it('moves the cursor when ArrowLeft is pressed', async () => {\n const pressTimes = 4;\n for (let i = 0; i < pressTimes; i++) await innerInput.press('ArrowLeft');\n expect(await innerInput.getProperty('selectionStart')).toEqual(3);\n });\n\n it('moves the cursor when ArrowRight is pressed', async () => {\n await innerInput.press('ArrowRight');\n expect(await innerInput.getProperty('selectionStart')).toEqual(8);\n });\n\n it('moves the cursor to the beginning when ArrowUp is pressed', async () => {\n await innerInput.press('ArrowUp');\n expect(await innerInput.getProperty('selectionStart')).toEqual(0);\n });\n\n it('moves the cursor to the end when ArrowDown is pressed', async () => {\n await innerInput.press('ArrowDown');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('moves the cursor to the end when End is pressed', async () => {\n await innerInput.press('End');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('moves the cursor to the beginning when Home is pressed', async () => {\n await innerInput.press('Home');\n expect(await innerInput.getProperty('selectionStart')).toEqual(0);\n });\n\n describe(\"when type is 'currency'\", () => {\n beforeEach(async () => {\n const input = await page.find('q2-input');\n await input.setProperty('type', 'currency');\n await input.setProperty('value', '1234567890');\n await page.waitForChanges();\n innerInput = await page.find('q2-input >>> .input-field');\n inputValueLength = (await innerInput.getProperty('value')).length;\n await innerInput.focus();\n const dimensions = await getInnerInputDimensions(page);\n await page.touchscreen.tap(dimensions.left - 50, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('does not move the cursor when ArrowLeft is pressed', async () => {\n const pressTimes = 4;\n for (let i = 0; i < pressTimes; i++) await innerInput.press('ArrowLeft');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('does not move the cursor when ArrowRight is pressed', async () => {\n await innerInput.press('ArrowRight');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('does not move the cursor when ArrowUp is pressed', async () => {\n await innerInput.press('ArrowUp');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('does not move the cursor when ArrowDown is pressed', async () => {\n await innerInput.press('ArrowDown');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('does not move the cursor when End is pressed', async () => {\n await innerInput.press('End');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('does not move the cursor when Home is pressed', async () => {\n await innerInput.press('Home');\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n\n it('sets the cursor at the end regardless of where the user clicks', async () => {\n const dimensions = await getInnerInputDimensions(page);\n\n // Simulate clicking a character in the middle of the input\n await page.touchscreen.tap(dimensions.left - 100, dimensions.top + dimensions.height / 2);\n await page.waitForChanges();\n expect(await innerInput.getProperty('selectionStart')).toEqual(inputValueLength);\n });\n });\n });\n });\n\n it('does not allow invalid autocomplete types', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input autocomplete />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n\n // sets input autocomplete to nothing to make sure 'off' is returned\n expect(await innerInput.getProperty('autocomplete')).toEqual('off');\n\n input.setProperty('autocomplete', '');\n await page.waitForChanges();\n\n // sets input autocomplete to empty string to make sure 'off' is returned\n expect(await innerInput.getProperty('autocomplete')).toEqual('off');\n });\n\n it('allows autocomplete types', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input autocomplete=\"name\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n\n // sets input autocomplete to null to make sure 'off' is returned\n expect(await innerInput.getProperty('autocomplete')).toEqual('name');\n\n input.setProperty('autocomplete', 'on');\n await page.waitForChanges();\n\n // sets input autocomplete to null to make sure 'off' is returned\n expect(await innerInput.getProperty('autocomplete')).toEqual('on');\n });\n\n it('should show toggle button when visibility toggle is enabled', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input show-visibility-toggle />' });\n const toggleButton = await page.find('q2-input >>> [test-id=\"toggleVisibilityButton\"]');\n expect(toggleButton).not.toBeNull();\n });\n\n it('should not show toggle button when visibility toggle is not enabled', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input />' });\n const toggleButton = await page.find('q2-input >>> [test-id=\"toggleVisibilityButton\"]');\n expect(toggleButton).toBeNull();\n });\n\n it('should not show toggle button even if visibility toggle is enabled but the type is not text/password', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input show-visibility-toggle type=\"number\" />' });\n const toggleButton = await page.find('q2-input >>> [test-id=\"toggleVisibilityButton\"]');\n expect(toggleButton).toBeNull();\n });\n\n it('should switch inner input type to \"password\" when visibility toggle is clicked for type=text', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input type=\"text\" show-visibility-toggle />' });\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n const innerInput = await page.find('q2-input >>> .input-field');\n expect(await innerInput.getProperty('type')).toEqual('password');\n\n // clicking again should change it back to \"text\"\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n expect(await innerInput.getProperty('type')).toEqual('text');\n });\n\n it('should switch inner input type to \"text\" when visibility toggle is clicked for type=password', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input type=\"password\" show-visibility-toggle />' });\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n const innerInput = await page.find('q2-input >>> .input-field');\n expect(await innerInput.getProperty('type')).toEqual('text');\n\n // clicking again should change it back to \"password\"\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n expect(await innerInput.getProperty('type')).toEqual('password');\n });\n\n it('should move focus to q2-input when visibility toggle is clicked for type=password', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input type=\"password\" show-visibility-toggle />' });\n const innerInput = await page.find('q2-input >>> .input-field');\n const inputFocusSpy = await innerInput.spyOnEvent('focus');\n expect(await innerInput.getProperty('type')).toEqual('password');\n expect(inputFocusSpy).toHaveReceivedEventTimes(0);\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(inputFocusSpy).toHaveReceivedEventTimes(1);\n });\n\n it('should switch inner input type to \"password\" when visibility toggle is clicked for type=ssn', async function (): Promise<void> {\n const page = await setup({ html: '<q2-input type=\"ssn\" show-visibility-toggle />' });\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n const innerInput = await page.find('q2-input >>> .input-field');\n expect(await innerInput.getProperty('type')).toEqual('password');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n\n // clicking again should change it back to \"tel\"\n await dispatchEvent(page, ['q2-input', '[test-id=\"toggleVisibilityButton\"]'], 'click');\n expect(await innerInput.getProperty('type')).toEqual('text');\n expect(await innerInput.getAttribute('inputmode')).toEqual('numeric');\n });\n\n it('should match the input entered when the user types quickly', async () => {\n const page = await setup({ html: '<q2-input type=\"currency\" />' });\n\n const innerInput = await page.find('q2-input >>> [test-id=\"inputField\"]');\n await innerInput.type('12233445678', { delay: 5 });\n const innerInputValue = await innerInput.getProperty('value');\n\n expect(innerInputValue).toEqual('122,334,456.78');\n });\n\n // Number\n it('handles number type', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"number\" label=\"Number\" value=\"1\" ></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n expect(await innerInput.getProperty('type')).toEqual('number');\n await innerInput.press('ArrowUp');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('2');\n });\n\n it('handles number type with valid positive decimal number', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"number\" label=\"Number\" ></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n expect(await innerInput.getProperty('type')).toEqual('number');\n await innerInput.press('1');\n await innerInput.press('.');\n await innerInput.press('2');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('1.2');\n });\n\n it('handles number type with incomplete positive decimal number (ends with period)', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"number\" label=\"Number\" ></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n expect(await innerInput.getProperty('type')).toEqual('number');\n await innerInput.press('1');\n await innerInput.press('.');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('1');\n });\n\n it('handles number type with negative decimal number', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"number\" label=\"Number\" ></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n expect(await innerInput.getProperty('type')).toEqual('number');\n await innerInput.type('-1.2');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('-1.2');\n });\n\n it('handles number type with step', async function (): Promise<void> {\n const page = await setup({\n html: '<q2-input type=\"number\" label=\"Number\" value=\"10\" step=\"5\" ></q2-input>',\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n await page.waitForChanges();\n expect(await innerInput.getProperty('type')).toEqual('number');\n await innerInput.press('ArrowUp');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('15');\n\n await innerInput.press('ArrowDown');\n await innerInput.press('ArrowDown');\n await page.waitForChanges();\n expect(await innerInput.getProperty('value')).toEqual('5');\n });\n\n describe('Events', () => {\n let page: E2EPage;\n let innerInput: E2EElement;\n let input: E2EElement;\n beforeEach(async () => {\n page = await setup({ html: '<q2-input/>' });\n input = await page.find('q2-input');\n innerInput = await page.find('q2-input >>> .input-field');\n });\n\n describe('Standard events', () => {\n it('events all necessary events when printable keys are pressed', async () => {\n const keydownSpy = await input.spyOnEvent('keydown');\n const inputSpy = await input.spyOnEvent('input');\n const keyupSpy = await input.spyOnEvent('keyup');\n\n await innerInput.press('a');\n await page.waitForChanges();\n\n expect(keydownSpy).toHaveReceivedEventTimes(1);\n expect(keydownSpy).toHaveReceivedEventDetail(0);\n expect(inputSpy).toHaveReceivedEventTimes(1);\n expect(inputSpy).toHaveReceivedEventDetail({ value: 'a', formattedValue: 'a' });\n expect(keyupSpy).toHaveReceivedEventTimes(1);\n expect(keyupSpy).toHaveReceivedEventDetail(0);\n });\n\n it('events all necessary events when non-printable keys are pressed', async () => {\n const keydownSpy = await input.spyOnEvent('keydown');\n const inputSpy = await input.spyOnEvent('input');\n const keyupSpy = await input.spyOnEvent('keyup');\n\n await innerInput.press('Home');\n await page.waitForChanges();\n\n expect(keydownSpy).toHaveReceivedEventTimes(1);\n expect(keydownSpy).toHaveReceivedEventDetail(0);\n expect(inputSpy).toHaveReceivedEventTimes(0);\n expect(keyupSpy).toHaveReceivedEventTimes(1);\n expect(keyupSpy).toHaveReceivedEventDetail(0);\n });\n });\n });\n\n describe('Props', () => {\n describe('ariaExpanded', () => {\n it('uses \"true\" as value when provided', async () => {\n const page = await setup({\n html: `<q2-input aria-expanded=\"true\" value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-expanded', 'true');\n });\n\n it('uses \"false\" as value when provided', async () => {\n const page = await setup({\n html: `<q2-input aria-expanded=\"false\" value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-expanded', 'false');\n });\n\n it('is not added when it is not provided', async () => {\n const page = await setup({\n html: `<q2-input value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).not.toHaveAttribute('aria-expanded');\n });\n\n it('no value unless explicitly set', async () => {\n const page = await setup({\n html: `<q2-input aria-expanded value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-expanded', '');\n });\n });\n describe('ariaHasPopup', () => {\n it('uses \"true\" as value when provided', async () => {\n const page = await setup({\n html: `<q2-input aria-haspopup=\"true\" value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-haspopup', 'true');\n });\n\n it('uses \"false\" as value when provided', async () => {\n const page = await setup({\n html: `<q2-input aria-haspopup=\"false\" value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-haspopup', 'false');\n });\n\n it('is not added when it is not provided', async () => {\n const page = await setup({\n html: `<q2-input value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).not.toHaveAttribute('aria-haspopup');\n });\n\n it('translates to empty string if not passed a value', async () => {\n const page = await setup({\n html: `<q2-input aria-haspopup value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-haspopup', '');\n });\n\n const hasPopupValues = ['true', 'false', 'menu', 'listbox', 'tree', 'grid', 'dialog'];\n hasPopupValues.forEach(async value => {\n it(`sets aria-haspopup to \"${value}\" when passed value \"${value}\"`, async () => {\n const page = await setup({\n html: `<q2-input aria-haspopup='${value}' value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-haspopup', value);\n });\n });\n\n it('sets aria-haspopup to `null` when not provided a valid string', async () => {\n const page = await setup({\n html: `<q2-input aria-haspopup='foo' value=\"Tony\" />`,\n });\n const innerButton = await page.find('q2-input >>> [test-id=\"inputField\"]');\n expect(innerButton).toEqualAttribute('aria-haspopup', null);\n });\n });\n describe('clearable', () => {\n describe('when false (default)', () => {\n it('does not display the clear icon when not provided (default)', async () => {\n const page = await setup({ html: '<q2-input value=\"Tony\"/>' });\n const clearButton = await page.find('q2-input >>> [test-id=\"clearButton\"]');\n expect(clearButton).toBeFalsy();\n });\n\n it('starts observing width when added at runtime', async () => {\n const page = await setup({ html: '<q2-input value=\"Tony\" />' });\n await page.evaluate(() => {\n document.body.style.margin = '0';\n });\n await page.waitForChanges();\n\n const input = await page.find('q2-input');\n await input.setProperty('clearable', true);\n await page.waitForChanges();\n\n let clearButtonWidth = await getNestedElementStyle(\n page,\n ['q2-input', '[test-id=\"clearButton\"]'],\n 'width'\n );\n expect(clearButtonWidth).toBe('44px');\n\n await page.setViewport({ width: 189, height: 400 });\n await page.waitForChanges();\n\n clearButtonWidth = await getNestedElementStyle(\n page,\n ['q2-input', '[test-id=\"clearButton\"]'],\n 'width'\n );\n expect(clearButtonWidth).toBe('20px');\n });\n });\n\n describe('when true', () => {\n it('displays the clear button when there is a value', async () => {\n const page = await setup({ html: '<q2-input value=\"Tony\" clearable/>' });\n const clearButton = await page.find('q2-input >>> [test-id=\"clearButton\"]');\n expect(clearButton).toBeTruthy();\n });\n\n it('clears the value and emits events when the clear button is clicked', async () => {\n const page = await setup({ html: '<q2-input value=\"Tony\" clearable/>' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> input');\n const clearButton = await page.find('q2-input >>> [test-id=\"clearButton\"]');\n\n const inputSpy = await input.spyOnEvent('input');\n const changeSpy = await input.spyOnEvent('change');\n const clearSpy = await input.spyOnEvent('clear');\n\n expect(await innerInput.getProperty('value')).toEqual('Tony');\n expect(inputSpy).toHaveReceivedEventTimes(0);\n expect(changeSpy).toHaveReceivedEventTimes(0);\n expect(clearSpy).toHaveReceivedEventTimes(0);\n\n await clearButton.click();\n await page.waitForChanges();\n\n const eventDetail = { value: '', formattedValue: '' };\n expect(await innerInput.getProperty('value')).toEqual('');\n expect(inputSpy).toHaveReceivedEventDetail(eventDetail);\n expect(changeSpy).toHaveReceivedEventDetail(eventDetail);\n expect(clearSpy).toHaveReceivedEventTimes(1);\n });\n\n it('clear button is 44px when component is more than 190px wide', async () => {\n const page = await setup({ html: '<q2-input value=\"Tony\" clearable/>' });\n await page.setViewport({ width: 193, height: 400 });\n await page.evaluate(() => {\n document.body.style.margin = '0';\n });\n await page.waitForChanges();\n\n const clearButtonWidth = await getNestedElementStyle(\n page,\n ['q2-input', '[test-id=\"clearButton\"]'],\n 'width'\n );\n expect(clearButtonWidth).toBe('44px');\n });\n\n it('clear button is 20px when component is less than 190px wide', async () => {\n const page = await setup({ html: '<q2-input value=\"Tony\" clearable/>' });\n await page.setViewport({ width: 189, height: 400 });\n await page.evaluate(() => {\n document.body.style.margin = '0';\n });\n await page.waitForChanges();\n\n const clearButtonWidth = await getNestedElementStyle(\n page,\n ['q2-input', '[test-id=\"clearButton\"]'],\n 'width'\n );\n expect(clearButtonWidth).toBe('20px');\n });\n });\n });\n describe('autofocus', () => {\n describe('when autofocus is enabled', () => {\n it('focuses on input element on page load', async () => {\n const page = await setup({\n html: `<q2-input autofocus></q2-input>`,\n });\n\n const q2Input = await page.find('q2-input >>> input');\n expect(q2Input).toHaveAttribute('autofocus');\n expect(await getActiveElementTestId(page)).toBe('inputField');\n });\n });\n\n describe('when autofocus is disabled', () => {\n it('does not focus on input element on page load', async () => {\n const page = await setup({\n html: `<q2-input></q2-input>`,\n });\n\n const q2Input = await page.find('q2-input >>> input');\n expect(q2Input).not.toHaveAttribute('autofocus');\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n });\n\n describe('badgeValue', () => {\n describe('when not provided', () => {\n it('does not add the badge element', async () => {\n const page = await setup({ html: '<q2-input />' });\n const badge = await page.find('q2-input >>> q2-badge');\n expect(badge).toBeNull();\n });\n });\n\n describe('when provided', () => {\n it('adds badge element', async () => {\n const page = await setup({ html: '<q2-input badge-value=\"5\"/>' });\n const badge = await page.find('q2-input >>> q2-badge');\n expect(badge.textContent).toEqual('5');\n });\n });\n });\n\n describe('badgeTheme', () => {\n let page: E2EPage;\n let input: E2EElement;\n let badge: E2EElement;\n beforeEach(async () => {\n page = await setup({ html: '<q2-input badge-value=\"5\"/>' });\n input = await page.find('q2-input');\n badge = await page.find('q2-input >>> q2-badge');\n });\n\n describe('when not provided', () => {\n it('does not add the badge element', async () => {\n expect(badge).not.toHaveAttribute('theme');\n });\n });\n\n describe('when provided', () => {\n beforeEach(async () => {\n await input.setProperty('badgeTheme', 'primary');\n await page.waitForChanges();\n });\n\n it('adds badge element', async () => {\n expect(badge).toEqualAttribute('theme', 'primary');\n });\n });\n });\n\n describe('textHidden', () => {\n describe('when not provided', () => {\n it('is not automatically added', async () => {\n const page = await setup({ html: '<q2-input />' });\n const input = await page.find('q2-input');\n\n expect(await input).not.toHaveAttribute('text-hidden');\n });\n\n it('is automatically added when type=\"password\"', async () => {\n const page = await setup({ html: '<q2-input type=\"password\"/>' });\n const input = await page.find('q2-input');\n\n expect(await input).toHaveAttribute('text-hidden');\n });\n });\n\n describe('when provided', () => {\n it('persists after render', async () => {\n const page = await setup({ html: '<q2-input text-hidden/>' });\n const input = await page.find('q2-input');\n\n expect(await input).toHaveAttribute('text-hidden');\n });\n });\n });\n\n describe('hideLabel', () => {\n describe('when hideLabel is provided', () => {\n it('hides the label element', async () => {\n const page = await setup({ html: '<q2-input hide-label/>' });\n const input = await page.find('q2-input');\n\n expect(input).toHaveAttribute('hide-label');\n\n input.setProperty('label', 'My Label');\n await page.waitForChanges();\n\n expect(input).toHaveAttribute('hide-label');\n\n input.setAttribute('label', 'Your Label');\n await page.waitForChanges();\n\n expect(input).toHaveAttribute('hide-label');\n const inputStyle = await input.getComputedStyle();\n expect(parseInt(inputStyle.height)).toBe(46);\n });\n });\n describe('when hideLabel is NOT provided', () => {\n it('when optional is provided, it hides the label element', async () => {\n const page = await setup({ html: '<q2-input optional/>' });\n const input = await page.find('q2-input');\n const label = await page.find('q2-input >>> label');\n const hasSRClass = label.classList.contains('sr');\n\n expect(hasSRClass).toBeTruthy();\n const inputStyle = await input.getComputedStyle();\n expect(parseInt(inputStyle.height)).toBe(46);\n });\n\n it('when readonly is provided, it hides the label element', async () => {\n const page = await setup({ html: '<q2-input readonly/>' });\n const input = await page.find('q2-input');\n const label = await page.find('q2-input >>> label');\n const hasSRClass = label.classList.contains('sr');\n\n expect(hasSRClass).toBeTruthy();\n const inputStyle = await input.getComputedStyle();\n expect(parseInt(inputStyle.height)).toBe(46);\n });\n\n it('when label is provided, it shows the label element', async () => {\n const page = await setup({ html: '<q2-input label=\"My Label\"/>' });\n const input = await page.find('q2-input');\n const label = await page.find('q2-input >>> label');\n const hasSRClass = label.classList.contains('sr');\n\n expect(hasSRClass).toBeFalsy();\n const inputStyle = await input.getComputedStyle();\n expect(parseInt(inputStyle.height)).toBe(69);\n });\n\n it('when label is not provided, it hides the label element', async () => {\n const page = await setup({ html: '<q2-input />' });\n const input = await page.find('q2-input');\n const label = await page.find('q2-input >>> label');\n const hasSRClass = label.classList.contains('sr');\n\n expect(hasSRClass).toBeTruthy();\n const inputStyle = await input.getComputedStyle();\n expect(parseInt(inputStyle.height)).toBe(46);\n });\n });\n });\n\n describe('type', () => {\n describe('numeric', () => {\n describe('format-modifier', () => {\n const formatModifierTest = [\n {\n modifier: 'integer',\n value: '-1000.00',\n expected: '-1000',\n },\n {\n modifier: 'integer-delimited',\n value: '1000000.00',\n expected: '1,000,000',\n },\n {\n modifier: 'integer-positive',\n value: '-1000.00',\n expected: '1000',\n },\n {\n modifier: 'integer-delimited-positive',\n value: '-1000000.00',\n expected: '1,000,000',\n },\n {\n modifier: '2decimal',\n value: '-1000.000',\n expected: '-1000.00',\n },\n {\n modifier: '2decimal-delimited',\n value: '1000000.000',\n expected: '1,000,000.00',\n },\n {\n modifier: '2decimal-positive',\n value: '-1000.000',\n expected: '1000.00',\n },\n {\n modifier: '2decimal-delimited-positive',\n value: '-1000000.000',\n expected: '1,000,000.00',\n },\n {\n modifier: '3decimal',\n value: '1000.00',\n expected: '1000.000',\n },\n {\n modifier: '2dec',\n value: '-1000.000',\n expected: '-1,000.00',\n },\n {\n modifier: 'delimited',\n value: '1000000.00',\n expected: '1,000,000',\n },\n ];\n\n formatModifierTest.forEach(test => {\n const { modifier, value, expected } = test;\n\n it(`on load formats correctly when set to \"${modifier}\" and value set to \"${value}\"`, async function (): Promise<void> {\n const page = await setup({\n html: `<q2-input type=\"numeric\" format-modifier=\"${modifier}\" label=\"Number\" value=\"${value}\"></q2-input>`,\n });\n const innerInput = await page.find('q2-input >>> .input-field');\n const innerInputValue = await innerInput.getProperty('value');\n\n expect(innerInputValue).toEqual(expected);\n });\n it(`after load formats correctly when set to \"${modifier}\" and value set to \"${value}\"`, async function (): Promise<void> {\n const page = await setup({\n html: `<q2-input type=\"numeric\" format-modifier=\"${modifier}\" label=\"Number\"></q2-input>`,\n });\n const q2Input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> .input-field');\n q2Input.setProperty('value', value);\n await page.waitForChanges();\n const innerInputValue = await innerInput.getProperty('value');\n\n expect(innerInputValue).toEqual(expected);\n });\n });\n });\n });\n });\n });\n\n describe('Methods', () => {\n describe('setValue', () => {\n it('sets the value of the input', async () => {\n const page = await setup({ html: '<q2-input label=\"My input\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> input');\n const inputChangeSpy = await input.spyOnEvent('change');\n const inputInputSpy = await input.spyOnEvent('input');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBeNull();\n const newValue = 'The truth is, I am Iron Man.';\n\n await input.callMethod('setValue', newValue);\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(1);\n expect(inputInputSpy).toHaveReceivedEventDetail({\n formattedValue: newValue,\n value: newValue,\n });\n expect(await input.getProperty('value')).toBeUndefined();\n expect(await innerInput.getProperty('value')).toEqual(newValue);\n expect(await getActiveElementTestId(page)).toEqual('inputField');\n\n await innerInput.press('Tab');\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(1);\n expect(inputChangeSpy).toHaveReceivedEventDetail({\n formattedValue: newValue,\n value: newValue,\n });\n expect(await input.getProperty('value')).toEqual(newValue);\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n\n it('sets the masked value of the input', async () => {\n const page = await setup({ html: '<q2-input label=\"My input\" type=\"phone\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> input');\n const inputChangeSpy = await input.spyOnEvent('change');\n const inputInputSpy = await input.spyOnEvent('input');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBeNull();\n const newValue = '5558675309';\n const formattedValue = '(555) 867-5309';\n\n await input.callMethod('setValue', newValue);\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(1);\n expect(inputInputSpy).toHaveReceivedEventDetail({\n formattedValue,\n minFormattedLength: formattedValue.length,\n value: newValue,\n });\n expect(await input.getProperty('value')).toBeUndefined();\n expect(await innerInput.getProperty('value')).toEqual(formattedValue);\n expect(await getActiveElementTestId(page)).toEqual('inputField');\n\n await innerInput.press('Tab');\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(1);\n expect(inputChangeSpy).toHaveReceivedEventDetail({\n formattedValue,\n minFormattedLength: formattedValue.length,\n value: newValue,\n });\n expect(await input.getProperty('value')).toEqual(newValue);\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n\n describe('clearValue', () => {\n it('clears the value of the input', async () => {\n const page = await setup({ html: '<q2-input label=\"My input\" value=\"My value\" clearable />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> input');\n const inputChangeSpy = await input.spyOnEvent('change');\n const inputInputSpy = await input.spyOnEvent('input');\n const inputClearSpy = await input.spyOnEvent('clear');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(inputClearSpy).toHaveReceivedEventTimes(0);\n expect(await innerInput.getProperty('value')).toEqual('My value');\n expect(await getActiveElementTestId(page)).toBeNull();\n\n await input.callMethod('clearValue');\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(1);\n expect(inputInputSpy).toHaveReceivedEventTimes(1);\n expect(inputClearSpy).toHaveReceivedEventTimes(1);\n expect(inputChangeSpy).toHaveReceivedEventDetail({\n formattedValue: '',\n value: '',\n });\n expect(inputInputSpy).toHaveReceivedEventDetail({\n formattedValue: '',\n value: '',\n });\n expect(await input.getProperty('value')).toEqual('');\n expect(await innerInput.getProperty('value')).toEqual('');\n expect(await getActiveElementTestId(page)).toEqual('inputField');\n });\n\n it('does not clear the value of the input when not clearable', async () => {\n const page = await setup({ html: '<q2-input label=\"My input\" value=\"My value\" />' });\n const input = await page.find('q2-input');\n const innerInput = await page.find('q2-input >>> input');\n const inputChangeSpy = await input.spyOnEvent('change');\n const inputInputSpy = await input.spyOnEvent('input');\n const inputClearSpy = await input.spyOnEvent('clear');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(inputClearSpy).toHaveReceivedEventTimes(0);\n expect(await innerInput.getProperty('value')).toEqual('My value');\n expect(await getActiveElementTestId(page)).toBeNull();\n\n await input.callMethod('clearValue');\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(inputClearSpy).toHaveReceivedEventTimes(0);\n expect(await input.getProperty('value')).toEqual('My value');\n expect(await innerInput.getProperty('value')).toEqual('My value');\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n });\n\n describe('Slots', () => {\n describe('input-right', () => {\n it('does not have any nodes assigned to it when not provided', async () => {\n const page = await setup({\n html: `\n <q2-input></q2-input>\n `,\n });\n expect(\n await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-right]'])\n ).toBeUndefined();\n });\n it('has a node assigned to it when provided', async () => {\n const page = await setup({\n html: `\n <q2-input>\n <div slot=\"input-right\">Test</div>\n </q2-input>\n `,\n });\n expect(await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-right]'])).toEqual(1);\n });\n it('automatically updates when added at runtime', async () => {\n const page = await setup({\n html: `\n <q2-input></q2-input>\n `,\n });\n expect(\n await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-right]'])\n ).toBeUndefined();\n\n await page.$eval('q2-input', (element: HTMLElement) => {\n const slotDiv = document.createElement('div');\n slotDiv.slot = 'input-right';\n slotDiv.textContent = 'Test';\n element.appendChild(slotDiv);\n });\n await page.waitForChanges();\n\n expect(await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-right]'])).toEqual(1);\n\n await page.$eval('[slot=input-right]', (element: HTMLElement) => {\n element.remove();\n });\n await page.waitForChanges();\n\n expect(\n await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-right]'])\n ).toBeUndefined();\n });\n });\n\n describe('input-left', () => {\n it('does not have any nodes assigned to it when not provided', async () => {\n const page = await setup({\n html: `\n <q2-input></q2-input>\n `,\n });\n expect(\n await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-left]'])\n ).toBeUndefined();\n });\n it('has a node assigned to it when provided', async () => {\n const page = await setup({\n html: `\n <q2-input>\n <div slot=\"input-left\">Test</div>\n </q2-input>\n `,\n });\n expect(await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-left]'])).toEqual(1);\n });\n it('automatically updates when added at runtime', async () => {\n const page = await setup({\n html: `\n <q2-input></q2-input>\n `,\n });\n expect(\n await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-left]'])\n ).toBeUndefined();\n\n await page.$eval('q2-input', (element: HTMLElement) => {\n const slotDiv = document.createElement('div');\n slotDiv.slot = 'input-left';\n slotDiv.textContent = 'Test';\n element.appendChild(slotDiv);\n });\n await page.waitForChanges();\n\n expect(await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-left]'])).toEqual(1);\n\n await page.$eval('[slot=input-left]', (element: HTMLElement) => {\n element.remove();\n });\n await page.waitForChanges();\n\n expect(\n await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=input-left]'])\n ).toBeUndefined();\n });\n });\n describe('label', () => {\n it('does not have any nodes assigned to it when not provided', async () => {\n const page = await setup({\n html: `\n <q2-input></q2-input>\n `,\n });\n expect(await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=label]'])).toEqual(0);\n });\n it('has a node assigned to it when provided', async () => {\n const page = await setup({\n html: `\n <q2-input>\n <div slot=\"label\">Test</div>\n </q2-input>\n `,\n });\n expect(await getNestedAssignedElementLength(page, ['q2-input', 'slot[name=label]'])).toEqual(1);\n });\n });\n });\n\n describe('Deprecations', () => {\n it('handles deprecated `ariaLabel` prop', async () => {\n const label = 'My Label';\n const page = await setup({ html: `<q2-input aria-label=\"${label}\" />` });\n await page.waitForChanges();\n await testDeprecatedAriaLabel(await page.find('q2-input'), label);\n // aria label no longer exists on the <input> element, so this will be null\n expect(await page.find('q2-input >>> input')).toEqualAttribute('aria-label', null);\n });\n });\n\n describe('Regressions', () => {\n describe('TCT-2169', () => {\n it('Limits the width of long values when pseudo is true', async () => {\n const value =\n 'Cras a felis massa. Nullam eu neque arcu. Vivamus vestibulum ut tortor blandit convallis. Quisque congue dictum augue tempor luctus. Nam vulputate eros vitae felis efficitur commodo. Donec lobortis aliquam maximus.';\n const page = await setup({ html: `<q2-input value=\"${value}\" pseudo />` });\n\n const customDisplayContainer = await page.find('q2-input >>> .custom-display-container');\n const customDisplayContainerStyle = await customDisplayContainer.getComputedStyle();\n expect(parseInt(customDisplayContainerStyle.width)).toBeLessThan(775);\n\n const customDisplaySpan = await page.find('q2-input >>> slot[name=custom-display] span');\n const customDisplaySpanStyles = await customDisplaySpan.getComputedStyle();\n expect(parseInt(customDisplaySpanStyles.width)).toBeLessThan(775);\n });\n\n it('Limits the width of the value when pseudo is true', async () => {\n const value = 'Cras a felis massa.';\n const page = await setup({ html: `<q2-input value=\"${value}\" pseudo />` });\n\n const customDisplayContainer = await page.find('q2-input >>> .custom-display-container');\n const customDisplayContainerStyle = await customDisplayContainer.getComputedStyle();\n expect(parseInt(customDisplayContainerStyle.width)).toBeLessThan(125);\n\n const customDisplaySpan = await page.find('q2-input >>> slot[name=custom-display] span');\n const customDisplaySpanStyles = await customDisplaySpan.getComputedStyle();\n expect(parseInt(customDisplaySpanStyles.width)).toBeLessThan(125);\n });\n });\n });\n});\n"]}