q2-tecton-elements 1.52.1 → 1.52.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 (96) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +2 -13
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/q2-action-group.cjs.entry.js +38 -14
  5. package/dist/cjs/q2-action-group.cjs.entry.js.map +1 -1
  6. package/dist/cjs/q2-calendar.cjs.entry.js +18 -15
  7. package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
  8. package/dist/cjs/q2-dropdown.cjs.entry.js +1 -3
  9. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  10. package/dist/cjs/q2-pill.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
  12. package/dist/cjs/q2-select.cjs.entry.js +3 -4
  13. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  14. package/dist/cjs/q2-tag.cjs.entry.js +1 -2
  15. package/dist/cjs/q2-tag.cjs.entry.js.map +1 -1
  16. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  17. package/dist/collection/components/q2-action-group/q2-action-group.js +41 -14
  18. package/dist/collection/components/q2-action-group/q2-action-group.js.map +1 -1
  19. package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js +97 -65
  20. package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js.map +1 -1
  21. package/dist/collection/components/q2-calendar/q2-calendar.js +22 -17
  22. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  23. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js +0 -27
  24. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js.map +1 -1
  25. package/dist/collection/components/q2-dropdown/q2-dropdown.js +5 -9
  26. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  27. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +14 -59
  28. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
  29. package/dist/collection/components/q2-pill/q2-pill.js +5 -2
  30. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  31. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js +0 -49
  32. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -1
  33. package/dist/collection/components/q2-popover/q2-popover.js +3 -16
  34. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  35. package/dist/collection/components/q2-select/q2-select.js +3 -5
  36. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  37. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -1
  38. package/dist/collection/components/q2-tag/q2-tag.js +5 -4
  39. package/dist/collection/components/q2-tag/q2-tag.js.map +1 -1
  40. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +0 -49
  41. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -1
  42. package/dist/components/q2-action-group.js +40 -14
  43. package/dist/components/q2-action-group.js.map +1 -1
  44. package/dist/components/q2-calendar.js +18 -16
  45. package/dist/components/q2-calendar.js.map +1 -1
  46. package/dist/components/q2-dropdown.js +1 -4
  47. package/dist/components/q2-dropdown.js.map +1 -1
  48. package/dist/components/q2-pill.js +1 -1
  49. package/dist/components/q2-pill.js.map +1 -1
  50. package/dist/components/q2-popover2.js +3 -15
  51. package/dist/components/q2-popover2.js.map +1 -1
  52. package/dist/components/q2-select2.js +3 -5
  53. package/dist/components/q2-select2.js.map +1 -1
  54. package/dist/components/q2-tag.js +1 -3
  55. package/dist/components/q2-tag.js.map +1 -1
  56. package/dist/esm/click-elsewhere_2.entry.js +2 -13
  57. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  58. package/dist/esm/loader.js +1 -1
  59. package/dist/esm/q2-action-group.entry.js +38 -14
  60. package/dist/esm/q2-action-group.entry.js.map +1 -1
  61. package/dist/esm/q2-calendar.entry.js +18 -15
  62. package/dist/esm/q2-calendar.entry.js.map +1 -1
  63. package/dist/esm/q2-dropdown.entry.js +1 -3
  64. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  65. package/dist/esm/q2-pill.entry.js +1 -1
  66. package/dist/esm/q2-pill.entry.js.map +1 -1
  67. package/dist/esm/q2-select.entry.js +3 -4
  68. package/dist/esm/q2-select.entry.js.map +1 -1
  69. package/dist/esm/q2-tag.entry.js +1 -2
  70. package/dist/esm/q2-tag.entry.js.map +1 -1
  71. package/dist/esm/q2-tecton-elements.js +1 -1
  72. package/dist/q2-tecton-elements/click-elsewhere_2.entry.js +21 -33
  73. package/dist/q2-tecton-elements/click-elsewhere_2.entry.js.map +1 -1
  74. package/dist/q2-tecton-elements/q2-action-group.entry.js +58 -32
  75. package/dist/q2-tecton-elements/q2-action-group.entry.js.map +1 -1
  76. package/dist/q2-tecton-elements/q2-calendar.entry.js +259 -256
  77. package/dist/q2-tecton-elements/q2-calendar.entry.js.map +1 -1
  78. package/dist/q2-tecton-elements/q2-dropdown.entry.js +6 -8
  79. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  80. package/dist/q2-tecton-elements/q2-pill.entry.js +13 -13
  81. package/dist/q2-tecton-elements/q2-pill.entry.js.map +1 -1
  82. package/dist/q2-tecton-elements/q2-select.entry.js +6 -7
  83. package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
  84. package/dist/q2-tecton-elements/q2-tag.entry.js +12 -13
  85. package/dist/q2-tecton-elements/q2-tag.entry.js.map +1 -1
  86. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  87. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  88. package/dist/types/components/q2-action-group/q2-action-group.d.ts +4 -0
  89. package/dist/types/components/q2-calendar/q2-calendar.d.ts +10 -5
  90. package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +6 -2
  91. package/dist/types/components/q2-pill/q2-pill.d.ts +5 -1
  92. package/dist/types/components/q2-popover/q2-popover.d.ts +0 -1
  93. package/dist/types/components/q2-select/q2-select.d.ts +1 -1
  94. package/dist/types/components/q2-tag/q2-tag.d.ts +6 -2
  95. package/dist/types/components.d.ts +8 -0
  96. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"q2-select-test.e2e.js","sourceRoot":"","sources":["../../../../src/components/q2-select/test/q2-select-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EElement, E2EPage, EventSpy } from '@stencil/core/testing';\nimport { ActionSheetListCloseData } from 'q2-tecton-common/lib/utility/action-sheet';\nimport {\n setTestStrings,\n setup,\n dispatchEvent,\n getFocusedOptionValue,\n getActiveElementTestId,\n waitForTimeout,\n getListOfStyleCompilationIssues,\n evaluateA11y,\n} from '@/utils/helpers';\n\ndescribe('q2-select', () => {\n const isInvalidErrorString: string = 'tecton.element.select.invalid';\n let page: E2EPage;\n let changeSpy: EventSpy;\n let popover: E2EElement;\n let options: E2EElement[];\n let optionList: E2EElement;\n let selectedDisplaySlot: E2EElement;\n let inputSpy: EventSpy;\n let select: E2EElement;\n let input: E2EElement;\n let selectedOptionsRadio: E2EElement;\n let selectedOptionsRadioLabel: E2EElement;\n let allOptionsRadio: E2EElement;\n let allOptionsRadioLabel: E2EElement;\n\n const getMultiSelectHeaderHeight = async (page: E2EPage) => {\n return page.$eval('q2-select', el => {\n return el.shadowRoot\n .querySelector<HTMLElement>('q2-popover')\n ?.style.getPropertyValue('--comp-popover-top-container-height');\n });\n };\n const getFocusedValue = async (page: E2EPage) => {\n return page.$eval('body', () => document.activeElement.getAttribute('value'));\n };\n\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-select></q2-select>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-select')).toHaveLength(0);\n });\n\n describe('[A11y] guideline compliance', () => {\n it('Does not have accessibility violations', async () => {\n const page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n\n it('renders base state', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n\n const select = await page.find('q2-select');\n // the component renders\n expect(select.tagName).toEqual('Q2-SELECT');\n\n const selectInput = await page.find('q2-select >>> q2-input');\n const inputValue = await selectInput.getProperty('value');\n\n // selected option display set as input value\n expect(inputValue).toEqual('Option Text');\n\n const dropdownContainer = await page.find('q2-select >>> .q2-select-container');\n expect(dropdownContainer.classList.contains('dropdown-open')).toEqual(false);\n\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'click');\n\n // dropdown opens when clicking input\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('open')).toEqual(true);\n expect(await popover.getProperty('minHeight')).toEqual(132);\n\n const slotTag = await page.$eval('q2-select', element => {\n return (\n element.shadowRoot\n .querySelector<HTMLSlotElement>('q2-option-list slot')\n .assignedElements()[0] as HTMLOptionElement\n ).localName;\n });\n\n expect(slotTag).toEqual('q2-option');\n });\n\n it('correctly sets q2-input properties when searchable', async function (): Promise<void> {\n const page = await setup({\n html: `<q2-select value=\"option1\" label=\"Field Label\" disabled searchable optional placeholder=\"Select an option\">\n <q2-option value=\"option1\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n\n const select = await page.find('q2-select');\n select.setProperty('errors', ['1', '2']);\n\n await page.waitForChanges();\n\n const input = await page.find('q2-select >>> q2-input');\n\n const label = await input.getProperty('label');\n // label passed to input\n expect(label).toEqual('Field Label');\n\n const inputValue = await input.getProperty('value');\n // selected option display set as input value;\n expect(inputValue).toEqual('Option Text');\n\n const inputErrors = await input.getProperty('errors');\n // errors passed to input\n expect(inputErrors).toEqual(['1', '2']);\n\n const inputDisabled = await input.getProperty('disabled');\n // disabled passed to input\n expect(inputDisabled).toEqual(true);\n\n const ariaExpanded = await input.getProperty('ariaExpanded');\n // ariaExpanded to be false when dropdown is closed\n expect(ariaExpanded).toEqual('false');\n\n const optional = await input.getProperty('optional');\n // optional passed to input\n expect(optional).toEqual(true);\n\n const placeholder = await input.getProperty('placeholder');\n expect(placeholder).toEqual('Select an option');\n\n const ariaPopup = await input.getProperty('ariaHaspopup');\n // pop up is set to listbox\n expect(ariaPopup).toEqual('listbox');\n\n const _role = await input.getProperty('_role');\n expect(_role).toEqual('combobox');\n\n const _preventEntry = await input.getProperty('_preventEntry');\n expect(_preventEntry).toEqual(false);\n\n const hideMessages = await input.getProperty('hideMessages');\n // hideMessages should be true on the select input\n expect(hideMessages).toEqual(true);\n\n const pseudo = await input.getProperty('pseudo');\n // when searchable pseudo is false\n expect(pseudo).toEqual(undefined);\n });\n\n it('correctly mutates yieldedDOM', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n\n popover = await page.find('q2-select >>> q2-popover');\n options = await page.findAll('q2-option');\n const firstOption = options[0];\n const secondOption = options[1];\n\n // first option id is set\n expect(await firstOption.getAttribute('value')).toEqual('option-1');\n\n // first option not multiline\n expect(await firstOption.getProperty('multiline')).toBeUndefined();\n\n // first option should be selected\n expect(await firstOption.getProperty('selected')).toEqual(true);\n\n // first option should be selected\n expect(await firstOption.getProperty('hidden')).toBe(false);\n\n const select = await page.find('q2-select');\n select.setProperty('multilineOptions', true);\n\n await page.waitForChanges();\n\n // first option should now be multiline\n expect(await firstOption.getProperty('multiline')).toEqual(true);\n\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n\n // when opened by keyboard active options will be set\n expect(await firstOption.getProperty('active')).toEqual(true);\n expect(await secondOption.getProperty('active')).toEqual(false);\n\n await popover.press('ArrowDown');\n await page.waitForChanges();\n // moving with down arrow sets active element\n expect(await firstOption.getProperty('active')).toEqual(false);\n expect(await secondOption.getProperty('active')).toEqual(true);\n\n await popover.press('ArrowDown');\n await page.waitForChanges();\n // moving with down arrow when already at the bottom keeps active at the bottom\n expect(await firstOption.getProperty('active')).toEqual(false);\n expect(await secondOption.getProperty('active')).toEqual(true);\n });\n\n it('toggles drop down visibility', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-3\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n <button>Demo</button>\n `,\n });\n\n const selectContainer = await page.find('q2-select >>> .q2-select-container');\n options = await page.findAll('q2-option');\n popover = await page.find('q2-select >>> q2-popover');\n input = await page.find('q2-select >>> q2-input');\n\n // dropdown closed initially\n expect(await popover.getProperty('open')).toBe(false);\n\n await input.click();\n\n // dropdown should be open after click\n expect(await popover.getProperty('open')).toBe(true);\n\n await input.click();\n\n // dropdown close again after another click (toggle);\n expect(await popover.getProperty('open')).toBe(false);\n\n await input.click();\n\n // dropdown open again after another click...sick of this yet?\n expect(await popover.getProperty('open')).toBe(true);\n\n await options[0].click();\n\n // selecting an option closes the dropdown\n expect(await popover.getProperty('open')).toBe(false);\n\n await input.press('ArrowDown');\n await page.waitForChanges();\n // the dropdown should open on down arrow\n expect(await popover.getProperty('open')).toBe(true);\n\n await input.click();\n\n // dropdown closes again after another click\n expect(await popover.getProperty('open')).toBe(false);\n\n await input.press('ArrowUp');\n await page.waitForChanges();\n // the dropdown should open on up arrow\n expect(await popover.getProperty('open')).toBe(true);\n\n const select = await page.find('q2-select');\n select.setProperty('multiple', true);\n await page.waitForChanges();\n\n await input.press('ArrowUp');\n await page.waitForChanges();\n // opened again with up arrow\n expect(await popover.getProperty('open')).toBe(true);\n\n await input.press('Escape');\n await page.waitForChanges();\n // escape closes the dropdown when in keyboard mode\n expect(await popover.getProperty('open')).toBe(false);\n\n await input.press('ArrowUp');\n await input.press('Enter');\n await page.waitForChanges();\n // selecting or deselecting an option with enter in multiple does not close the dropdown\n expect(await popover.getProperty('open')).toBe(true);\n\n await options[0].click();\n\n // selecting or deselecting an option with click in multiple does not close the dropdown\n expect(await popover.getProperty('open')).toBe(true);\n\n await page.$eval('body', bodyTag => {\n bodyTag.dispatchEvent(new Event('mousedown', { bubbles: true }));\n (bodyTag as HTMLBodyElement).focus();\n });\n\n await page.focus('button');\n await page.waitForChanges();\n\n // clicking away from the input or dropdown closes dropdown\n expect(await popover.getProperty('open')).toBe(false);\n\n // opened again with up arrow\n await input.press('ArrowUp');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n\n // pressing tab key(loses focus) closes the dropdown\n await input.press('Tab');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(false);\n expect(selectContainer).not.toHaveClass('is-focused');\n });\n\n it('can override default onchange', async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-3\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n const select = await page.find('q2-select');\n changeSpy = await select.spyOnEvent('change');\n\n await page.$eval('q2-select', select => {\n (select as HTMLQ2SelectElement).onchange = function () {\n // do nothing so the value doesn't update\n };\n });\n\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'click');\n await dispatchEvent(page, 'q2-option:nth-child(1)', 'click', { bubbles: true });\n\n // option-1 returned in detail\n expect(changeSpy).toHaveReceivedEventDetail({ value: 'option-1' });\n\n // value not updated to option-1 on select because default handler was overridden with empty function\n expect(select.getAttribute('value')).toEqual(null);\n });\n\n it('localizes appropriate attribute strings', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-2\" >\n <q2-option value=\"option-1\" display=\"q2-option.label1\">Option Text 1</q2-option>\n <q2-option value=\"option-2\" display=\"q2-option.label2\">Option Text 2</q2-option>\n </q2-select>\n `,\n });\n\n await setTestStrings(page, {\n 'q2-select.label': 'Label Text',\n 'q2-select.ariaLabel': 'Aria-Label Text',\n 'q2-select.error': 'Error Text',\n 'q2-option.label1': 'Option 1 Text',\n 'q2-option.label2': 'Option 2 Text',\n });\n\n await page.waitForChanges();\n\n const select = await page.find('q2-select');\n\n select.setProperty('errors', ['q2-select.error']);\n select.setProperty('label', 'q2-select.label');\n await page.waitForChanges();\n\n input = await page.find('q2-select >>> q2-input');\n\n // label bound correctly\n expect(input).toEqualAttribute('label', 'Label Text');\n expect(input).not.toHaveAttribute('hide-label');\n\n select.setProperty('ariaLabel', 'q2-select.ariaLabel');\n await page.waitForChanges();\n\n // aria-label set when label is hidden\n expect(input).toEqualAttribute('label', 'Aria-Label Text');\n expect(input).toHaveAttribute('hide-label');\n\n // errors are bound correctly\n const errors = await input.getProperty('errors');\n expect(errors).toEqual(['Error Text']);\n\n // value text bound correctly\n expect(await input.getProperty('value')).toEqual('Option 2 Text');\n\n select.setProperty('label', undefined);\n select.setProperty('value', undefined);\n select.setProperty('multiple', true);\n select.setProperty('selectedOptions', ['option-1', 'option-2']);\n\n await page.waitForChanges();\n\n // multi select message reflects number of selected items\n expect(await input.getProperty('value')).toEqual('Option 1 Text');\n });\n\n describe('Slot content', () => {\n describe('renders custom display slot content', () => {\n it('when q2-select-display slot provided', async () => {\n page = await setup({\n html: `<q2-select value=\"option-1\">\n <div slot=\"q2-select-display\">Custom option 1 display text</div>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n\n const input = await page.find('q2-select >>> q2-input');\n const slotContainer = await page.find('q2-select >>> .custom-display-content');\n const slotData = await page.$eval('q2-select', element => {\n const nodes = element.shadowRoot\n .querySelector<HTMLSlotElement>('slot[name=\"q2-select-display\"]')\n .assignedElements();\n return {\n childCount: nodes.length,\n slot: nodes[0].getAttribute('slot'),\n text: nodes[0].textContent,\n };\n });\n\n expect(slotData.childCount).toEqual(1);\n expect(slotData.slot).toEqual('q2-select-display');\n expect(slotData.text).toEqual('Custom option 1 display text');\n expect(await input.getProperty('value')).toEqual('');\n expect(slotContainer).not.toHaveAttribute('hidden');\n\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('open')).toEqual(false);\n\n await dispatchEvent(page, ['q2-select', '.custom-display-content'], 'click');\n expect(await popover.getProperty('open')).toEqual(true);\n\n await dispatchEvent(page, ['q2-select', '.custom-display-content'], 'click');\n expect(await popover.getProperty('open')).toEqual(false);\n\n await page.$eval('q2-select', element => {\n const customContent = element.querySelector<HTMLSlotElement>('[slot=\"q2-select-display\"]');\n\n customContent && customContent.remove();\n });\n\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('Option 1');\n expect(slotContainer).toHaveAttribute('hidden');\n });\n });\n describe('renders popover slots', () => {\n it('when popover-top slot provided', async () => {\n page = await setup({\n html: `<q2-select>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n <div slot='popover-top'>Popover Slot Top</div>\n </q2-select>\n `,\n });\n const slotContainer = await page.find('q2-select >>> .popover-top-container');\n const slotData = await page.$eval('q2-select', element => {\n const nodes = element.shadowRoot\n .querySelector<HTMLSlotElement>('slot[name=\"popover-top\"]')\n .assignedElements();\n return {\n childCount: nodes.length,\n slot: nodes[0].getAttribute('slot'),\n text: nodes[0].textContent,\n };\n });\n expect(slotContainer).not.toHaveAttribute('hidden');\n expect(slotData.childCount).toBe(1);\n expect(slotData.slot).toBe('popover-top');\n expect(slotData.text).toBe('Popover Slot Top');\n\n await page.$eval('q2-select', element => {\n const customContent = element.querySelector<HTMLSlotElement>('[slot=\"popover-top\"]');\n\n customContent && customContent.remove();\n });\n\n await page.waitForChanges();\n expect(slotContainer).toHaveAttribute('hidden');\n });\n it('when popover-bottom slot provided', async () => {\n page = await setup({\n html: `<q2-select>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n <div slot='popover-bottom'>Popover Slot Bottom</div>\n </q2-select>\n `,\n });\n const topSlotContainer = await page.find('q2-select >>> .popover-top-container');\n const bottomSlotContainer = await page.find('q2-select >>> .popover-bottom-container');\n const slotData = await page.$eval('q2-select', element => {\n const nodes = element.shadowRoot\n .querySelector<HTMLSlotElement>('slot[name=\"popover-bottom\"]')\n .assignedElements();\n return {\n childCount: nodes.length,\n slot: nodes[0].getAttribute('slot'),\n text: nodes[0].textContent,\n };\n });\n expect(topSlotContainer).toHaveAttribute('hidden');\n expect(bottomSlotContainer).not.toHaveAttribute('hidden');\n expect(slotData.childCount).toBe(1);\n expect(slotData.slot).toBe('popover-bottom');\n expect(slotData.text).toBe('Popover Slot Bottom');\n\n await page.$eval('q2-select', element => {\n const customContent = element.querySelector<HTMLSlotElement>('[slot=\"popover-bottom\"]');\n\n customContent && customContent.remove();\n });\n\n await page.waitForChanges();\n expect(bottomSlotContainer).toHaveAttribute('hidden');\n });\n });\n });\n\n it('applies correct wrapper class', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n const clickElsewhere = await page.find('q2-select >>> click-elsewhere');\n input = await page.find('q2-select >>> q2-input');\n\n expect(clickElsewhere).not.toHaveClasses(['is-focused', 'is-searchable']);\n\n await input.focus();\n expect(clickElsewhere).toHaveClass('is-focused');\n\n const select = await page.find('q2-select');\n select.setProperty('searchable', true);\n await page.waitForChanges();\n expect(clickElsewhere).toHaveClass('is-searchable');\n });\n\n describe('when options are NOT provided', () => {\n it('zero is not rendered inside the click-elsewhere element (TCT-2433)', async () => {\n page = await setup({\n html: `<q2-select label=\"My Select\"></q2-select>`,\n });\n select = await page.find('q2-select');\n const clickElsewhere = await page.find('q2-select >>> click-elsewhere');\n expect(await select.getProperty('label')).toBe('My Select');\n expect(clickElsewhere.textContent.slice(-1)).not.toBe('0');\n });\n });\n\n describe('Events', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n options = await page.findAll('q2-option');\n popover = await page.find('q2-select >>> q2-popover');\n changeSpy = await select.spyOnEvent('change');\n inputSpy = await select.spyOnEvent('input');\n });\n\n describe('change', () => {\n it('dispatches with value when option is selected', async () => {\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n await options[1].click();\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({\n value: 'option-2',\n });\n });\n\n it('updates value when dispatched from element', async () => {\n expect(await select.getProperty('value')).toBeUndefined();\n select.triggerEvent('change', { detail: { value: 'option-2' } });\n await page.waitForChanges();\n expect(await select.getProperty('value')).toEqual('option-2');\n });\n\n describe('when multiple', () => {\n beforeEach(async () => {\n select.setProperty('multiple', true);\n await page.waitForChanges();\n });\n\n it('dispatches selectedOptions when option is selected', async () => {\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n await options[1].click();\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({\n selectedOptions: ['option-2'],\n });\n });\n\n it('updates selectedOptions when dispatched from element', async () => {\n expect(await select.getProperty('selectedOptions')).toEqual([]);\n select.triggerEvent('change', { detail: { selectedOptions: ['option-2'] } });\n await page.waitForChanges();\n expect(await select.getProperty('selectedOptions')).toEqual(['option-2']);\n });\n });\n\n describe('when searchable', () => {\n beforeEach(async () => {\n select.setProperty('searchable', true);\n await page.waitForChanges();\n });\n\n describe('when value is present', () => {\n beforeEach(async () => {\n select.setProperty('value', 'option-1');\n await page.waitForChanges();\n });\n\n it('dispatches with empty value on input', async () => {\n await input.press('a');\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({\n value: '',\n });\n });\n\n describe('when multiple', () => {\n beforeEach(async () => {\n select.setProperty('multiple', true);\n await page.waitForChanges();\n });\n\n it('dispatches with empty selectedOptions on input', async () => {\n await input.press('a');\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({\n selectedOptions: [],\n });\n });\n });\n });\n });\n });\n\n describe('input', () => {\n it('does not dispatch when searchable is not true', async () => {\n await input.type('option');\n await page.waitForChanges();\n expect(inputSpy).not.toHaveReceivedEvent();\n });\n\n describe('when searchable', () => {\n beforeEach(async () => {\n select.setProperty('searchable', true);\n await page.waitForChanges();\n });\n\n it('dispatches with query input is typed in', async () => {\n await input.type('option');\n await page.waitForChanges();\n expect(inputSpy).toHaveReceivedEventDetail({\n query: 'option',\n });\n });\n\n it('dispatches with empty query when value is changed', async () => {\n await input.type('option');\n await select.setProperty('value', 'option-1');\n await page.waitForChanges();\n expect(inputSpy).toHaveReceivedEventDetail({\n query: '',\n });\n });\n\n it('dispatches with empty query popover is closed', async () => {\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n await input.type('option');\n await input.press('Escape');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(false);\n expect(inputSpy).toHaveReceivedEventDetail({\n query: '',\n });\n });\n });\n });\n\n describe('focusout', () => {\n describe('when searchable', () => {\n it('does not clear selection when user clicks away', async () => {\n await select.setProperty('searchable', true);\n await page.waitForChanges();\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n await options[1].click();\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({\n value: 'option-2',\n });\n expect(await input.getProperty('value')).toEqual('Option 2');\n expect(await popover.getProperty('open')).toBe(false);\n await page.mouse.click(500, 500);\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual('Option 2');\n });\n });\n });\n\n describe('displayChanged', () => {\n describe('when option display prop provided', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n changeSpy = await select.spyOnEvent('displayChanged');\n });\n\n it('should receive displayChanged event when display prop changed in q2-option', async () => {\n const option = await page.find('q2-option[value=\"option-1\"]');\n option.setProperty('display', 'New Display');\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({ display: 'New Display', value: 'option-1' });\n });\n\n it('field should show new display value of selected option', async () => {\n select.setAttribute('value', 'option-2');\n await page.waitForChanges();\n const selectedOption = await page.find('q2-option[selected]');\n selectedOption.setProperty('display', 'Option Two');\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual('Option Two');\n });\n });\n\n describe('when option display prop NOT provided', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\">Option 1</q2-option>\n <q2-option value=\"option-2\">Option 2</q2-option>\n <q2-option value=\"option-3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n changeSpy = await select.spyOnEvent('displayChanged');\n });\n it('should receive displayChanged event when textContent changed', async () => {\n select.setAttribute('value', 'option-2');\n await page.waitForChanges();\n const selectedOption = await page.find('q2-option[selected]');\n selectedOption.textContent = 'Option Two';\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({ display: 'Option Two', value: 'option-2' });\n });\n\n it('field should show new display value of selected option', async () => {\n select.setAttribute('value', 'option-2');\n await page.waitForChanges();\n const selectedOption = await page.find('q2-option[selected]');\n selectedOption.textContent = 'Option Two';\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual('Option Two');\n });\n });\n });\n });\n\n describe('Standard', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select label=\"label text\">\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-3\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n popover = await page.find('q2-select >>> q2-popover');\n input = await page.find('q2-select >>> q2-input');\n });\n\n it('opens dropdown on click', async () => {\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(await getActiveElementTestId(page)).toBe('toggleDropdown');\n });\n\n it('scrollIntoView is called when option is activated', async () => {\n const firstOptionScrollStub = jest.fn();\n const secondOptionScrollStub = jest.fn();\n await page.exposeFunction('firstOptionScrollStub', firstOptionScrollStub);\n await page.exposeFunction('secondOptionScrollStub', secondOptionScrollStub);\n await page.$eval('q2-select', select => {\n const firstOption = select.querySelector('q2-option:nth-child(1)');\n const secondOption = select.querySelector('q2-option:nth-child(2)');\n\n firstOption.scrollIntoView = firstOptionScrollStub;\n secondOption.scrollIntoView = secondOptionScrollStub;\n });\n options = await page.findAll('q2-option');\n\n expect(firstOptionScrollStub).toHaveBeenCalledTimes(0);\n expect(secondOptionScrollStub).toHaveBeenCalledTimes(0);\n\n await select.press('ArrowDown');\n await page.waitForChanges();\n expect(firstOptionScrollStub).toHaveBeenCalledTimes(1);\n expect(secondOptionScrollStub).toHaveBeenCalledTimes(0);\n\n await options[0].press('ArrowDown');\n await page.waitForChanges();\n expect(firstOptionScrollStub).toHaveBeenCalledTimes(1);\n expect(secondOptionScrollStub).toHaveBeenCalledTimes(1);\n\n await options[1].press('ArrowUp');\n await page.waitForChanges();\n expect(firstOptionScrollStub).toHaveBeenCalledTimes(2);\n expect(secondOptionScrollStub).toHaveBeenCalledTimes(1);\n });\n\n it('input does not have disabled attribute', async () => {\n expect(input).not.toHaveAttribute('disabled');\n });\n\n it('opens popover on click', async () => {\n await select.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('opens popover on Space', async () => {\n await input.press(' ');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('opens popover on Enter', async () => {\n await input.press('Enter');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n });\n });\n\n describe('Props', () => {\n describe('hoist', () => {\n const runHoistSetup = async (\n action: string,\n hoistEnabled: boolean = false,\n defineShowActionSheet: boolean = false,\n isCancelled: boolean = false\n ) => {\n page = await setup({\n html: `\n <q2-select ${hoistEnabled ? 'hoist' : ''} label=\"My select\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n\n if (defineShowActionSheet) {\n await page.evaluate(isCancelled => {\n const returnValue: ActionSheetListCloseData = isCancelled\n ? {\n type: 'cancel',\n value: '',\n values: [],\n }\n : {\n value: '3',\n values: [{ display: 'Option 3', value: '3' }],\n type: 'confirm',\n };\n (this as Window).TectonElements.showActionSheet = async () => returnValue;\n }, isCancelled);\n }\n\n popover = await page.find('q2-select >>> q2-popover');\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n changeSpy = await select.spyOnEvent('change');\n\n expect(popover).not.toHaveAttribute('open');\n expect(await select.getProperty('selectedOptions')).toEqual([]);\n\n if (action === 'click') {\n await input.click();\n } else {\n await input.press(action);\n }\n await page.waitForChanges();\n };\n\n describe('when window.Tecton.useActionSheets is true', () => {\n it('defaults the hoist prop to true', async () => {\n page = await setup({ html: `` });\n await page.evaluate(() => {\n (this as Window).Tecton = {\n inMobileApp: false,\n useActionSheets: true,\n noStrings: false,\n platformDimensions: null,\n platformUrl: null,\n };\n });\n await page.setContent(`\n <q2-select label=\"My select\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-select>\n `);\n await page.waitForChanges();\n\n select = await page.find('q2-select');\n expect(await select.getProperty('hoist')).toEqual(true);\n });\n\n it('sets hoist to false when manually set to false', async () => {\n page = await setup({ html: `` });\n await page.evaluate(() => {\n (this as Window).Tecton = {\n inMobileApp: false,\n useActionSheets: true,\n noStrings: false,\n platformDimensions: null,\n platformUrl: null,\n };\n });\n await page.setContent(`\n <q2-select label=\"My select\" hoist=\"false\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-select>\n `);\n await page.waitForChanges();\n\n select = await page.find('q2-select');\n expect(await select.getProperty('hoist')).toEqual(false);\n });\n });\n\n describe('when false (default)', () => {\n it('opens popover on click', async () => {\n await runHoistSetup('click', false, true);\n\n expect(popover).toHaveAttribute('open');\n\n const option = await page.find('q2-option[value=\"3\"]');\n await option.click();\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n\n expect(await select.getProperty('value')).toEqual('3');\n });\n });\n\n describe('when true', () => {\n describe('when window.TectonElements.showActionSheet is not defined', () => {\n it('opens popover on click', async () => {\n await runHoistSetup('click', true, false);\n\n const option = await page.find('q2-option[value=\"3\"]');\n await option.click();\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n\n expect(await select.getProperty('value')).toEqual('3');\n expect(changeSpy).toHaveReceivedEventDetail({\n value: '3',\n });\n });\n });\n\n describe('when window.TectonElements.showActionSheet is defined', () => {\n ['click', 'ArrowDown', 'Space', 'Enter'].forEach(action => {\n it(`calls showActionSheet on ${action}`, async () => {\n await runHoistSetup(action, true, true);\n\n expect(await select.getProperty('value')).toEqual('3');\n expect(changeSpy).toHaveReceivedEventDetail({\n value: '3',\n });\n });\n });\n\n it(`calls showActionSheet on click and returns no data when cancelled`, async () => {\n await runHoistSetup('click', true, true, true);\n\n expect(await select.getProperty('value')).toEqual('');\n expect(changeSpy).toHaveReceivedEventDetail({\n value: '',\n });\n });\n });\n });\n });\n\n describe('value', () => {\n describe('when not provided', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n });\n\n it('selects no options and shows nothing in input', async () => {\n expect(await input.getProperty('value')).toEqual('');\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n });\n\n describe('when provided', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n });\n\n it('selects option and shows display attribute in input', async () => {\n expect(await input.getProperty('value')).toEqual('Option 1');\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(1);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 1');\n });\n\n it('updates selected option and input with new value', async () => {\n select.setProperty('value', 'option-2');\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('Option 2');\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(1);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 2');\n expect(selectedOptions[0]).toEqualAttribute('aria-selected', 'true');\n });\n\n it('selects no options and shows input with value if no option is found', async () => {\n select.setProperty('value', 'newValue');\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('newValue');\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n\n it('selects no options and shows input with empty string when set to undefined', async () => {\n select.setProperty('value', undefined);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('');\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n\n it('does nothing if selectedOptions is set', async () => {\n select.setProperty('selectedOptions', ['option-1', 'option-2']);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('Option 1');\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(1);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 1');\n expect(selectedOptions[0]).toEqualAttribute('aria-selected', 'true');\n });\n });\n });\n\n describe('selectedOptions', () => {\n describe('when multiple is false', () => {\n it('selects no options and shows nothing in input ', async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n optionList = await page.find('q2-select >>> q2-option-list');\n\n await select.setProperty('selectedOptions', ['option-2', 'option-3']);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('');\n expect(await input.getProperty('badgeValue')).toBeNull();\n expect(await optionList.getProperty('selectedOptions')).toEqual([]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n });\n\n describe('when not provided', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select multiple>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n });\n\n it('selects no options and shows nothing in input', async () => {\n expect(await input.getProperty('value')).toEqual('');\n expect(await input.getProperty('selectedOptions')).toBeUndefined();\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n });\n\n describe('when provided', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select multiple>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n optionList = await page.find('q2-select >>> q2-option-list');\n select.setProperty('selectedOptions', ['option-3']);\n await page.waitForChanges();\n });\n\n it('selects option and shows display attribute in input', async () => {\n expect(await input.getProperty('value')).toEqual('Option 3');\n expect(await input.getProperty('badgeValue')).toBeNull();\n expect(await optionList.getProperty('selectedOptions')).toEqual([{ value: 'option-3' }]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(1);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 3');\n });\n\n it('updates selected option and input with new value', async () => {\n select.setProperty('selectedOptions', ['option-2']);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('Option 2');\n expect(await input.getProperty('badgeValue')).toBeNull();\n expect(await optionList.getProperty('selectedOptions')).toEqual([{ value: 'option-2' }]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(1);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 2');\n });\n\n it('populates badge when multiple options are provided', async () => {\n select.setProperty('selectedOptions', ['option-1', 'option-3']);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('Option 1');\n expect(await input.getProperty('badgeValue')).toEqual('+1');\n expect(await optionList.getProperty('selectedOptions')).toEqual([\n { value: 'option-1' },\n { value: 'option-3' },\n ]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(2);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 1');\n expect(await selectedOptions[1].getProperty('display')).toEqual('Option 3');\n });\n\n it('selects no options and shows input with value if no options are found', async () => {\n select.setProperty('selectedOptions', ['newValue']);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('newValue');\n expect(await input.getProperty('badgeValue')).toBeNull();\n expect(await optionList.getProperty('selectedOptions')).toEqual([{ value: 'newValue' }]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n\n it('selects no options and shows input with empty string when set to undefined', async () => {\n select.setProperty('selectedOptions', undefined);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('');\n expect(await input.getProperty('badgeValue')).toBeNull();\n expect(await optionList.getProperty('selectedOptions')).toEqual([]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n\n it('changes nothing if value is set', async () => {\n select.setProperty('value', 'option-2');\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('Option 3');\n expect(await input.getProperty('badgeValue')).toBeNull();\n expect(await optionList.getProperty('selectedOptions')).toEqual([{ value: 'option-3' }]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(1);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 3');\n });\n });\n });\n\n describe('multilineOptions', () => {\n describe('when false (default)', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n });\n\n it('does not set multiline on the options on render', async () => {\n options = await page.findAll('q2-option');\n expect(options.every(async option => (await option.getProperty('multiline')) === false)).toBe(true);\n });\n\n it('sets multiline to true when updated after render', async () => {\n select = await page.find('q2-select');\n await select.setProperty('multilineOptions', true);\n await page.waitForChanges();\n options = await page.findAll('q2-option');\n expect(options.every(async option => (await option.getProperty('multiline')) === true)).toBe(true);\n });\n });\n\n describe('when true', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select multiline-options>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n });\n\n it('sets multiline on the options on render', async () => {\n options = await page.findAll('q2-option');\n expect(options.every(async option => (await option.getProperty('multiline')) === true)).toBe(true);\n });\n\n it('sets multiline to flse when updated after render', async () => {\n select = await page.find('q2-select');\n await select.setProperty('multilineOptions', true);\n await page.waitForChanges();\n options = await page.findAll('q2-option');\n expect(options.every(async option => (await option.getProperty('multiline')) === false)).toBe(true);\n });\n });\n });\n\n describe('listLabel', () => {\n describe('when undefined (default)', () => {\n it('sets a default value as the aria-label on the q2-option-list', async () => {\n page = await setup({\n html: `<q2-select></q2-select>`,\n });\n const optionList = await page.find('q2-select >>> q2-option-list');\n expect(await optionList.getProperty('label')).toEqual('tecton.element.select.listLabel');\n });\n });\n\n describe('when provided', () => {\n it('sets the provided value as the aria-label on the q2-option-list', async () => {\n page = await setup({\n html: `<q2-select list-label=\"Iron Man\"></q2-select>`,\n });\n const optionList = await page.find('q2-select >>> q2-option-list');\n expect(await optionList.getProperty('label')).toEqual('Iron Man');\n });\n });\n });\n\n describe('invalid', () => {\n describe('when false (default)', () => {\n it('has no error state', async () => {\n page = await setup({\n html: `<q2-select></q2-select>`,\n });\n const input = await page.find('q2-select >>> q2-input');\n const errors: string[] = await input.getProperty('errors');\n expect(errors).toEqual([]);\n });\n });\n\n describe('when true', () => {\n it('has an error state', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\" label=\"Field Label\" invalid>\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n await page.find('q2-select');\n const input = await page.find('q2-select >>> q2-input');\n expect(await input.getProperty('errors')).toEqual([isInvalidErrorString]);\n });\n });\n });\n\n describe('errors', () => {\n describe('when not provided (default)', () => {\n it('does not populate errors on q2-input', async () => {\n page = await setup({\n html: `<q2-select></q2-select>`,\n });\n const input = await page.find('q2-select >>> q2-input');\n\n expect(await input.getProperty('errors')).toEqual([]);\n });\n });\n\n describe('when provided', () => {\n it('takes precedence and sets an error state even if invalid is set', async () => {\n const errors: string[] = ['Error #1', 'Error #2'];\n page = await setup({\n html: `<q2-select invalid></q2-select>`,\n });\n const select = await page.find('q2-select');\n const input = await page.find('q2-select >>> q2-input');\n\n await select.setProperty('errors', errors);\n await page.waitForChanges();\n\n expect(await input.getProperty('errors')).toEqual(errors);\n\n await select.setProperty('errors', undefined);\n await page.waitForChanges();\n\n expect(await input.getProperty('errors')).toEqual([isInvalidErrorString]);\n });\n\n it('shows error list', async () => {\n const errors: string[] = ['Error #1', 'Error #2'];\n page = await setup({\n html: `<q2-select></q2-select>`,\n });\n const select = await page.find('q2-select');\n const input = await page.find('q2-select >>> q2-input');\n\n await select.setProperty('errors', errors);\n await page.waitForChanges();\n\n expect(await input.getProperty('errors')).toEqual(errors);\n\n await select.setProperty('errors', undefined);\n await page.waitForChanges();\n\n expect(await input.getProperty('errors')).toEqual([]);\n });\n });\n });\n\n describe('disabled', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select label=\"label text\">\n <q2-option value=\"1\" display=\"One\">One</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n popover = await page.find('q2-select >>> q2-popover');\n input = await page.find('q2-select >>> q2-input');\n });\n\n describe('when true', () => {\n beforeEach(async () => {\n await select.setProperty('disabled', true);\n await page.waitForChanges();\n });\n\n it('label text should include (read only) ', async () => {\n expect(input).toHaveAttribute('disabled');\n });\n\n it('does not open popover on click', async () => {\n await select.click();\n expect(await popover.getProperty('open')).toBe(false);\n });\n\n it('does not open popover on Space', async () => {\n await input.press(' ');\n expect(await popover.getProperty('open')).toBe(false);\n });\n\n it('does not open popover on Enter', async () => {\n await input.press('Enter');\n expect(await popover.getProperty('open')).toBe(false);\n });\n });\n });\n\n describe('clearable', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select label=\"label text\" clearable>\n <q2-option value=\"1\" display=\"One\">One</q2-option>\n <q2-option value=\"2\" display=\"Two\">Two</q2-option>\n <q2-option value=\"3\" display=\"Three\">Three</q2-option>\n <q2-option value=\"4\" display=\"Four\">Four</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n popover = await page.find('q2-select >>> q2-popover');\n input = await page.find('q2-select >>> q2-input');\n });\n\n describe('when true with single selection', () => {\n it('clear button should not be visible ', async () => {\n const clearButton = input.shadowRoot.querySelector('.btn-clear');\n expect(clearButton).toHaveClass('hidden');\n });\n\n it('clear button should be visible when an option selected ', async () => {\n await select.setProperty('value', '1');\n await page.waitForChanges();\n const clearButton = input.shadowRoot.querySelector('.btn-clear');\n expect(clearButton).not.toHaveClass('hidden');\n });\n });\n\n describe('when true with multiple selection enabled', () => {\n it('clear button should be visible when an option selected ', async () => {\n await select.setProperty('multiple', '');\n await select.setProperty('selectedOptions', ['1', '3']);\n await page.waitForChanges();\n\n const clickClearButton = async (page: E2EPage) => {\n return page.$eval('q2-select', el => {\n return (\n el.shadowRoot\n .querySelector('q2-input')\n .shadowRoot.querySelector('.btn-clear') as HTMLElement\n ).click();\n });\n };\n expect(await select.getProperty('selectedOptions')).toStrictEqual(['1', '3']);\n await clickClearButton(page);\n expect(await select.getProperty('selectedOptions')).toStrictEqual([]);\n });\n });\n });\n\n describe('readonly', () => {\n const readonlyText = '(read only)';\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select label=\"label text\">\n <q2-option value=\"1\" display=\"One\">One</q2-option>\n </q2-select>\n `,\n });\n await setTestStrings(page, {\n 'tecton.element.input.readonly': readonlyText,\n });\n select = await page.find('q2-select');\n popover = await page.find('q2-select >>> q2-popover');\n input = await page.find('q2-select >>> q2-input');\n });\n\n describe('when true', () => {\n beforeEach(async () => {\n await select.setProperty('readonly', true);\n await page.waitForChanges();\n });\n\n it('label text should include (read only) ', async () => {\n const label = await input.shadowRoot.querySelector('label');\n expect(label.innerText).toEqual(`label text${readonlyText}`);\n expect(input).toHaveAttribute('readonly');\n });\n\n it('does not open popover on click', async () => {\n await select.click();\n expect(await popover.getProperty('open')).toBe(false);\n });\n\n it('does not open popover on Space', async () => {\n await input.press(' ');\n expect(await popover.getProperty('open')).toBe(false);\n });\n\n it('does not open popover on Enter', async () => {\n await input.press('Enter');\n expect(await popover.getProperty('open')).toBe(false);\n });\n });\n });\n\n describe('searchable', () => {\n describe('when true', () => {\n let status: E2EElement;\n let visibleOptions: E2EElement[];\n\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select searchable>\n <q2-option value=\"1\" display=\"One\">One</q2-option>\n <q2-option value=\"2\" display=\"Two\">Two</q2-option>\n <q2-option value=\"3\" display=\"Three\">Three</q2-option>\n </q2-select>\n `,\n });\n await setTestStrings(page, {\n 'tecton.element.select.searchable.results': '{0} Results',\n 'tecton.element.select.allOptions': 'All Options',\n });\n status = await page.find('q2-select >>> [role=status]');\n expect(status.textContent).toEqual('');\n\n visibleOptions = await page.findAll('q2-option:not([hidden])');\n expect(visibleOptions).toHaveLength(3);\n });\n\n it('can return a single result', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', {\n detail: { value: 'one' },\n });\n\n visibleOptions = await page.findAll('q2-option:not([hidden])');\n expect(visibleOptions).toHaveLength(1);\n\n await page.waitForTimeout(1000);\n status = await page.find('q2-select >>> [role=status]');\n expect(status.textContent).toEqual('1 Results');\n });\n\n it('can return multiple results', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', {\n detail: { value: 'o' },\n });\n\n visibleOptions = await page.findAll('q2-option:not([hidden])');\n expect(visibleOptions).toHaveLength(2);\n\n await page.waitForTimeout(1000);\n status = await page.find('q2-select >>> [role=status]');\n expect(status.textContent).toEqual('2 Results');\n });\n\n it('can return zero results', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', {\n detail: { value: 'abc' },\n });\n await page.waitForChanges();\n visibleOptions = await page.findAll('q2-option:not([hidden])');\n expect(visibleOptions).toHaveLength(0);\n\n await page.waitForTimeout(1000);\n status = await page.find('q2-select >>> [role=status]');\n expect(status.textContent).toEqual('0 Results');\n });\n\n it('can return all results', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', {\n detail: { value: '' },\n });\n\n visibleOptions = await page.findAll('q2-option:not([hidden])');\n expect(visibleOptions).toHaveLength(3);\n\n await page.waitForTimeout(1000);\n status = await page.find('q2-select >>> [role=status]');\n expect(status.textContent).toEqual('All Options');\n });\n });\n });\n\n describe('multiple', () => {\n describe('when false (default)', () => {\n describe('when the dropdown is opened', () => {\n it('does not set the height of the multi-select header as a CSS variable', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n input = await page.find('q2-select >>> q2-input');\n\n expect(await getMultiSelectHeaderHeight(page)).toEqual('');\n await input.click();\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('open')).toBe(true);\n expect(await getMultiSelectHeaderHeight(page)).toEqual('');\n });\n });\n });\n\n describe('when true', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select multiple>\n <q2-option value=\"option-1\" display=\"Option 1 Text\">Option 1 Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2 Text\">Option 2 Text</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3 Text\">Option 3 Text</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n });\n\n describe('when the dropdown is opened', () => {\n it('sets the height of the multi-select header as a CSS variable', async () => {\n expect(await getMultiSelectHeaderHeight(page)).toEqual('');\n await input.click();\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('open')).toBe(true);\n expect(parseInt(await getMultiSelectHeaderHeight(page))).toBeGreaterThan(20);\n });\n });\n\n describe('when no value is provided', () => {\n it('defaults to an empty string', async () => {\n expect(await input.getProperty('value')).toEqual('');\n expect(input).not.toHaveAttribute('badge-value');\n });\n\n describe('when dropdown is open', () => {\n beforeEach(async () => {\n await input.click();\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('disables the selected options button', async () => {\n selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');\n expect(selectedOptionsRadio).toHaveAttribute('disabled');\n });\n });\n });\n\n describe('when one value is provided', () => {\n beforeEach(async () => {\n select.setProperty('selectedOptions', ['option-1']);\n await page.waitForChanges();\n });\n\n it('shows the raw value if an option is not found which matches it', async () => {\n select.setProperty('selectedOptions', ['missing_value']);\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual('missing_value');\n expect(input).not.toHaveAttribute('badge-value');\n });\n\n it('shows the display property of the selected option', async () => {\n expect(await input.getProperty('value')).toEqual('Option 1 Text');\n expect(input).not.toHaveAttribute('badge-value');\n });\n\n describe('when popover is open', () => {\n beforeEach(async () => {\n popover = await page.find('q2-select >>> q2-popover');\n await input.focus();\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('enables the selectedOptionsButton', async () => {\n selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');\n expect(selectedOptionsRadio).not.toHaveAttribute('disabled');\n });\n\n it('does not show the number of selected values in the badge', async () => {\n expect(input).not.toHaveAttribute('badge-value');\n });\n\n describe('when selected options view is active', () => {\n beforeEach(async () => {\n allOptionsRadio = await page.find('q2-select >>> [test-id=allOptionsButton]');\n selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');\n selectedOptionsRadioLabel = await page.find(\n 'q2-select >>> [test-id=selectedOptionsButton] + label'\n );\n expect(await allOptionsRadio.getProperty('checked')).toEqual(true);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(false);\n await selectedOptionsRadioLabel.click();\n await page.waitForChanges();\n expect(await allOptionsRadio.getProperty('checked')).toEqual(false);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n const visibleOptions = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(visibleOptions).toHaveLength(1);\n });\n\n it('returns to all options view when selected option is deselected', async () => {\n const selectedOption = await page.find('q2-option:not([_multiselecthidden])');\n await selectedOption.click();\n await page.waitForChanges();\n expect(await allOptionsRadio.getProperty('checked')).toEqual(true);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(false);\n const visibleOptions = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(visibleOptions).toHaveLength(3);\n });\n });\n });\n });\n\n describe('when multiple values are provided', () => {\n beforeEach(async () => {\n select.setProperty('selectedOptions', ['option-2', 'option-1']);\n await page.waitForChanges();\n });\n\n it('shows the display property of the first selected option and a badge for the remainder', async () => {\n expect(await input.getProperty('value')).toEqual('Option 2 Text');\n expect(input).toEqualAttribute('badge-value', '+1');\n });\n\n it('does not add a theme to the badge', async () => {\n expect(input).not.toHaveAttribute('badge-theme');\n });\n\n describe('when focused', () => {\n beforeEach(async () => {\n await input.focus();\n await page.waitForChanges();\n });\n\n it('marks the badge with a primary theme', async () => {\n expect(input).toEqualAttribute('badge-theme', 'primary');\n });\n });\n\n describe('when dropdown is open', () => {\n beforeEach(async () => {\n expect(await getMultiSelectHeaderHeight(page)).toEqual('');\n popover = await page.find('q2-select >>> q2-popover');\n await input.focus();\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('shows the display property of the first selected option and a badge for the remainder', async () => {\n expect(input).toEqualAttribute('badge-value', '+1');\n });\n\n describe('when selected options view is active', () => {\n beforeEach(async () => {\n allOptionsRadio = await page.find('q2-select >>> [test-id=allOptionsButton]');\n selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');\n selectedOptionsRadioLabel = await page.find(\n 'q2-select >>> [test-id=selectedOptionsButton] + label'\n );\n expect(await allOptionsRadio.getProperty('checked')).toEqual(true);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(false);\n await selectedOptionsRadioLabel.click();\n await page.waitForChanges();\n expect(await allOptionsRadio.getProperty('checked')).toEqual(false);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n });\n\n it('focuses next sibling when first option is de-selected', async () => {\n let selectedOptions = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(selectedOptions).toHaveLength(2);\n await selectedOptions[0].click();\n await page.waitForChanges();\n expect(selectedOptions[0]).toHaveAttribute('_multiselecthidden');\n expect(await getFocusedOptionValue(page)).toContain('option-2');\n selectedOptions = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(selectedOptions).toHaveLength(1);\n expect(await allOptionsRadio.getProperty('checked')).toEqual(false);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n });\n\n it('focuses previous sibling when second option is de-selected', async () => {\n let selectedOptions = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(selectedOptions).toHaveLength(2);\n expect(await select.getProperty('selectedOptions')).toEqual(['option-2', 'option-1']);\n await selectedOptions[1].click();\n await page.waitForChanges();\n expect(await select.getProperty('selectedOptions')).toEqual(['option-1']);\n selectedOptions = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(selectedOptions).toHaveLength(1);\n expect(await getFocusedOptionValue(page)).toEqual('option-1');\n expect(await allOptionsRadio.getProperty('checked')).toEqual(false);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n });\n });\n });\n });\n\n it('allows toggling of selected options', async () => {\n popover = await page.find('q2-select >>> q2-popover');\n selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');\n selectedOptionsRadioLabel = await page.find(\n 'q2-select >>> [test-id=selectedOptionsButton] + label'\n );\n\n expect(await selectedOptionsRadio.getProperty('disabled')).toBe(true);\n\n await select.setProperty('selectedOptions', ['option-1']);\n await page.waitForChanges();\n\n expect(await selectedOptionsRadio.getProperty('disabled')).toBe(false);\n\n options = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(options).toHaveLength(3);\n\n await input.click();\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(true);\n\n await selectedOptionsRadioLabel.click();\n await page.waitForChanges();\n\n options = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(options).toHaveLength(1);\n expect(await options[0].getProperty('value')).toEqual('option-1');\n });\n });\n });\n\n describe('popoverMode', () => {\n it('does not set any mode on the popover (default)', async () => {\n const page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"1\" display=\"One\">One</q2-option>\n </q2-select>\n `,\n });\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('mode')).toBeNull();\n });\n\n it('sets the value of popoverMode as the mode on the popover', async () => {\n const page = await setup({\n html: `\n <q2-select popover-mode=\"legacy\">\n <q2-option value=\"1\" display=\"One\">One</q2-option>\n </q2-select>\n `,\n });\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('mode')).toEqual('legacy');\n });\n });\n\n describe('popoverMaxHeight', () => {\n it('when provided, passes the value to q2-popover', async () => {\n page = await setup({\n html: `\n <q2-select popover-max-height=\"600\">\n <q2-option value=\"option-1\" display=\"Option 1 Text\">Option 1 Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2 Text\">Option 2 Text</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3 Text\">Option 3 Text</q2-option>\n </q2-select>\n `,\n });\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('maxHeight')).toEqual(600);\n });\n });\n });\n\n describe('robust content', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select multiline-options>\n ${[1, 2, 3, 4, 5].map(\n item => `\n <q2-option value=\"${item}\" multiline>\n <q2-card avatar-icon=\"document\" title=\"Option ${item}\">\n <dl>\n <dt>Last updated</dt>\n <dd>Jan 5, 2022</dd>\n <dt hide-on-select>Created at</dt>\n <dd hide-on-select>Jan 5, 2022</dd>\n </dl>\n </q2-card>\n </q2-option>\n `\n )}\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n selectedDisplaySlot = await page.find(\"[slot='_selected-display']\");\n });\n\n it('does not populate the input by default', async () => {\n expect(selectedDisplaySlot).toBe(null);\n });\n\n it('shows selected option in _selected-display slot', async () => {\n select.setProperty('value', '2');\n await page.waitForChanges();\n\n expect(input).not.toHaveAttribute('badge-value');\n\n selectedDisplaySlot = await page.find(\"div[slot='_selected-display']\");\n expect(selectedDisplaySlot).toBeTruthy();\n\n const card = await page.find('div[slot=\"_selected-display\"] q2-card');\n expect(card).toEqualAttribute('title', 'Option 2');\n });\n\n it('removes hide-on-select elements when displayed in _selected-display slot', async () => {\n select.setProperty('value', '2');\n await page.waitForChanges();\n\n expect(input).not.toHaveAttribute('badge-value');\n\n const visibleRow = await page.find('div[slot=\"_selected-display\"] q2-card dt:not([hide-on-select])');\n const hiddenRow = await page.find('div[slot=\"_selected-display\"] q2-card dt[hide-on-select]');\n expect(visibleRow).toBeTruthy();\n expect(hiddenRow).toBeNull();\n });\n\n describe('when searchable', () => {\n beforeEach(async () => {\n select.setProperty('searchable', true);\n await page.waitForChanges();\n });\n\n it('hides the content on focus', async () => {\n select.setProperty('value', '2');\n await page.waitForChanges();\n\n selectedDisplaySlot = await page.find(\"q2-select >>> [slot='custom-display']\");\n expect(selectedDisplaySlot).toBeTruthy();\n\n expect(await input.getProperty('value')).toEqual('2');\n await input.focus();\n\n selectedDisplaySlot = await page.find(\"q2-select >>> [slot='custom-display']\");\n expect(selectedDisplaySlot).toBeNull();\n\n expect(await input.getProperty('value')).toEqual('');\n });\n });\n\n describe('when multiple', () => {\n beforeEach(async () => {\n select.setProperty('multiple', true);\n await page.waitForChanges();\n });\n\n it('shows first selected option in _selected-display slot and adds badge for remainder', async () => {\n select.setProperty('selectedOptions', ['3', '4', '5']);\n await page.waitForChanges();\n\n expect(input).toEqualAttribute('badge-value', '+2');\n\n selectedDisplaySlot = await page.find(\"div[slot='_selected-display']\");\n expect(selectedDisplaySlot).toBeTruthy();\n\n const card = await page.find('div[slot=\"_selected-display\"] q2-card');\n expect(card).toEqualAttribute('title', 'Option 3');\n });\n });\n\n describe('when display is provided on selected option', () => {\n it('renders the display instead of the robust content', async () => {\n const option = await page.find('q2-option[value=\"2\"]');\n option.setProperty('display', 'My Best Option');\n await page.waitForChanges();\n\n select.setProperty('value', '2');\n await page.waitForChanges();\n\n expect(input).not.toHaveAttribute('badge-value');\n\n selectedDisplaySlot = await page.find(\"div[slot='_selected-display']\");\n expect(selectedDisplaySlot).toBeNull();\n\n expect(await input.getProperty('value')).toEqual('My Best Option');\n });\n });\n\n it('emits change event when robust content is clicked', async () => {\n changeSpy = await select.spyOnEvent('change');\n popover = await page.find('q2-select >>> q2-popover');\n\n expect(await popover.getProperty('open')).toBe(false);\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'click');\n expect(await popover.getProperty('open')).toBe(true);\n\n await dispatchEvent(page, 'q2-option[value=\"2\"]', 'click', { bubbles: true });\n\n expect(changeSpy).toHaveReceivedEventDetail({ value: '2' });\n expect(await select.getProperty('value')).toEqual('2');\n expect(await popover.getProperty('open')).toBe(false);\n });\n });\n\n describe('Methods', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select label=\"My select\">\n ${[1, 2, 3, 4, 5].map(\n item => `\n <q2-option value=\"${item}\">\n Option ${item}\n </q2-option>\n `\n )}\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n popover = await page.find('q2-select >>> q2-popover');\n input = await page.find('q2-select >>> q2-input');\n });\n\n describe('openPopover', () => {\n it('opens the popover', async () => {\n const innerInputClickSpy = await input.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBe(false);\n\n await select.callMethod('openPopover');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(true);\n expect(innerInputClickSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toEqual('toggleDropdown');\n });\n });\n\n describe('closePopover', () => {\n it('closes the popover', async () => {\n await input.click();\n await page.waitForChanges();\n\n const innerInputClickSpy = await input.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBe(true);\n\n await select.callMethod('closePopover');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(false);\n expect(innerInputClickSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toEqual('toggleDropdown');\n });\n });\n\n describe('setValue', () => {\n it('sets the value on the select', async () => {\n const inputChangeSpy = await select.spyOnEvent('change');\n const inputInputSpy = await select.spyOnEvent('input');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBeNull();\n const newValue = '3';\n const newDisplay = 'Option 3';\n\n await select.callMethod('setValue', newValue);\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(1);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(inputChangeSpy).toHaveReceivedEventDetail({\n value: newValue,\n });\n expect(await select.getProperty('value')).toEqual(newValue);\n expect(await input.getProperty('value')).toEqual(newDisplay);\n expect(await getActiveElementTestId(page)).toEqual('toggleDropdown');\n\n await input.press('Tab');\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n\n describe('when multiple is true', () => {\n it('sets the values on the select', async () => {\n await select.setProperty('multiple', true);\n await page.waitForChanges();\n\n const inputChangeSpy = await select.spyOnEvent('change');\n const inputInputSpy = await select.spyOnEvent('input');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBeNull();\n const newValues = ['2', '3', '4'];\n const newDisplays = ['Option 2', 'Option 3', 'Option 4'];\n\n await select.callMethod('setValue', newValues);\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(3);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(inputChangeSpy).toHaveReceivedEventDetail({\n selectedOptions: newValues,\n });\n expect(await select.getProperty('selectedOptions')).toEqual(newValues);\n expect(await input.getProperty('value')).toEqual(newDisplays[0]);\n expect(await getActiveElementTestId(page)).toEqual('toggleDropdown');\n\n await input.press('Tab');\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(3);\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n });\n\n describe('searchOptions', () => {\n it('filters the list of options based on the value', async () => {\n await select.setProperty('searchable', true);\n await page.waitForChanges();\n\n const inputChangeSpy = await select.spyOnEvent('change');\n const inputInputSpy = await select.spyOnEvent('input');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBeNull();\n const query = 'Option 3';\n\n expect(await popover.getProperty('open')).toBe(false);\n\n await select.callMethod('searchOptions', query);\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(true);\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(1);\n expect(inputInputSpy).toHaveReceivedEventDetail({\n query,\n });\n expect(await select.getProperty('value')).toBeUndefined();\n expect(await input.getProperty('value')).toEqual(query);\n expect(await getActiveElementTestId(page)).toEqual('toggleDropdown');\n\n const allOptions = await page.findAll('q2-option');\n expect(allOptions[0]).toHaveAttribute('hidden');\n expect(allOptions[1]).toHaveAttribute('hidden');\n expect(allOptions[2]).not.toHaveAttribute('hidden');\n expect(allOptions[3]).toHaveAttribute('hidden');\n expect(allOptions[4]).toHaveAttribute('hidden');\n\n await input.press('Tab');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(false);\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n });\n\n describe('Updating option list', () => {\n describe('when multiple is false', () => {\n it('does not modify the value when the selected option is removed', async () => {\n page = await setup({\n html: `\n <q2-select label=\"States\" value=\"AK\">\n <q2-option value=\"AL\" display=\"Alabama\">Alabama</q2-option>\n <q2-option value=\"AZ\" display=\"Arizona\">Arizona</q2-option>\n <q2-option value=\"AR\" display=\"Arkansas\">Arkansas</q2-option>\n <q2-option value=\"AK\" display=\"Alaska\" selected>Alaska</q2-option>\n </q2-select>\n `,\n });\n\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n\n const alaskaSelector = 'q2-option[value=\"AK\"]';\n let option = await page.find(alaskaSelector);\n expect(option).toHaveAttribute('selected');\n expect(await select.getProperty('value')).toEqual('AK');\n expect(await input.getProperty('value')).toEqual('Alaska');\n\n await page.$eval(alaskaSelector, element => element.remove());\n await page.waitForChanges();\n\n option = await page.find(alaskaSelector);\n expect(option).toBeNull();\n expect(await select.getProperty('value')).toEqual('AK');\n expect(await input.getProperty('value')).toEqual('Alaska');\n });\n\n it('marks a newly added option as selected if it matches the value', async () => {\n page = await setup({\n html: `\n <q2-select label=\"States\" value=\"CA\">\n <q2-option value=\"AL\" display=\"Alabama\">Alabama</q2-option>\n <q2-option value=\"AZ\" display=\"Arizona\">Arizona</q2-option>\n <q2-option value=\"AR\" display=\"Arkansas\">Arkansas</q2-option>\n <q2-option value=\"AK\" display=\"Alaska\" selected>Alaska</q2-option>\n </q2-select>\n `,\n });\n await page.waitForChanges();\n\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n\n await page.waitForChanges();\n expect(await select.getProperty('value')).toEqual('CA');\n expect(await input.getProperty('value')).toEqual('CA');\n\n await page.evaluate(() => {\n const option = document.createElement('q2-option');\n option.value = 'CA';\n option.display = 'California';\n option.textContent = 'California';\n return document.querySelector('q2-select').appendChild(option);\n });\n await page.waitForChanges();\n\n const californiaSelector = 'q2-option[value=\"CA\"]';\n const option = await page.find(californiaSelector);\n expect(option).toHaveAttribute('selected');\n expect(await select.getProperty('value')).toEqual('CA');\n expect(await input.getProperty('value')).toEqual('CA');\n });\n });\n\n describe('when multiple is true', () => {\n it('does not modify selectedOptions when a selected option is removed', async () => {\n page = await setup({\n html: `\n <q2-select label=\"States\" multiple>\n <q2-option value=\"AL\" display=\"Alabama\">Alabama</q2-option>\n <q2-option value=\"AZ\" display=\"Arizona\">Arizona</q2-option>\n <q2-option value=\"AR\" display=\"Arkansas\">Arkansas</q2-option>\n <q2-option value=\"AK\" display=\"Alaska\">Alaska</q2-option>\n </q2-select>\n `,\n });\n\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n options = await page.findAll('q2-option');\n await select.setProperty('selectedOptions', ['AL', 'AZ']);\n await page.waitForChanges();\n\n let selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions.length).toBe(2);\n expect(options.length).toBe(4);\n expect(await input.getProperty('value')).toEqual('Alabama');\n\n const alabamaSelector = 'q2-option[value=\"AL\"]';\n await page.$eval(alabamaSelector, element => element.remove());\n await page.waitForChanges();\n\n const alabamaOption = await page.find(alabamaSelector);\n expect(alabamaOption).toBeNull();\n expect(await select.getProperty('selectedOptions')).toEqual(['AL', 'AZ']);\n expect(await input.getProperty('value')).toEqual('Alabama');\n options = await page.findAll('q2-option');\n expect(options.length).toBe(3);\n selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions.length).toBe(1);\n });\n\n it('marks a newly added option as selected if it matches a selectedOptions value', async () => {\n page = await setup({\n html: `\n <q2-select label=\"States\" multiple>\n <q2-option value=\"AL\" display=\"Alabama\">Alabama</q2-option>\n <q2-option value=\"AZ\" display=\"Arizona\">Arizona</q2-option>\n <q2-option value=\"AR\" display=\"Arkansas\">Arkansas</q2-option>\n <q2-option value=\"AK\" display=\"Alaska\" selected>Alaska</q2-option>\n </q2-select>\n `,\n });\n\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n options = await page.findAll('q2-option');\n await select.setProperty('selectedOptions', ['AL', 'CA']);\n await page.waitForChanges();\n\n let selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions.length).toBe(1);\n expect(options.length).toBe(4);\n expect(await input.getProperty('value')).toEqual('Alabama');\n\n await page.evaluate(() => {\n const option = document.createElement('q2-option');\n option.value = 'CA';\n option.display = 'California';\n option.textContent = 'California';\n return document.querySelector('q2-select').appendChild(option);\n });\n await page.waitForChanges();\n\n const californiaSelector = 'q2-option[value=\"CA\"]';\n const option = await page.find(californiaSelector);\n expect(option).toHaveAttribute('selected');\n expect(await select.getProperty('selectedOptions')).toEqual(['AL', 'CA']);\n expect(await input.getProperty('value')).toEqual('Alabama');\n options = await page.findAll('q2-option');\n expect(options.length).toBe(5);\n selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions.length).toBe(2);\n });\n });\n });\n\n describe('Accessibility', () => {\n describe('aXe DevTools', () => {\n it('does not have accessibility violations', async () => {\n const page = await setup({\n html: `\n <q2-select label=\"Test\" value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n describe('Accessibility Tree', () => {\n it(\"option-list should have a role of 'listbox' and the options a role of 'option'\", async () => {\n page = await setup({\n html: `\n <q2-select label=\"My select\">\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n\n input = await page.find('q2-select >>> q2-input');\n await input.click();\n await page.waitForChanges();\n\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('open')).toEqual(true);\n\n const snapshot = await page.accessibility.snapshot();\n const optionList = snapshot.children[2];\n\n expect(optionList.role).toEqual('listbox');\n expect(optionList.children).toHaveLength(3);\n optionList.children.forEach(child => {\n expect(child.role).toEqual('option');\n expect(child.name).toBeTruthy();\n });\n });\n });\n describe('Keyboard Controls', () => {\n let options: E2EElement[];\n const isInputFocused = async (page: E2EPage) => {\n return page.$eval('body', () => document.activeElement.shadowRoot.activeElement.tagName === 'Q2-INPUT');\n };\n const isBodyFocused = async (page: E2EPage) => {\n return page.$eval('body', () => document.activeElement.tagName === 'BODY');\n };\n\n beforeEach(async () => {\n jest.setTimeout(5000);\n page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"3\" display=\"Option 3\">Option 3</q2-option>\n <q2-option value=\"4\" display=\"Option 4\">Option 4</q2-option>\n <q2-option value=\"5\" display=\"Option 5\">Option 5</q2-option>\n <q2-option value=\"6\" display=\"Option 6\">Option 6</q2-option>\n <q2-option value=\"7\" display=\"Option 7\">Option 7</q2-option>\n <q2-option value=\"8\" display=\"Option 8\">Option 8</q2-option>\n <q2-option value=\"9\" display=\"Option 9\">Option 9</q2-option>\n <q2-option value=\"10\" display=\"Option 10\">Option 10</q2-option>\n <q2-option value=\"11\" display=\"Option 11\">Option 11</q2-option>\n <q2-option value=\"12\" display=\"Option 12\">Option 12</q2-option>\n <q2-option value=\"13\" display=\"Option 13\">Option 13</q2-option>\n <q2-option value=\"14\" display=\"Option 14\">Option 14</q2-option>\n <q2-option value=\"15\" display=\"Option 15\">Option 15</q2-option>\n </q2-select>\n `,\n });\n await page.waitForChanges();\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n popover = await page.find('q2-select >>> q2-popover');\n options = await page.findAll('q2-option');\n });\n\n describe('when input has focus', () => {\n beforeEach(async () => {\n await input.focus();\n });\n\n it('opens the dropdown, and moves focus to default option on ArrowDown', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('ArrowDown');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n const firstOption = options[0];\n expect(firstOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));\n });\n\n it('opens the dropdown, and moves focus to last option on ArrowUp', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('ArrowUp');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n const lastOption = options[options.length - 1];\n expect(lastOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(lastOption.getAttribute('value'));\n });\n\n it('opens the dropdown on Space', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('Space');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('opens the dropdown, and focuses first option on Home', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('Home');\n expect(await popover.getProperty('open')).toBe(true);\n const firstOption = options[0];\n expect(firstOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));\n });\n\n it('opens the dropdown and focuses last option on End', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('End');\n expect(await popover.getProperty('open')).toBe(true);\n const lastOption = options[options.length - 1];\n expect(lastOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(lastOption.getAttribute('value'));\n });\n\n it('pseudo-searches for option if printable character is pressed', async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option display=\"Nebraska\" value=\"NE\">Nebraska</q2-option>\n <q2-option display=\"Nevada\" value=\"NV\">Nevada</q2-option>\n <q2-option display=\"New Hampshire\" value=\"NH\">New Hampshire</q2-option>\n <q2-option display=\"New Jersey\" value=\"NJ\">New Jersey</q2-option>\n <q2-option display=\"New Mexico\" value=\"NM\">New Mexico</q2-option>\n <q2-option display=\"New York\" value=\"NY\">New York</q2-option>\n <q2-option display=\"North Carolina\" value=\"NC\">North Carolina</q2-option>\n <q2-option display=\"North Dakota\" value=\"ND\">North Dakota</q2-option>\n <q2-option display=\"Ohio\" value=\"OH\">Ohio</q2-option>\n <q2-option display=\"Oklahoma\" value=\"OK\">Oklahoma</q2-option>\n <q2-option display=\"Oregon\" value=\"OR\">Oregon</q2-option>\n <q2-option display=\"Pennsylvania\" value=\"PA\">Pennsylvania</q2-option>\n <q2-option display=\"Rhode Island\" value=\"RI\">Rhode Island</q2-option>\n </q2-select>\n `,\n });\n\n input = await page.find('q2-select >>> q2-input');\n await input.type('o');\n\n const q2Select = await page.find('q2-select');\n const selectInput = await page.find('q2-select >>> q2-input');\n expect(await selectInput.getProperty('value')).toEqual('Ohio');\n expect(await q2Select.getProperty('value')).toEqual('OH');\n\n await input.type('k');\n expect(await selectInput.getProperty('value')).toEqual('Oklahoma');\n expect(await q2Select.getProperty('value')).toEqual('OK');\n\n // Wait for debounce\n await waitForTimeout(2000);\n\n await input.type('New J');\n expect(await selectInput.getProperty('value')).toEqual('New Jersey');\n expect(await q2Select.getProperty('value')).toEqual('NJ');\n });\n\n describe('when value is present', () => {\n beforeEach(async () => {\n await select.setProperty('value', '3');\n await page.waitForChanges();\n });\n\n it('opens the dropdown, and moves focus to first selected option on ArrowDown', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('ArrowDown');\n expect(await popover.getProperty('open')).toBe(true);\n const selectedOption = options[2];\n expect(selectedOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(selectedOption.getAttribute('value'));\n });\n\n it('opens the dropdown, and moves focus to first selected option on ArrowUp', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('ArrowUp');\n expect(await popover.getProperty('open')).toBe(true);\n const selectedOption = options[2];\n expect(selectedOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(selectedOption.getAttribute('value'));\n });\n });\n });\n\n it('pseudo-searches for next matching option if same character is pressed 3 times', async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option display=\"Nebraska\" value=\"NE\">Nebraska</q2-option>\n <q2-option display=\"Ohio\" value=\"OH\">Ohio</q2-option>\n <q2-option display=\"Nevada\" value=\"NV\">Nevada</q2-option>\n <q2-option display=\"Oklahoma\" value=\"OK\">Oklahoma</q2-option>\n <q2-option display=\"New Hampshire\" value=\"NH\">New Hampshire</q2-option>\n </q2-select>\n `,\n });\n\n input = await page.find('q2-select >>> q2-input');\n await input.press('n');\n await page.waitForChanges();\n\n const q2Select = await page.find('q2-select');\n const selectInput = await page.find('q2-select >>> q2-input');\n expect(await selectInput.getProperty('value')).toEqual('Nebraska');\n expect(await q2Select.getProperty('value')).toEqual('NE');\n\n await input.press('n');\n await page.waitForChanges();\n expect(await selectInput.getProperty('value')).toEqual('Nevada');\n expect(await q2Select.getProperty('value')).toEqual('NV');\n\n await input.press('n');\n await page.waitForChanges();\n expect(await selectInput.getProperty('value')).toEqual('New Hampshire');\n expect(await q2Select.getProperty('value')).toEqual('NH');\n });\n\n describe('focus', () => {\n let page: E2EPage;\n let select: E2EElement;\n beforeEach(async () => {\n page = await setup({ html: `<q2-select></q2-select>` });\n select = await page.find('q2-select');\n\n expect(await innerActiveTestId(page)).toBeUndefined();\n });\n\n const innerActiveTestId = async (page: E2EPage) => {\n return page.$eval('q2-select', el => el.shadowRoot.activeElement?.getAttribute('test-id'));\n };\n\n it('focuses inner button when focus event is dispatched', async () => {\n await select.triggerEvent('focus');\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('toggleDropdown');\n });\n\n it('focuses inner button when element.focus() is called', async () => {\n await select.focus();\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('toggleDropdown');\n });\n });\n\n describe('when dropdown has focus', () => {\n beforeEach(async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[0]).toHaveAttribute('active');\n });\n\n it('sets the value, closes the dropdown, and focuses input on Enter', async () => {\n await popover.press('Enter');\n expect(await select.getProperty('value')).toEqual('1');\n expect(await popover.getProperty('open')).toBe(false);\n expect(await isInputFocused(page)).toBe(true);\n });\n\n it('sets the value, closes the dropdown, and focuses input on Space', async () => {\n await popover.press(' ');\n expect(await select.getProperty('value')).toEqual('1');\n expect(await popover.getProperty('open')).toBe(false);\n expect(await isInputFocused(page)).toBe(true);\n });\n\n it('sets the value, closes the dropdown, and move to next element on Tab', async () => {\n await popover.press('Tab');\n expect(await select.getProperty('value')).toEqual('1');\n expect(await popover.getProperty('open')).toBe(false);\n expect(await isBodyFocused(page)).toBe(true);\n });\n\n it('closes dropdown, and focuses input on Escape', async () => {\n await popover.press('Escape');\n expect(await select.getProperty('value')).toBeUndefined();\n expect(await popover.getProperty('open')).toBe(false);\n expect(await isInputFocused(page)).toBe(true);\n });\n\n it('focuses next option on ArrowDown', async () => {\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(await getFocusedOptionValue(page)).toBe(options[1].getAttribute('value'));\n });\n\n it('focuses previous option on ArrowUp', async () => {\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(options[1]).toHaveAttribute('active');\n await popover.press('ArrowUp');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[0]).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toBe(options[0].getAttribute('value'));\n });\n\n it('focuses first option on Home', async () => {\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(options[1]).toHaveAttribute('active');\n await popover.press('Home');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[0]).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toBe(options[0].getAttribute('value'));\n });\n\n it('focuses last option on End', async () => {\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(options[1]).toHaveAttribute('active');\n await popover.press('End');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[14]).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toBe(options[14].getAttribute('value'));\n });\n\n it('jumps focus forward 10 options on PageDown', async () => {\n await popover.press('PageDown');\n await page.waitForChanges();\n expect(options[10]).toHaveAttribute('active');\n await popover.press('PageDown');\n await page.waitForChanges();\n expect(options[14]).toHaveAttribute('active');\n });\n\n it('jumps focus back 10 options on PageUp', async () => {\n await popover.press('End');\n await page.waitForChanges();\n expect(options[14]).toHaveAttribute('active');\n await popover.press('PageUp');\n await page.waitForChanges();\n expect(options[4]).toHaveAttribute('active');\n await popover.press('PageUp');\n await page.waitForChanges();\n expect(options[0]).toHaveAttribute('active');\n });\n });\n\n describe('when input has value', () => {\n beforeEach(async () => {\n await select.setAttribute('value', '2');\n await page.waitForChanges();\n expect(options[1]).toHaveAttribute('selected');\n expect(await popover.getProperty('open')).toBe(false);\n changeSpy = await select.spyOnEvent('change');\n inputSpy = await select.spyOnEvent('input');\n expect(await input.getProperty('value')).toEqual('Option 2');\n });\n\n describe('when dropdown has focus', () => {\n beforeEach(async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[1]).toHaveAttribute('active');\n });\n\n it('closes dropdown, maintains values, and focuses input on Escape', async () => {\n await popover.press('Escape');\n await page.waitForChanges();\n expect(await select.getProperty('value')).toEqual('2');\n expect(await popover.getProperty('open')).toBe(false);\n expect(await isInputFocused(page)).toBe(true);\n });\n });\n });\n\n describe('when searchable', () => {\n beforeEach(async () => {\n select.setAttribute('searchable', true);\n await page.waitForChanges();\n });\n\n describe('when search query is typed', () => {\n it('ArrowDown: focuses first option in search results', async () => {\n await input.press('3');\n await input.press('ArrowDown');\n await page.waitForChanges();\n expect(options[2]).toHaveAttribute('active');\n expect(await getFocusedValue(page)).toBe(options[2].getAttribute('value'));\n });\n it('ArrowUp: focuses last option in search results', async () => {\n await input.press('3');\n await input.press('ArrowUp');\n await page.waitForChanges();\n expect(options[12]).toHaveAttribute('active');\n expect(await getFocusedValue(page)).toBe(options[12].getAttribute('value'));\n });\n });\n\n describe('when options are populated with `q2-card` elements', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select searchable multiline-options>\n <q2-option value=\"1\">\n <q2-card title=\"Foo\"></q2-card>\n </q2-option>\n <q2-option value=\"2\">\n <q2-card title=\"Bar\"></q2-card>\n </q2-option>\n <q2-option value=\"3\">\n <q2-card title=\"Baz\"></q2-card>\n </q2-option>\n </q2-select>\n `,\n });\n input = await page.find('q2-select >>> q2-input');\n });\n\n it('can search based on the `q2-card` title attribute', async () => {\n await input.focus();\n await input.type('Bar');\n\n options = await page.findAll('q2-option:not([hidden])');\n expect(options).toHaveLength(1);\n });\n });\n\n describe('when input has value', () => {\n beforeEach(async () => {\n select.setAttribute('value', '2');\n await page.waitForChanges();\n expect(options[1]).toHaveAttribute('selected');\n expect(await popover.getProperty('open')).toBe(false);\n changeSpy = await select.spyOnEvent('change');\n inputSpy = await select.spyOnEvent('input');\n expect(await input.getProperty('value')).toEqual('Option 2');\n });\n\n it('clears the input on focus', async () => {\n await input.focus();\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual('');\n\n await input.press('5');\n expect(await input.getProperty('value')).toEqual('5');\n\n expect(await popover.getProperty('open')).toBe(true);\n expect(await page.findAll('q2-option:not([hidden])')).toHaveLength(2);\n });\n\n it('clears the input on focus without emitting events', async () => {\n await input.focus();\n expect(await input.getProperty('value')).toEqual('');\n expect(changeSpy).not.toHaveReceivedEvent();\n expect(inputSpy).not.toHaveReceivedEvent();\n });\n\n describe('when input has focus', () => {\n it('clears the value on keypress and emits change and input events', async () => {\n await input.focus();\n expect(await input.getProperty('value')).toEqual('');\n await input.press('X');\n\n expect(changeSpy).toHaveReceivedEventDetail({ value: '' });\n expect(inputSpy).toHaveReceivedEventDetail({ query: 'X' });\n expect(await popover.getProperty('open')).toBe(true);\n expect(await select.getProperty('value')).toEqual('');\n expect(await input.getProperty('value')).toEqual('X');\n const firstOption = options[1];\n expect(firstOption).not.toHaveAttribute('selected');\n });\n\n it('opens the dropdown, and focuses next option on ArrowDown', async () => {\n await input.press('ArrowDown');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n const firstOption = options[1];\n expect(firstOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));\n });\n\n it('opens the dropdown, and focuses first option on ArrowUp', async () => {\n await input.press('ArrowUp');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n const firstOption = options[1];\n expect(firstOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));\n });\n\n it('closes dropdown if open on Escape', async () => {\n await input.press('ArrowDown');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n\n await input.press('Escape');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(false);\n });\n });\n });\n\n describe('when input is empty', () => {\n it('opens the dropdown on Space', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: ' ',\n });\n expect(await popover.getProperty('open')).toBe(true);\n });\n it('opens the dropdown on Enter', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'Enter',\n });\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('opens the dropdown, and focuses first option on ArrowDown', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n expect(await popover.getProperty('open')).toBe(true);\n const firstOption = options[0];\n expect(firstOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));\n });\n\n it('opens the dropdown, and focuses last option on ArrowUp', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowUp',\n });\n expect(await popover.getProperty('open')).toBe(true);\n const lastOption = options[options.length - 1];\n expect(lastOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(lastOption.getAttribute('value'));\n });\n\n it(\"clears typed value if dropdown isn't open on Escape\", async () => {\n await input.focus();\n await input.type('Option');\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual('Option');\n await input.press('Escape');\n expect(await input.getProperty('value')).toEqual('');\n });\n\n describe('when printable character is pressed', () => {\n it('searches for option', async () => {\n const eventData: any = {\n key: 'n',\n detail: {\n value: 'option 2',\n },\n };\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', eventData);\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', eventData);\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keyup', eventData);\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[0]).toHaveAttribute('hidden');\n expect(options[1]).not.toHaveAttribute('hidden');\n expect(options[2]).toHaveAttribute('hidden');\n });\n\n it('enters dropdown on Arrow Down', async () => {\n const eventData: any = {\n key: 'n',\n detail: {\n value: 'option 2',\n },\n };\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', eventData);\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', eventData);\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keyup', eventData);\n expect(await popover.getProperty('open')).toBe(true);\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n const visibleOption = options[1];\n expect(await getFocusedOptionValue(page)).toEqual(visibleOption.getAttribute('value'));\n });\n });\n\n describe('when multiple', () => {\n beforeEach(async () => {\n select.setProperty('multiple', true);\n await page.waitForChanges();\n });\n\n it('does not show an indicator of total selected options', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('ArrowDown');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n\n input = await page.find('q2-select >>> q2-input');\n expect(input).not.toHaveAttribute('badge-value');\n });\n });\n });\n });\n\n describe('when multiple', () => {\n beforeEach(async () => {\n await select.setProperty('multiple', true);\n });\n\n describe('when visibility controls are focused', () => {\n let allOptionsRadio: E2EElement;\n beforeEach(async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n expect(await popover.getProperty('open')).toBe(true);\n await popover.press('Space');\n expect(options[0]).toHaveAttribute('selected');\n allOptionsRadio = await page.find('q2-select >>> [test-id=allOptionsButton]');\n selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');\n selectedOptionsRadioLabel = await page.find(\n 'q2-select >>> [test-id=selectedOptionsButton] + label'\n );\n allOptionsRadioLabel = await page.find('q2-select >>> [test-id=allOptionsButton] + label');\n await allOptionsRadio.focus();\n expect(options[0]).toHaveAttribute('active');\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n describe('when all options button is focused', () => {\n beforeEach(async () => {\n await allOptionsRadioLabel.click();\n await page.waitForChanges();\n expect(await allOptionsRadio.getProperty('checked')).toEqual(true);\n });\n\n it('moves focus to first option on ArrowDown', async () => {\n await allOptionsRadio.press('ArrowDown');\n await page.waitForChanges();\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n });\n\n it('moves focus to first option on ArrowUp', async () => {\n await allOptionsRadio.press('ArrowUp');\n await page.waitForChanges();\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n });\n });\n\n describe('when selected options button is focused', () => {\n beforeEach(async () => {\n await selectedOptionsRadioLabel.click();\n await page.waitForChanges();\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n });\n\n it('moves focus to first option on ArrowDown', async () => {\n await selectedOptionsRadio.press('ArrowDown');\n await page.waitForChanges();\n expect(await allOptionsRadio.getProperty('checked')).toEqual(true);\n });\n\n it('moves focus to all options radio on ArrowUp', async () => {\n await selectedOptionsRadio.press('ArrowUp');\n await page.waitForChanges();\n expect(await allOptionsRadio.getProperty('checked')).toEqual(true);\n });\n });\n\n it('selects on Click', async () => {\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(false);\n await selectedOptionsRadioLabel.click();\n await page.waitForChanges();\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n expect(options[0]).toHaveAttribute('active');\n });\n });\n\n describe('when dropdown has focus', () => {\n beforeEach(async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[0]).toHaveAttribute('active');\n });\n\n const selectAndDeselectMultipleOptions = async (key: 'Space' | 'Enter') => {\n // Selecting second option\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(options[1]).not.toHaveAttribute('selected');\n await popover.press(key);\n expect(options[1]).toHaveAttribute('selected');\n expect(await popover.getProperty('open')).toBe(true);\n expect(await input.getProperty('value')).toEqual('Option 2');\n expect(await select.getProperty('selectedOptions')).toEqual(['2']);\n expect(input).not.toHaveAttribute('badge-value');\n\n // Selecting fourth option\n await popover.press('ArrowDown');\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(options[3]).toHaveAttribute('active');\n expect(options[3]).not.toHaveAttribute('selected');\n await popover.press(key);\n await page.waitForChanges();\n expect(options[3]).toHaveAttribute('selected');\n expect(options[3]).toHaveAttribute('active');\n expect(await popover.getProperty('open')).toBe(true);\n expect(await input.getProperty('value')).toEqual('Option 2');\n expect(await select.getProperty('selectedOptions')).toEqual(['2', '4']);\n expect(input).toEqualAttribute('badge-value', '+1');\n\n // Deselecting fourth option\n await popover.press(key);\n expect(options[3]).not.toHaveAttribute('selected');\n expect(options[3]).toHaveAttribute('active');\n expect(await popover.getProperty('open')).toBe(true);\n expect(await input.getProperty('value')).toEqual('Option 2');\n expect(await select.getProperty('selectedOptions')).toEqual(['2']);\n expect(input).not.toHaveAttribute('badge-value');\n\n // Selecting fifth option\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(options[4]).toHaveAttribute('active');\n expect(options[4]).not.toHaveAttribute('selected');\n await popover.press(key);\n await page.waitForChanges();\n expect(options[4]).toHaveAttribute('selected');\n expect(await input.getProperty('value')).toEqual('Option 2');\n expect(await select.getProperty('selectedOptions')).toEqual(['2', '5']);\n expect(input).toEqualAttribute('badge-value', '+1');\n };\n\n it('can select and deselect multiple options via Space without closing dropdown', async () => {\n await selectAndDeselectMultipleOptions('Space');\n });\n\n it('selects and deselects option on Enter, without closing dropdown', async () => {\n await selectAndDeselectMultipleOptions('Enter');\n });\n });\n });\n });\n describe('Other', () => {});\n });\n});\n"]}
1
+ {"version":3,"file":"q2-select-test.e2e.js","sourceRoot":"","sources":["../../../../src/components/q2-select/test/q2-select-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EElement, E2EPage, EventSpy } from '@stencil/core/testing';\nimport { ActionSheetListCloseData } from 'q2-tecton-common/lib/utility/action-sheet';\nimport {\n setTestStrings,\n setup,\n dispatchEvent,\n getFocusedOptionValue,\n getActiveElementTestId,\n waitForTimeout,\n getListOfStyleCompilationIssues,\n evaluateA11y,\n} from '@/utils/helpers';\n\ndescribe('q2-select', () => {\n const isInvalidErrorString: string = 'tecton.element.select.invalid';\n let page: E2EPage;\n let changeSpy: EventSpy;\n let popover: E2EElement;\n let options: E2EElement[];\n let optionList: E2EElement;\n let selectedDisplaySlot: E2EElement;\n let inputSpy: EventSpy;\n let select: E2EElement;\n let input: E2EElement;\n let selectedOptionsRadio: E2EElement;\n let selectedOptionsRadioLabel: E2EElement;\n let allOptionsRadio: E2EElement;\n let allOptionsRadioLabel: E2EElement;\n\n const getMultiSelectHeaderHeight = async (page: E2EPage) => {\n return page.$eval('q2-select', el => {\n return el.shadowRoot\n .querySelector<HTMLElement>('q2-popover')\n ?.style.getPropertyValue('--comp-popover-top-container-height');\n });\n };\n const getFocusedValue = async (page: E2EPage) => {\n return page.$eval('body', () => document.activeElement.getAttribute('value'));\n };\n\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-select></q2-select>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-select')).toHaveLength(0);\n });\n\n describe('[A11y] guideline compliance', () => {\n it('Does not have accessibility violations', async () => {\n const page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n\n it('renders base state', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n\n const select = await page.find('q2-select');\n // the component renders\n expect(select.tagName).toEqual('Q2-SELECT');\n\n const selectInput = await page.find('q2-select >>> q2-input');\n const inputValue = await selectInput.getProperty('value');\n\n // selected option display set as input value\n expect(inputValue).toEqual('Option Text');\n\n const dropdownContainer = await page.find('q2-select >>> .q2-select-container');\n expect(dropdownContainer.classList.contains('dropdown-open')).toEqual(false);\n\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'click');\n\n // dropdown opens when clicking input\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('open')).toEqual(true);\n expect(await popover.getProperty('minHeight')).toEqual(132);\n\n const slotTag = await page.$eval('q2-select', element => {\n return (\n element.shadowRoot\n .querySelector<HTMLSlotElement>('q2-option-list slot')\n .assignedElements()[0] as HTMLOptionElement\n ).localName;\n });\n\n expect(slotTag).toEqual('q2-option');\n });\n\n it('correctly sets q2-input properties when searchable', async function (): Promise<void> {\n const page = await setup({\n html: `<q2-select value=\"option1\" label=\"Field Label\" disabled searchable optional placeholder=\"Select an option\">\n <q2-option value=\"option1\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n\n const select = await page.find('q2-select');\n select.setProperty('errors', ['1', '2']);\n\n await page.waitForChanges();\n\n const input = await page.find('q2-select >>> q2-input');\n\n const label = await input.getProperty('label');\n // label passed to input\n expect(label).toEqual('Field Label');\n\n const inputValue = await input.getProperty('value');\n // selected option display set as input value;\n expect(inputValue).toEqual('Option Text');\n\n const inputErrors = await input.getProperty('errors');\n // errors passed to input\n expect(inputErrors).toEqual(['1', '2']);\n\n const inputDisabled = await input.getProperty('disabled');\n // disabled passed to input\n expect(inputDisabled).toEqual(true);\n\n const ariaExpanded = await input.getProperty('ariaExpanded');\n // ariaExpanded to be false when dropdown is closed\n expect(ariaExpanded).toEqual('false');\n\n const optional = await input.getProperty('optional');\n // optional passed to input\n expect(optional).toEqual(true);\n\n const placeholder = await input.getProperty('placeholder');\n expect(placeholder).toEqual('Select an option');\n\n const ariaPopup = await input.getProperty('ariaHaspopup');\n // pop up is set to listbox\n expect(ariaPopup).toEqual('listbox');\n\n const _role = await input.getProperty('_role');\n expect(_role).toEqual('combobox');\n\n const _preventEntry = await input.getProperty('_preventEntry');\n expect(_preventEntry).toEqual(false);\n\n const hideMessages = await input.getProperty('hideMessages');\n // hideMessages should be true on the select input\n expect(hideMessages).toEqual(true);\n\n const pseudo = await input.getProperty('pseudo');\n // when searchable pseudo is false\n expect(pseudo).toEqual(undefined);\n });\n\n it('correctly mutates yieldedDOM', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n\n popover = await page.find('q2-select >>> q2-popover');\n options = await page.findAll('q2-option');\n const firstOption = options[0];\n const secondOption = options[1];\n\n // first option id is set\n expect(await firstOption.getAttribute('value')).toEqual('option-1');\n\n // first option not multiline\n expect(await firstOption.getProperty('multiline')).toBeUndefined();\n\n // first option should be selected\n expect(await firstOption.getProperty('selected')).toEqual(true);\n\n // first option should be selected\n expect(await firstOption.getProperty('hidden')).toBe(false);\n\n const select = await page.find('q2-select');\n select.setProperty('multilineOptions', true);\n\n await page.waitForChanges();\n\n // first option should now be multiline\n expect(await firstOption.getProperty('multiline')).toEqual(true);\n\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n\n // when opened by keyboard active options will be set\n expect(await firstOption.getProperty('active')).toEqual(true);\n expect(await secondOption.getProperty('active')).toEqual(false);\n\n await popover.press('ArrowDown');\n await page.waitForChanges();\n // moving with down arrow sets active element\n expect(await firstOption.getProperty('active')).toEqual(false);\n expect(await secondOption.getProperty('active')).toEqual(true);\n\n await popover.press('ArrowDown');\n await page.waitForChanges();\n // moving with down arrow when already at the bottom keeps active at the bottom\n expect(await firstOption.getProperty('active')).toEqual(false);\n expect(await secondOption.getProperty('active')).toEqual(true);\n });\n\n it('toggles drop down visibility', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-3\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n <button>Demo</button>\n `,\n });\n\n const selectContainer = await page.find('q2-select >>> .q2-select-container');\n options = await page.findAll('q2-option');\n popover = await page.find('q2-select >>> q2-popover');\n input = await page.find('q2-select >>> q2-input');\n\n // dropdown closed initially\n expect(await popover.getProperty('open')).toBe(false);\n\n await input.click();\n\n // dropdown should be open after click\n expect(await popover.getProperty('open')).toBe(true);\n\n await input.click();\n\n // dropdown close again after another click (toggle);\n expect(await popover.getProperty('open')).toBe(false);\n\n await input.click();\n\n // dropdown open again after another click...sick of this yet?\n expect(await popover.getProperty('open')).toBe(true);\n\n await options[0].click();\n\n // selecting an option closes the dropdown\n expect(await popover.getProperty('open')).toBe(false);\n\n await input.press('ArrowDown');\n await page.waitForChanges();\n // the dropdown should open on down arrow\n expect(await popover.getProperty('open')).toBe(true);\n\n await input.click();\n\n // dropdown closes again after another click\n expect(await popover.getProperty('open')).toBe(false);\n\n await input.press('ArrowUp');\n await page.waitForChanges();\n // the dropdown should open on up arrow\n expect(await popover.getProperty('open')).toBe(true);\n\n const select = await page.find('q2-select');\n select.setProperty('multiple', true);\n await page.waitForChanges();\n\n await input.press('ArrowUp');\n await page.waitForChanges();\n // opened again with up arrow\n expect(await popover.getProperty('open')).toBe(true);\n\n await input.press('Escape');\n await page.waitForChanges();\n // escape closes the dropdown when in keyboard mode\n expect(await popover.getProperty('open')).toBe(false);\n\n await input.press('ArrowUp');\n await input.press('Enter');\n await page.waitForChanges();\n // selecting or deselecting an option with enter in multiple does not close the dropdown\n expect(await popover.getProperty('open')).toBe(true);\n\n await options[0].click();\n\n // selecting or deselecting an option with click in multiple does not close the dropdown\n expect(await popover.getProperty('open')).toBe(true);\n\n await page.$eval('body', bodyTag => {\n bodyTag.dispatchEvent(new Event('mousedown', { bubbles: true }));\n (bodyTag as HTMLBodyElement).focus();\n });\n\n await page.focus('button');\n await page.waitForChanges();\n\n // clicking away from the input or dropdown closes dropdown\n expect(await popover.getProperty('open')).toBe(false);\n\n // opened again with up arrow\n await input.press('ArrowUp');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n\n // pressing tab key(loses focus) closes the dropdown\n await input.press('Tab');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(false);\n expect(selectContainer).not.toHaveClass('is-focused');\n });\n\n it('can override default onchange', async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-3\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n const select = await page.find('q2-select');\n changeSpy = await select.spyOnEvent('change');\n\n await page.$eval('q2-select', select => {\n (select as HTMLQ2SelectElement).onchange = function () {\n // do nothing so the value doesn't update\n };\n });\n\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'click');\n await dispatchEvent(page, 'q2-option:nth-child(1)', 'click', { bubbles: true });\n\n // option-1 returned in detail\n expect(changeSpy).toHaveReceivedEventDetail({ value: 'option-1' });\n\n // value not updated to option-1 on select because default handler was overridden with empty function\n expect(select.getAttribute('value')).toEqual(null);\n });\n\n it('localizes appropriate attribute strings', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-2\" >\n <q2-option value=\"option-1\" display=\"q2-option.label1\">Option Text 1</q2-option>\n <q2-option value=\"option-2\" display=\"q2-option.label2\">Option Text 2</q2-option>\n </q2-select>\n `,\n });\n\n await setTestStrings(page, {\n 'q2-select.label': 'Label Text',\n 'q2-select.ariaLabel': 'Aria-Label Text',\n 'q2-select.error': 'Error Text',\n 'q2-option.label1': 'Option 1 Text',\n 'q2-option.label2': 'Option 2 Text',\n });\n\n await page.waitForChanges();\n\n const select = await page.find('q2-select');\n\n select.setProperty('errors', ['q2-select.error']);\n select.setProperty('label', 'q2-select.label');\n await page.waitForChanges();\n\n input = await page.find('q2-select >>> q2-input');\n\n // label bound correctly\n expect(input).toEqualAttribute('label', 'Label Text');\n expect(input).not.toHaveAttribute('hide-label');\n\n select.setProperty('ariaLabel', 'q2-select.ariaLabel');\n await page.waitForChanges();\n\n // aria-label set when label is hidden\n expect(input).toEqualAttribute('label', 'Aria-Label Text');\n expect(input).toHaveAttribute('hide-label');\n\n // errors are bound correctly\n const errors = await input.getProperty('errors');\n expect(errors).toEqual(['Error Text']);\n\n // value text bound correctly\n expect(await input.getProperty('value')).toEqual('Option 2 Text');\n\n select.setProperty('label', undefined);\n select.setProperty('value', undefined);\n select.setProperty('multiple', true);\n select.setProperty('selectedOptions', ['option-1', 'option-2']);\n\n await page.waitForChanges();\n\n // multi select message reflects number of selected items\n expect(await input.getProperty('value')).toEqual('Option 1 Text');\n });\n\n describe('Slot content', () => {\n describe('renders custom display slot content', () => {\n it('when q2-select-display slot provided', async () => {\n page = await setup({\n html: `<q2-select value=\"option-1\">\n <div slot=\"q2-select-display\">Custom option 1 display text</div>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n\n const input = await page.find('q2-select >>> q2-input');\n const slotContainer = await page.find('q2-select >>> .custom-display-content');\n const slotData = await page.$eval('q2-select', element => {\n const nodes = element.shadowRoot\n .querySelector<HTMLSlotElement>('slot[name=\"q2-select-display\"]')\n .assignedElements();\n return {\n childCount: nodes.length,\n slot: nodes[0].getAttribute('slot'),\n text: nodes[0].textContent,\n };\n });\n\n expect(slotData.childCount).toEqual(1);\n expect(slotData.slot).toEqual('q2-select-display');\n expect(slotData.text).toEqual('Custom option 1 display text');\n expect(await input.getProperty('value')).toEqual('');\n expect(slotContainer).not.toHaveAttribute('hidden');\n\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('open')).toEqual(false);\n\n await dispatchEvent(page, ['q2-select', '.custom-display-content'], 'click');\n expect(await popover.getProperty('open')).toEqual(true);\n\n await dispatchEvent(page, ['q2-select', '.custom-display-content'], 'click');\n expect(await popover.getProperty('open')).toEqual(false);\n\n await page.$eval('q2-select', element => {\n const customContent = element.querySelector<HTMLSlotElement>('[slot=\"q2-select-display\"]');\n\n customContent && customContent.remove();\n });\n\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('Option 1');\n expect(slotContainer).toHaveAttribute('hidden');\n });\n });\n describe('renders popover slots', () => {\n it('when popover-top slot provided', async () => {\n page = await setup({\n html: `<q2-select>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n <div slot='popover-top'>Popover Slot Top</div>\n </q2-select>\n `,\n });\n const slotContainer = await page.find('q2-select >>> .popover-top-container');\n const slotData = await page.$eval('q2-select', element => {\n const nodes = element.shadowRoot\n .querySelector<HTMLSlotElement>('slot[name=\"popover-top\"]')\n .assignedElements();\n return {\n childCount: nodes.length,\n slot: nodes[0].getAttribute('slot'),\n text: nodes[0].textContent,\n };\n });\n expect(slotContainer).not.toHaveAttribute('hidden');\n expect(slotData.childCount).toBe(1);\n expect(slotData.slot).toBe('popover-top');\n expect(slotData.text).toBe('Popover Slot Top');\n\n await page.$eval('q2-select', element => {\n const customContent = element.querySelector<HTMLSlotElement>('[slot=\"popover-top\"]');\n\n customContent && customContent.remove();\n });\n\n await page.waitForChanges();\n expect(slotContainer).toHaveAttribute('hidden');\n });\n it('when popover-bottom slot provided', async () => {\n page = await setup({\n html: `<q2-select>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n <div slot='popover-bottom'>Popover Slot Bottom</div>\n </q2-select>\n `,\n });\n const topSlotContainer = await page.find('q2-select >>> .popover-top-container');\n const bottomSlotContainer = await page.find('q2-select >>> .popover-bottom-container');\n const slotData = await page.$eval('q2-select', element => {\n const nodes = element.shadowRoot\n .querySelector<HTMLSlotElement>('slot[name=\"popover-bottom\"]')\n .assignedElements();\n return {\n childCount: nodes.length,\n slot: nodes[0].getAttribute('slot'),\n text: nodes[0].textContent,\n };\n });\n expect(topSlotContainer).toHaveAttribute('hidden');\n expect(bottomSlotContainer).not.toHaveAttribute('hidden');\n expect(slotData.childCount).toBe(1);\n expect(slotData.slot).toBe('popover-bottom');\n expect(slotData.text).toBe('Popover Slot Bottom');\n\n await page.$eval('q2-select', element => {\n const customContent = element.querySelector<HTMLSlotElement>('[slot=\"popover-bottom\"]');\n\n customContent && customContent.remove();\n });\n\n await page.waitForChanges();\n expect(bottomSlotContainer).toHaveAttribute('hidden');\n });\n });\n });\n\n it('applies correct wrapper class', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n const clickElsewhere = await page.find('q2-select >>> click-elsewhere');\n input = await page.find('q2-select >>> q2-input');\n\n expect(clickElsewhere).not.toHaveClasses(['is-focused', 'is-searchable']);\n\n await input.focus();\n expect(clickElsewhere).toHaveClass('is-focused');\n\n const select = await page.find('q2-select');\n select.setProperty('searchable', true);\n await page.waitForChanges();\n expect(clickElsewhere).toHaveClass('is-searchable');\n });\n\n describe('when options are NOT provided', () => {\n it('zero is not rendered inside the click-elsewhere element (TCT-2433)', async () => {\n page = await setup({\n html: `<q2-select label=\"My Select\"></q2-select>`,\n });\n select = await page.find('q2-select');\n const clickElsewhere = await page.find('q2-select >>> click-elsewhere');\n expect(await select.getProperty('label')).toBe('My Select');\n expect(clickElsewhere.textContent.slice(-1)).not.toBe('0');\n });\n });\n\n describe('Events', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n options = await page.findAll('q2-option');\n popover = await page.find('q2-select >>> q2-popover');\n changeSpy = await select.spyOnEvent('change');\n inputSpy = await select.spyOnEvent('input');\n });\n\n describe('change', () => {\n it('dispatches with value when option is selected', async () => {\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n await options[1].click();\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({\n value: 'option-2',\n });\n });\n\n it('updates value when dispatched from element', async () => {\n expect(await select.getProperty('value')).toBeUndefined();\n select.triggerEvent('change', { detail: { value: 'option-2' } });\n await page.waitForChanges();\n expect(await select.getProperty('value')).toEqual('option-2');\n });\n\n describe('when multiple', () => {\n beforeEach(async () => {\n select.setProperty('multiple', true);\n await page.waitForChanges();\n });\n\n it('dispatches selectedOptions when option is selected', async () => {\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n await options[1].click();\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({\n selectedOptions: ['option-2'],\n });\n });\n\n it('updates selectedOptions when dispatched from element', async () => {\n expect(await select.getProperty('selectedOptions')).toEqual([]);\n select.triggerEvent('change', { detail: { selectedOptions: ['option-2'] } });\n await page.waitForChanges();\n expect(await select.getProperty('selectedOptions')).toEqual(['option-2']);\n });\n });\n\n describe('when searchable', () => {\n beforeEach(async () => {\n select.setProperty('searchable', true);\n await page.waitForChanges();\n });\n\n describe('when value is present', () => {\n beforeEach(async () => {\n select.setProperty('value', 'option-1');\n await page.waitForChanges();\n });\n\n it('dispatches with empty value on input', async () => {\n await input.press('a');\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({\n value: '',\n });\n });\n\n describe('when multiple', () => {\n beforeEach(async () => {\n select.setProperty('multiple', true);\n await page.waitForChanges();\n });\n\n it('dispatches with empty selectedOptions on input', async () => {\n await input.press('a');\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({\n selectedOptions: [],\n });\n });\n });\n });\n });\n });\n\n describe('input', () => {\n it('does not dispatch when searchable is not true', async () => {\n await input.type('option');\n await page.waitForChanges();\n expect(inputSpy).not.toHaveReceivedEvent();\n });\n\n describe('when searchable', () => {\n beforeEach(async () => {\n select.setProperty('searchable', true);\n await page.waitForChanges();\n });\n\n it('dispatches with query input is typed in', async () => {\n await input.type('option');\n await page.waitForChanges();\n expect(inputSpy).toHaveReceivedEventDetail({\n query: 'option',\n });\n });\n\n it('dispatches with empty query when value is changed', async () => {\n await input.type('option');\n await select.setProperty('value', 'option-1');\n await page.waitForChanges();\n expect(inputSpy).toHaveReceivedEventDetail({\n query: '',\n });\n });\n\n it('dispatches with empty query popover is closed', async () => {\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n await input.type('option');\n await input.press('Escape');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(false);\n expect(inputSpy).toHaveReceivedEventDetail({\n query: '',\n });\n });\n });\n });\n\n describe('focusout', () => {\n describe('when searchable', () => {\n it('does not clear selection when user clicks away', async () => {\n await select.setProperty('searchable', true);\n await page.waitForChanges();\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n await options[1].click();\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({\n value: 'option-2',\n });\n expect(await input.getProperty('value')).toEqual('Option 2');\n expect(await popover.getProperty('open')).toBe(false);\n await page.mouse.click(500, 500);\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual('Option 2');\n });\n });\n });\n\n describe('displayChanged', () => {\n describe('when option display prop provided', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n changeSpy = await select.spyOnEvent('displayChanged');\n });\n\n it('should receive displayChanged event when display prop changed in q2-option', async () => {\n const option = await page.find('q2-option[value=\"option-1\"]');\n option.setProperty('display', 'New Display');\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({ display: 'New Display', value: 'option-1' });\n });\n\n it('field should show new display value of selected option', async () => {\n select.setAttribute('value', 'option-2');\n await page.waitForChanges();\n const selectedOption = await page.find('q2-option[selected]');\n selectedOption.setProperty('display', 'Option Two');\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual('Option Two');\n });\n });\n\n describe('when option display prop NOT provided', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\">Option 1</q2-option>\n <q2-option value=\"option-2\">Option 2</q2-option>\n <q2-option value=\"option-3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n changeSpy = await select.spyOnEvent('displayChanged');\n });\n it('should receive displayChanged event when textContent changed', async () => {\n select.setAttribute('value', 'option-2');\n await page.waitForChanges();\n const selectedOption = await page.find('q2-option[selected]');\n selectedOption.textContent = 'Option Two';\n await page.waitForChanges();\n expect(changeSpy).toHaveReceivedEventDetail({ display: 'Option Two', value: 'option-2' });\n });\n\n it('field should show new display value of selected option', async () => {\n select.setAttribute('value', 'option-2');\n await page.waitForChanges();\n const selectedOption = await page.find('q2-option[selected]');\n selectedOption.textContent = 'Option Two';\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual('Option Two');\n });\n });\n });\n });\n\n describe('Standard', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select label=\"label text\">\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-3\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n popover = await page.find('q2-select >>> q2-popover');\n input = await page.find('q2-select >>> q2-input');\n });\n\n it('opens dropdown on click', async () => {\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(await getActiveElementTestId(page)).toBe('toggleDropdown');\n });\n\n it('scrollIntoView is called when option is activated', async () => {\n const firstOptionScrollStub = jest.fn();\n const secondOptionScrollStub = jest.fn();\n await page.exposeFunction('firstOptionScrollStub', firstOptionScrollStub);\n await page.exposeFunction('secondOptionScrollStub', secondOptionScrollStub);\n await page.$eval('q2-select', select => {\n const firstOption = select.querySelector('q2-option:nth-child(1)');\n const secondOption = select.querySelector('q2-option:nth-child(2)');\n\n firstOption.scrollIntoView = firstOptionScrollStub;\n secondOption.scrollIntoView = secondOptionScrollStub;\n });\n options = await page.findAll('q2-option');\n\n expect(firstOptionScrollStub).toHaveBeenCalledTimes(0);\n expect(secondOptionScrollStub).toHaveBeenCalledTimes(0);\n\n await select.press('ArrowDown');\n await page.waitForChanges();\n expect(firstOptionScrollStub).toHaveBeenCalledTimes(1);\n expect(secondOptionScrollStub).toHaveBeenCalledTimes(0);\n\n await options[0].press('ArrowDown');\n await page.waitForChanges();\n expect(firstOptionScrollStub).toHaveBeenCalledTimes(1);\n expect(secondOptionScrollStub).toHaveBeenCalledTimes(1);\n\n await options[1].press('ArrowUp');\n await page.waitForChanges();\n expect(firstOptionScrollStub).toHaveBeenCalledTimes(2);\n expect(secondOptionScrollStub).toHaveBeenCalledTimes(1);\n });\n\n it('input does not have disabled attribute', async () => {\n expect(input).not.toHaveAttribute('disabled');\n });\n\n it('opens popover on click', async () => {\n await select.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('opens popover on Space', async () => {\n await input.press(' ');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('opens popover on Enter', async () => {\n await input.press('Enter');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n });\n });\n\n describe('Props', () => {\n describe('hoist', () => {\n const runHoistSetup = async (\n action: string,\n hoistEnabled: boolean = false,\n defineShowActionSheet: boolean = false,\n isCancelled: boolean = false\n ) => {\n page = await setup({\n html: `\n <q2-select ${hoistEnabled ? 'hoist' : ''} label=\"My select\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n\n if (defineShowActionSheet) {\n await page.evaluate(isCancelled => {\n const returnValue: ActionSheetListCloseData = isCancelled\n ? {\n type: 'cancel',\n value: '',\n values: [],\n }\n : {\n value: '3',\n values: [{ display: 'Option 3', value: '3' }],\n type: 'confirm',\n };\n (this as Window).TectonElements.showActionSheet = async () => returnValue;\n }, isCancelled);\n }\n\n popover = await page.find('q2-select >>> q2-popover');\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n changeSpy = await select.spyOnEvent('change');\n\n expect(popover).not.toHaveAttribute('open');\n expect(await select.getProperty('selectedOptions')).toEqual([]);\n\n if (action === 'click') {\n await input.click();\n } else {\n await input.press(action);\n }\n await page.waitForChanges();\n };\n\n describe('when window.Tecton.useActionSheets is true', () => {\n it('defaults the hoist prop to true', async () => {\n page = await setup({ html: `` });\n await page.evaluate(() => {\n (this as Window).Tecton = {\n inMobileApp: false,\n useActionSheets: true,\n noStrings: false,\n platformDimensions: null,\n platformUrl: null,\n };\n });\n await page.setContent(`\n <q2-select label=\"My select\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-select>\n `);\n await page.waitForChanges();\n\n select = await page.find('q2-select');\n expect(await select.getProperty('hoist')).toEqual(true);\n });\n\n it('sets hoist to false when manually set to false', async () => {\n page = await setup({ html: `` });\n await page.evaluate(() => {\n (this as Window).Tecton = {\n inMobileApp: false,\n useActionSheets: true,\n noStrings: false,\n platformDimensions: null,\n platformUrl: null,\n };\n });\n await page.setContent(`\n <q2-select label=\"My select\" hoist=\"false\">\n <q2-option value=\"1\">Option 1</q2-option>\n <q2-option value=\"2\">Option 2</q2-option>\n <q2-option value=\"3\">Option 3</q2-option>\n </q2-select>\n `);\n await page.waitForChanges();\n\n select = await page.find('q2-select');\n expect(await select.getProperty('hoist')).toEqual(false);\n });\n });\n\n describe('when false (default)', () => {\n it('opens popover on click', async () => {\n await runHoistSetup('click', false, true);\n\n expect(popover).toHaveAttribute('open');\n\n const option = await page.find('q2-option[value=\"3\"]');\n await option.click();\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n\n expect(await select.getProperty('value')).toEqual('3');\n });\n });\n\n describe('when true', () => {\n describe('when window.TectonElements.showActionSheet is not defined', () => {\n it('opens popover on click', async () => {\n await runHoistSetup('click', true, false);\n\n const option = await page.find('q2-option[value=\"3\"]');\n await option.click();\n await page.waitForChanges();\n\n expect(popover).not.toHaveAttribute('open');\n\n expect(await select.getProperty('value')).toEqual('3');\n expect(changeSpy).toHaveReceivedEventDetail({\n value: '3',\n });\n });\n });\n\n describe('when window.TectonElements.showActionSheet is defined', () => {\n ['click', 'ArrowDown', 'Space', 'Enter'].forEach(action => {\n it(`calls showActionSheet on ${action}`, async () => {\n await runHoistSetup(action, true, true);\n\n expect(await select.getProperty('value')).toEqual('3');\n expect(changeSpy).toHaveReceivedEventDetail({\n value: '3',\n });\n });\n });\n\n it(`calls showActionSheet on click and returns no data when cancelled`, async () => {\n await runHoistSetup('click', true, true, true);\n\n expect(await select.getProperty('value')).toEqual('');\n expect(changeSpy).toHaveReceivedEventDetail({\n value: '',\n });\n });\n });\n });\n });\n\n describe('value', () => {\n describe('when not provided', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n });\n\n it('selects no options and shows nothing in input', async () => {\n expect(await input.getProperty('value')).toEqual('');\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n });\n\n describe('when provided', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n });\n\n it('selects option and shows display attribute in input', async () => {\n expect(await input.getProperty('value')).toEqual('Option 1');\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(1);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 1');\n });\n\n it('updates selected option and input with new value', async () => {\n select.setProperty('value', 'option-2');\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('Option 2');\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(1);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 2');\n expect(selectedOptions[0]).toEqualAttribute('aria-selected', 'true');\n });\n\n it('selects no options and shows input with value if no option is found', async () => {\n select.setProperty('value', 'newValue');\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('newValue');\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n\n it('selects no options and shows input with empty string when set to undefined', async () => {\n select.setProperty('value', undefined);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('');\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n\n it('does nothing if selectedOptions is set', async () => {\n select.setProperty('selectedOptions', ['option-1', 'option-2']);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('Option 1');\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(1);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 1');\n expect(selectedOptions[0]).toEqualAttribute('aria-selected', 'true');\n });\n });\n });\n\n describe('selectedOptions', () => {\n describe('when multiple is false', () => {\n it('selects no options and shows nothing in input ', async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n optionList = await page.find('q2-select >>> q2-option-list');\n\n await select.setProperty('selectedOptions', ['option-2', 'option-3']);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('');\n expect(await input.getProperty('badgeValue')).toBeNull();\n expect(await optionList.getProperty('selectedOptions')).toEqual([]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n });\n\n describe('when not provided', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select multiple>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n });\n\n it('selects no options and shows nothing in input', async () => {\n expect(await input.getProperty('value')).toEqual('');\n expect(await input.getProperty('selectedOptions')).toBeUndefined();\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n });\n\n describe('when provided', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select multiple>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n optionList = await page.find('q2-select >>> q2-option-list');\n select.setProperty('selectedOptions', ['option-3']);\n await page.waitForChanges();\n });\n\n it('selects option and shows display attribute in input', async () => {\n expect(await input.getProperty('value')).toEqual('Option 3');\n expect(await input.getProperty('badgeValue')).toBeNull();\n expect(await optionList.getProperty('selectedOptions')).toEqual([{ value: 'option-3' }]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(1);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 3');\n });\n\n it('updates selected option and input with new value', async () => {\n select.setProperty('selectedOptions', ['option-2']);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('Option 2');\n expect(await input.getProperty('badgeValue')).toBeNull();\n expect(await optionList.getProperty('selectedOptions')).toEqual([{ value: 'option-2' }]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(1);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 2');\n });\n\n it('populates badge when multiple options are provided', async () => {\n select.setProperty('selectedOptions', ['option-1', 'option-3']);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('Option 1');\n expect(await input.getProperty('badgeValue')).toEqual('+1');\n expect(await optionList.getProperty('selectedOptions')).toEqual([\n { value: 'option-1' },\n { value: 'option-3' },\n ]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(2);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 1');\n expect(await selectedOptions[1].getProperty('display')).toEqual('Option 3');\n });\n\n it('selects no options and shows input with value if no options are found', async () => {\n select.setProperty('selectedOptions', ['newValue']);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('newValue');\n expect(await input.getProperty('badgeValue')).toBeNull();\n expect(await optionList.getProperty('selectedOptions')).toEqual([{ value: 'newValue' }]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n\n it('selects no options and shows input with empty string when set to undefined', async () => {\n select.setProperty('selectedOptions', undefined);\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('');\n expect(await input.getProperty('badgeValue')).toBeNull();\n expect(await optionList.getProperty('selectedOptions')).toEqual([]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(0);\n });\n\n it('changes nothing if value is set', async () => {\n select.setProperty('value', 'option-2');\n await page.waitForChanges();\n\n expect(await input.getProperty('value')).toEqual('Option 3');\n expect(await input.getProperty('badgeValue')).toBeNull();\n expect(await optionList.getProperty('selectedOptions')).toEqual([{ value: 'option-3' }]);\n\n const selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions).toHaveLength(1);\n expect(await selectedOptions[0].getProperty('display')).toEqual('Option 3');\n });\n });\n });\n\n describe('multilineOptions', () => {\n describe('when false (default)', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n });\n\n it('does not set multiline on the options on render', async () => {\n options = await page.findAll('q2-option');\n expect(options.every(async option => (await option.getProperty('multiline')) === false)).toBe(true);\n });\n\n it('sets multiline to true when updated after render', async () => {\n select = await page.find('q2-select');\n await select.setProperty('multilineOptions', true);\n await page.waitForChanges();\n options = await page.findAll('q2-option');\n expect(options.every(async option => (await option.getProperty('multiline')) === true)).toBe(true);\n });\n });\n\n describe('when true', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select multiline-options>\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 1</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n });\n\n it('sets multiline on the options on render', async () => {\n options = await page.findAll('q2-option');\n expect(options.every(async option => (await option.getProperty('multiline')) === true)).toBe(true);\n });\n\n it('sets multiline to flse when updated after render', async () => {\n select = await page.find('q2-select');\n await select.setProperty('multilineOptions', true);\n await page.waitForChanges();\n options = await page.findAll('q2-option');\n expect(options.every(async option => (await option.getProperty('multiline')) === false)).toBe(true);\n });\n });\n });\n\n describe('listLabel', () => {\n describe('when undefined (default)', () => {\n it('sets a default value as the aria-label on the q2-option-list', async () => {\n page = await setup({\n html: `<q2-select></q2-select>`,\n });\n const optionList = await page.find('q2-select >>> q2-option-list');\n expect(await optionList.getProperty('label')).toEqual('tecton.element.select.listLabel');\n });\n });\n\n describe('when provided', () => {\n it('sets the provided value as the aria-label on the q2-option-list', async () => {\n page = await setup({\n html: `<q2-select list-label=\"Iron Man\"></q2-select>`,\n });\n const optionList = await page.find('q2-select >>> q2-option-list');\n expect(await optionList.getProperty('label')).toEqual('Iron Man');\n });\n });\n });\n\n describe('invalid', () => {\n describe('when false (default)', () => {\n it('has no error state', async () => {\n page = await setup({\n html: `<q2-select></q2-select>`,\n });\n const input = await page.find('q2-select >>> q2-input');\n const errors: string[] = await input.getProperty('errors');\n expect(errors).toEqual([]);\n });\n });\n\n describe('when true', () => {\n it('has an error state', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\" label=\"Field Label\" invalid>\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n await page.find('q2-select');\n const input = await page.find('q2-select >>> q2-input');\n expect(await input.getProperty('errors')).toEqual([isInvalidErrorString]);\n });\n });\n });\n\n describe('errors', () => {\n describe('when not provided (default)', () => {\n it('does not populate errors on q2-input', async () => {\n page = await setup({\n html: `<q2-select></q2-select>`,\n });\n const input = await page.find('q2-select >>> q2-input');\n\n expect(await input.getProperty('errors')).toEqual([]);\n });\n });\n\n describe('when provided', () => {\n it('takes precedence and sets an error state even if invalid is set', async () => {\n const errors: string[] = ['Error #1', 'Error #2'];\n page = await setup({\n html: `<q2-select invalid></q2-select>`,\n });\n const select = await page.find('q2-select');\n const input = await page.find('q2-select >>> q2-input');\n\n await select.setProperty('errors', errors);\n await page.waitForChanges();\n\n expect(await input.getProperty('errors')).toEqual(errors);\n\n await select.setProperty('errors', undefined);\n await page.waitForChanges();\n\n expect(await input.getProperty('errors')).toEqual([isInvalidErrorString]);\n });\n\n it('shows error list', async () => {\n const errors: string[] = ['Error #1', 'Error #2'];\n page = await setup({\n html: `<q2-select></q2-select>`,\n });\n const select = await page.find('q2-select');\n const input = await page.find('q2-select >>> q2-input');\n\n await select.setProperty('errors', errors);\n await page.waitForChanges();\n\n expect(await input.getProperty('errors')).toEqual(errors);\n\n await select.setProperty('errors', undefined);\n await page.waitForChanges();\n\n expect(await input.getProperty('errors')).toEqual([]);\n });\n });\n });\n\n describe('disabled', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select label=\"label text\">\n <q2-option value=\"1\" display=\"One\">One</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n popover = await page.find('q2-select >>> q2-popover');\n input = await page.find('q2-select >>> q2-input');\n });\n\n describe('when true', () => {\n beforeEach(async () => {\n await select.setProperty('disabled', true);\n await page.waitForChanges();\n });\n\n it('label text should include (read only) ', async () => {\n expect(input).toHaveAttribute('disabled');\n });\n\n it('does not open popover on click', async () => {\n await select.click();\n expect(await popover.getProperty('open')).toBe(false);\n });\n\n it('does not open popover on Space', async () => {\n await input.press(' ');\n expect(await popover.getProperty('open')).toBe(false);\n });\n\n it('does not open popover on Enter', async () => {\n await input.press('Enter');\n expect(await popover.getProperty('open')).toBe(false);\n });\n });\n });\n\n describe('clearable', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select label=\"label text\" clearable>\n <q2-option value=\"1\" display=\"One\">One</q2-option>\n <q2-option value=\"2\" display=\"Two\">Two</q2-option>\n <q2-option value=\"3\" display=\"Three\">Three</q2-option>\n <q2-option value=\"4\" display=\"Four\">Four</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n popover = await page.find('q2-select >>> q2-popover');\n input = await page.find('q2-select >>> q2-input');\n });\n\n describe('when true with single selection', () => {\n it('clear button should not be visible ', async () => {\n const clearButton = input.shadowRoot.querySelector('.btn-clear');\n expect(clearButton).toHaveClass('hidden');\n });\n\n it('clear button should be visible when an option selected ', async () => {\n await select.setProperty('value', '1');\n await page.waitForChanges();\n const clearButton = input.shadowRoot.querySelector('.btn-clear');\n expect(clearButton).not.toHaveClass('hidden');\n });\n });\n\n describe('when true with multiple selection enabled', () => {\n it('clear button should be visible when an option selected ', async () => {\n await select.setProperty('multiple', '');\n await select.setProperty('selectedOptions', ['1', '3']);\n await page.waitForChanges();\n\n const clickClearButton = async (page: E2EPage) => {\n return page.$eval('q2-select', el => {\n return (\n el.shadowRoot\n .querySelector('q2-input')\n .shadowRoot.querySelector('.btn-clear') as HTMLElement\n ).click();\n });\n };\n expect(await select.getProperty('selectedOptions')).toStrictEqual(['1', '3']);\n await clickClearButton(page);\n expect(await select.getProperty('selectedOptions')).toStrictEqual([]);\n });\n });\n });\n\n describe('readonly', () => {\n const readonlyText = '(read only)';\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select label=\"label text\">\n <q2-option value=\"1\" display=\"One\">One</q2-option>\n </q2-select>\n `,\n });\n await setTestStrings(page, {\n 'tecton.element.input.readonly': readonlyText,\n });\n select = await page.find('q2-select');\n popover = await page.find('q2-select >>> q2-popover');\n input = await page.find('q2-select >>> q2-input');\n });\n\n describe('when true', () => {\n beforeEach(async () => {\n await select.setProperty('readonly', true);\n await page.waitForChanges();\n });\n\n it('label text should include (read only) ', async () => {\n const label = await input.shadowRoot.querySelector('label');\n expect(label.innerText).toEqual(`label text${readonlyText}`);\n expect(input).toHaveAttribute('readonly');\n });\n\n it('does not open popover on click', async () => {\n await select.click();\n expect(await popover.getProperty('open')).toBe(false);\n });\n\n it('does not open popover on Space', async () => {\n await input.press(' ');\n expect(await popover.getProperty('open')).toBe(false);\n });\n\n it('does not open popover on Enter', async () => {\n await input.press('Enter');\n expect(await popover.getProperty('open')).toBe(false);\n });\n });\n });\n\n describe('searchable', () => {\n describe('when true', () => {\n let status: E2EElement;\n let visibleOptions: E2EElement[];\n\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select searchable>\n <q2-option value=\"1\" display=\"One\">One</q2-option>\n <q2-option value=\"2\" display=\"Two\">Two</q2-option>\n <q2-option value=\"3\" display=\"Three\">Three</q2-option>\n </q2-select>\n `,\n });\n await setTestStrings(page, {\n 'tecton.element.select.searchable.results': '{0} Results',\n 'tecton.element.select.allOptions': 'All Options',\n });\n status = await page.find('q2-select >>> [role=status]');\n expect(status.textContent).toEqual('');\n\n visibleOptions = await page.findAll('q2-option:not([hidden])');\n expect(visibleOptions).toHaveLength(3);\n });\n\n it('can return a single result', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', {\n detail: { value: 'one' },\n });\n\n visibleOptions = await page.findAll('q2-option:not([hidden])');\n expect(visibleOptions).toHaveLength(1);\n\n await page.waitForTimeout(1000);\n status = await page.find('q2-select >>> [role=status]');\n expect(status.textContent).toEqual('1 Results');\n });\n\n it('can return multiple results', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', {\n detail: { value: 'o' },\n });\n\n visibleOptions = await page.findAll('q2-option:not([hidden])');\n expect(visibleOptions).toHaveLength(2);\n\n await page.waitForTimeout(1000);\n status = await page.find('q2-select >>> [role=status]');\n expect(status.textContent).toEqual('2 Results');\n });\n\n it('can return zero results', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', {\n detail: { value: 'abc' },\n });\n await page.waitForChanges();\n\n visibleOptions = await page.findAll('q2-option:not([hidden])');\n expect(visibleOptions).toHaveLength(0);\n\n await page.waitForTimeout(1000);\n status = await page.find('q2-select >>> [role=status]');\n expect(status.textContent).toEqual('0 Results');\n });\n\n it('can return all results', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', {\n detail: { value: '' },\n });\n\n visibleOptions = await page.findAll('q2-option:not([hidden])');\n expect(visibleOptions).toHaveLength(3);\n\n await page.waitForTimeout(1000);\n status = await page.find('q2-select >>> [role=status]');\n expect(status.textContent).toEqual('All Options');\n });\n });\n });\n\n describe('multiple', () => {\n describe('when false (default)', () => {\n describe('when the dropdown is opened', () => {\n it('does not set the height of the multi-select header as a CSS variable', async () => {\n page = await setup({\n html: `\n <q2-select value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n input = await page.find('q2-select >>> q2-input');\n\n expect(await getMultiSelectHeaderHeight(page)).toEqual('');\n await input.click();\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('open')).toBe(true);\n expect(await getMultiSelectHeaderHeight(page)).toEqual('');\n });\n });\n });\n\n describe('when true', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select multiple>\n <q2-option value=\"option-1\" display=\"Option 1 Text\">Option 1 Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2 Text\">Option 2 Text</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3 Text\">Option 3 Text</q2-option>\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n });\n\n describe('when the dropdown is opened', () => {\n it('sets the height of the multi-select header as a CSS variable', async () => {\n expect(await getMultiSelectHeaderHeight(page)).toEqual('');\n await input.click();\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('open')).toBe(true);\n expect(parseInt(await getMultiSelectHeaderHeight(page))).toBeGreaterThan(20);\n });\n });\n\n describe('when no value is provided', () => {\n it('defaults to an empty string', async () => {\n expect(await input.getProperty('value')).toEqual('');\n expect(input).not.toHaveAttribute('badge-value');\n });\n\n describe('when dropdown is open', () => {\n beforeEach(async () => {\n await input.click();\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('disables the selected options button', async () => {\n selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');\n expect(selectedOptionsRadio).toHaveAttribute('disabled');\n });\n });\n });\n\n describe('when one value is provided', () => {\n beforeEach(async () => {\n select.setProperty('selectedOptions', ['option-1']);\n await page.waitForChanges();\n });\n\n it('shows the raw value if an option is not found which matches it', async () => {\n select.setProperty('selectedOptions', ['missing_value']);\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual('missing_value');\n expect(input).not.toHaveAttribute('badge-value');\n });\n\n it('shows the display property of the selected option', async () => {\n expect(await input.getProperty('value')).toEqual('Option 1 Text');\n expect(input).not.toHaveAttribute('badge-value');\n });\n\n describe('when popover is open', () => {\n beforeEach(async () => {\n popover = await page.find('q2-select >>> q2-popover');\n await input.focus();\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('enables the selectedOptionsButton', async () => {\n selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');\n expect(selectedOptionsRadio).not.toHaveAttribute('disabled');\n });\n\n it('does not show the number of selected values in the badge', async () => {\n expect(input).not.toHaveAttribute('badge-value');\n });\n\n describe('when selected options view is active', () => {\n beforeEach(async () => {\n allOptionsRadio = await page.find('q2-select >>> [test-id=allOptionsButton]');\n selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');\n selectedOptionsRadioLabel = await page.find(\n 'q2-select >>> [test-id=selectedOptionsButton] + label'\n );\n expect(await allOptionsRadio.getProperty('checked')).toEqual(true);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(false);\n await selectedOptionsRadioLabel.click();\n await page.waitForChanges();\n expect(await allOptionsRadio.getProperty('checked')).toEqual(false);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n const visibleOptions = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(visibleOptions).toHaveLength(1);\n });\n\n it('returns to all options view when selected option is deselected', async () => {\n const selectedOption = await page.find('q2-option:not([_multiselecthidden])');\n await selectedOption.click();\n await page.waitForChanges();\n expect(await allOptionsRadio.getProperty('checked')).toEqual(true);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(false);\n const visibleOptions = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(visibleOptions).toHaveLength(3);\n });\n });\n });\n });\n\n describe('when multiple values are provided', () => {\n beforeEach(async () => {\n select.setProperty('selectedOptions', ['option-2', 'option-1']);\n await page.waitForChanges();\n });\n\n it('shows the display property of the first selected option and a badge for the remainder', async () => {\n expect(await input.getProperty('value')).toEqual('Option 2 Text');\n expect(input).toEqualAttribute('badge-value', '+1');\n });\n\n it('does not add a theme to the badge', async () => {\n expect(input).not.toHaveAttribute('badge-theme');\n });\n\n describe('when focused', () => {\n beforeEach(async () => {\n await input.focus();\n await page.waitForChanges();\n });\n\n it('marks the badge with a primary theme', async () => {\n expect(input).toEqualAttribute('badge-theme', 'primary');\n });\n });\n\n describe('when dropdown is open', () => {\n beforeEach(async () => {\n expect(await getMultiSelectHeaderHeight(page)).toEqual('');\n popover = await page.find('q2-select >>> q2-popover');\n await input.focus();\n await input.click();\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('shows the display property of the first selected option and a badge for the remainder', async () => {\n expect(input).toEqualAttribute('badge-value', '+1');\n });\n\n describe('when selected options view is active', () => {\n beforeEach(async () => {\n allOptionsRadio = await page.find('q2-select >>> [test-id=allOptionsButton]');\n selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');\n selectedOptionsRadioLabel = await page.find(\n 'q2-select >>> [test-id=selectedOptionsButton] + label'\n );\n expect(await allOptionsRadio.getProperty('checked')).toEqual(true);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(false);\n await selectedOptionsRadioLabel.click();\n await page.waitForChanges();\n expect(await allOptionsRadio.getProperty('checked')).toEqual(false);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n });\n\n it('focuses next sibling when first option is de-selected', async () => {\n let selectedOptions = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(selectedOptions).toHaveLength(2);\n await selectedOptions[0].click();\n await page.waitForChanges();\n expect(selectedOptions[0]).toHaveAttribute('_multiselecthidden');\n expect(await getFocusedOptionValue(page)).toContain('option-2');\n selectedOptions = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(selectedOptions).toHaveLength(1);\n expect(await allOptionsRadio.getProperty('checked')).toEqual(false);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n });\n\n it('focuses previous sibling when second option is de-selected', async () => {\n let selectedOptions = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(selectedOptions).toHaveLength(2);\n expect(await select.getProperty('selectedOptions')).toEqual(['option-2', 'option-1']);\n await selectedOptions[1].click();\n await page.waitForChanges();\n expect(await select.getProperty('selectedOptions')).toEqual(['option-1']);\n selectedOptions = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(selectedOptions).toHaveLength(1);\n expect(await getFocusedOptionValue(page)).toEqual('option-1');\n expect(await allOptionsRadio.getProperty('checked')).toEqual(false);\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n });\n });\n });\n });\n\n it('allows toggling of selected options', async () => {\n popover = await page.find('q2-select >>> q2-popover');\n selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');\n selectedOptionsRadioLabel = await page.find(\n 'q2-select >>> [test-id=selectedOptionsButton] + label'\n );\n\n expect(await selectedOptionsRadio.getProperty('disabled')).toBe(true);\n\n await select.setProperty('selectedOptions', ['option-1']);\n await page.waitForChanges();\n\n expect(await selectedOptionsRadio.getProperty('disabled')).toBe(false);\n\n options = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(options).toHaveLength(3);\n\n await input.click();\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(true);\n\n await selectedOptionsRadioLabel.click();\n await page.waitForChanges();\n\n options = await page.findAll('q2-option:not([_multiselecthidden])');\n expect(options).toHaveLength(1);\n expect(await options[0].getProperty('value')).toEqual('option-1');\n });\n });\n });\n\n describe('popoverMode', () => {\n it('does not set any mode on the popover (default)', async () => {\n const page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"1\" display=\"One\">One</q2-option>\n </q2-select>\n `,\n });\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('mode')).toBeNull();\n });\n\n it('sets the value of popoverMode as the mode on the popover', async () => {\n const page = await setup({\n html: `\n <q2-select popover-mode=\"legacy\">\n <q2-option value=\"1\" display=\"One\">One</q2-option>\n </q2-select>\n `,\n });\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('mode')).toEqual('legacy');\n });\n });\n\n describe('popoverMaxHeight', () => {\n it('when provided, passes the value to q2-popover', async () => {\n page = await setup({\n html: `\n <q2-select popover-max-height=\"600\">\n <q2-option value=\"option-1\" display=\"Option 1 Text\">Option 1 Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2 Text\">Option 2 Text</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3 Text\">Option 3 Text</q2-option>\n </q2-select>\n `,\n });\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('maxHeight')).toEqual(600);\n });\n });\n });\n\n describe('robust content', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select multiline-options>\n ${[1, 2, 3, 4, 5].map(\n item => `\n <q2-option value=\"${item}\" multiline>\n <q2-card avatar-icon=\"document\" title=\"Option ${item}\">\n <dl>\n <dt>Last updated</dt>\n <dd>Jan 5, 2022</dd>\n <dt hide-on-select>Created at</dt>\n <dd hide-on-select>Jan 5, 2022</dd>\n </dl>\n </q2-card>\n </q2-option>\n `\n )}\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n selectedDisplaySlot = await page.find(\"[slot='_selected-display']\");\n });\n\n it('does not populate the input by default', async () => {\n expect(selectedDisplaySlot).toBe(null);\n });\n\n it('shows selected option in _selected-display slot', async () => {\n select.setProperty('value', '2');\n await page.waitForChanges();\n\n expect(input).not.toHaveAttribute('badge-value');\n\n selectedDisplaySlot = await page.find(\"div[slot='_selected-display']\");\n expect(selectedDisplaySlot).toBeTruthy();\n\n const card = await page.find('div[slot=\"_selected-display\"] q2-card');\n expect(card).toEqualAttribute('title', 'Option 2');\n });\n\n it('removes hide-on-select elements when displayed in _selected-display slot', async () => {\n select.setProperty('value', '2');\n await page.waitForChanges();\n\n expect(input).not.toHaveAttribute('badge-value');\n\n const visibleRow = await page.find('div[slot=\"_selected-display\"] q2-card dt:not([hide-on-select])');\n const hiddenRow = await page.find('div[slot=\"_selected-display\"] q2-card dt[hide-on-select]');\n expect(visibleRow).toBeTruthy();\n expect(hiddenRow).toBeNull();\n });\n\n describe('when searchable', () => {\n beforeEach(async () => {\n select.setProperty('searchable', true);\n await page.waitForChanges();\n });\n\n it('hides the content on focus', async () => {\n select.setProperty('value', '2');\n await page.waitForChanges();\n\n selectedDisplaySlot = await page.find(\"q2-select >>> [slot='custom-display']\");\n expect(selectedDisplaySlot).toBeTruthy();\n\n expect(await input.getProperty('value')).toEqual('2');\n await input.focus();\n\n selectedDisplaySlot = await page.find(\"q2-select >>> [slot='custom-display']\");\n expect(selectedDisplaySlot).toBeNull();\n\n expect(await input.getProperty('value')).toEqual('');\n });\n });\n\n describe('when multiple', () => {\n beforeEach(async () => {\n select.setProperty('multiple', true);\n await page.waitForChanges();\n });\n\n it('shows first selected option in _selected-display slot and adds badge for remainder', async () => {\n select.setProperty('selectedOptions', ['3', '4', '5']);\n await page.waitForChanges();\n\n expect(input).toEqualAttribute('badge-value', '+2');\n\n selectedDisplaySlot = await page.find(\"div[slot='_selected-display']\");\n expect(selectedDisplaySlot).toBeTruthy();\n\n const card = await page.find('div[slot=\"_selected-display\"] q2-card');\n expect(card).toEqualAttribute('title', 'Option 3');\n });\n });\n\n describe('when display is provided on selected option', () => {\n it('renders the display instead of the robust content', async () => {\n const option = await page.find('q2-option[value=\"2\"]');\n option.setProperty('display', 'My Best Option');\n await page.waitForChanges();\n\n select.setProperty('value', '2');\n await page.waitForChanges();\n\n expect(input).not.toHaveAttribute('badge-value');\n\n selectedDisplaySlot = await page.find(\"div[slot='_selected-display']\");\n expect(selectedDisplaySlot).toBeNull();\n\n expect(await input.getProperty('value')).toEqual('My Best Option');\n });\n });\n\n it('emits change event when robust content is clicked', async () => {\n changeSpy = await select.spyOnEvent('change');\n popover = await page.find('q2-select >>> q2-popover');\n\n expect(await popover.getProperty('open')).toBe(false);\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'click');\n expect(await popover.getProperty('open')).toBe(true);\n\n await dispatchEvent(page, 'q2-option[value=\"2\"]', 'click', { bubbles: true });\n\n expect(changeSpy).toHaveReceivedEventDetail({ value: '2' });\n expect(await select.getProperty('value')).toEqual('2');\n expect(await popover.getProperty('open')).toBe(false);\n });\n });\n\n describe('Methods', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select label=\"My select\">\n ${[1, 2, 3, 4, 5].map(\n item => `\n <q2-option value=\"${item}\">\n Option ${item}\n </q2-option>\n `\n )}\n </q2-select>\n `,\n });\n select = await page.find('q2-select');\n popover = await page.find('q2-select >>> q2-popover');\n input = await page.find('q2-select >>> q2-input');\n });\n\n describe('openPopover', () => {\n it('opens the popover', async () => {\n const innerInputClickSpy = await input.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBe(false);\n\n await select.callMethod('openPopover');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(true);\n expect(innerInputClickSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toEqual('toggleDropdown');\n });\n });\n\n describe('closePopover', () => {\n it('closes the popover', async () => {\n await input.click();\n await page.waitForChanges();\n\n const innerInputClickSpy = await input.spyOnEvent('click');\n\n expect(innerInputClickSpy).toHaveReceivedEventTimes(0);\n expect(await popover.getProperty('open')).toBe(true);\n\n await select.callMethod('closePopover');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(false);\n expect(innerInputClickSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toEqual('toggleDropdown');\n });\n });\n\n describe('setValue', () => {\n it('sets the value on the select', async () => {\n const inputChangeSpy = await select.spyOnEvent('change');\n const inputInputSpy = await select.spyOnEvent('input');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBeNull();\n const newValue = '3';\n const newDisplay = 'Option 3';\n\n await select.callMethod('setValue', newValue);\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(1);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(inputChangeSpy).toHaveReceivedEventDetail({\n value: newValue,\n });\n expect(await select.getProperty('value')).toEqual(newValue);\n expect(await input.getProperty('value')).toEqual(newDisplay);\n expect(await getActiveElementTestId(page)).toEqual('toggleDropdown');\n\n await input.press('Tab');\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(1);\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n\n describe('when multiple is true', () => {\n it('sets the values on the select', async () => {\n await select.setProperty('multiple', true);\n await page.waitForChanges();\n\n const inputChangeSpy = await select.spyOnEvent('change');\n const inputInputSpy = await select.spyOnEvent('input');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBeNull();\n const newValues = ['2', '3', '4'];\n const newDisplays = ['Option 2', 'Option 3', 'Option 4'];\n\n await select.callMethod('setValue', newValues);\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(3);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(inputChangeSpy).toHaveReceivedEventDetail({\n selectedOptions: newValues,\n });\n expect(await select.getProperty('selectedOptions')).toEqual(newValues);\n expect(await input.getProperty('value')).toEqual(newDisplays[0]);\n expect(await getActiveElementTestId(page)).toEqual('toggleDropdown');\n\n await input.press('Tab');\n await page.waitForChanges();\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(3);\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n });\n\n describe('searchOptions', () => {\n it('filters the list of options based on the value', async () => {\n await select.setProperty('searchable', true);\n await page.waitForChanges();\n\n const inputChangeSpy = await select.spyOnEvent('change');\n const inputInputSpy = await select.spyOnEvent('input');\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBeNull();\n const query = 'Option 3';\n\n expect(await popover.getProperty('open')).toBe(false);\n\n await select.callMethod('searchOptions', query);\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(true);\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(inputInputSpy).toHaveReceivedEventTimes(1);\n expect(inputInputSpy).toHaveReceivedEventDetail({\n query,\n });\n expect(await select.getProperty('value')).toBeUndefined();\n expect(await input.getProperty('value')).toEqual(query);\n expect(await getActiveElementTestId(page)).toEqual('toggleDropdown');\n\n const allOptions = await page.findAll('q2-option');\n expect(allOptions[0]).toHaveAttribute('hidden');\n expect(allOptions[1]).toHaveAttribute('hidden');\n expect(allOptions[2]).not.toHaveAttribute('hidden');\n expect(allOptions[3]).toHaveAttribute('hidden');\n expect(allOptions[4]).toHaveAttribute('hidden');\n\n await input.press('Tab');\n await page.waitForChanges();\n\n expect(await popover.getProperty('open')).toBe(false);\n\n expect(inputChangeSpy).toHaveReceivedEventTimes(0);\n expect(await getActiveElementTestId(page)).toBeNull();\n });\n });\n });\n\n describe('Updating option list', () => {\n describe('when multiple is false', () => {\n it('does not modify the value when the selected option is removed', async () => {\n page = await setup({\n html: `\n <q2-select label=\"States\" value=\"AK\">\n <q2-option value=\"AL\" display=\"Alabama\">Alabama</q2-option>\n <q2-option value=\"AZ\" display=\"Arizona\">Arizona</q2-option>\n <q2-option value=\"AR\" display=\"Arkansas\">Arkansas</q2-option>\n <q2-option value=\"AK\" display=\"Alaska\" selected>Alaska</q2-option>\n </q2-select>\n `,\n });\n\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n\n const alaskaSelector = 'q2-option[value=\"AK\"]';\n let option = await page.find(alaskaSelector);\n expect(option).toHaveAttribute('selected');\n expect(await select.getProperty('value')).toEqual('AK');\n expect(await input.getProperty('value')).toEqual('Alaska');\n\n await page.$eval(alaskaSelector, element => element.remove());\n await page.waitForChanges();\n\n option = await page.find(alaskaSelector);\n expect(option).toBeNull();\n expect(await select.getProperty('value')).toEqual('AK');\n expect(await input.getProperty('value')).toEqual('Alaska');\n });\n\n it('marks a newly added option as selected if it matches the value', async () => {\n page = await setup({\n html: `\n <q2-select label=\"States\" value=\"CA\">\n <q2-option value=\"AL\" display=\"Alabama\">Alabama</q2-option>\n <q2-option value=\"AZ\" display=\"Arizona\">Arizona</q2-option>\n <q2-option value=\"AR\" display=\"Arkansas\">Arkansas</q2-option>\n <q2-option value=\"AK\" display=\"Alaska\" selected>Alaska</q2-option>\n </q2-select>\n `,\n });\n await page.waitForChanges();\n\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n\n await page.waitForChanges();\n expect(await select.getProperty('value')).toEqual('CA');\n expect(await input.getProperty('value')).toEqual('CA');\n\n await page.evaluate(() => {\n const option = document.createElement('q2-option');\n option.value = 'CA';\n option.display = 'California';\n option.textContent = 'California';\n return document.querySelector('q2-select').appendChild(option);\n });\n await page.waitForChanges();\n\n const californiaSelector = 'q2-option[value=\"CA\"]';\n const option = await page.find(californiaSelector);\n expect(option).toHaveAttribute('selected');\n expect(await select.getProperty('value')).toEqual('CA');\n expect(await input.getProperty('value')).toEqual('CA');\n });\n });\n\n describe('when multiple is true', () => {\n it('does not modify selectedOptions when a selected option is removed', async () => {\n page = await setup({\n html: `\n <q2-select label=\"States\" multiple>\n <q2-option value=\"AL\" display=\"Alabama\">Alabama</q2-option>\n <q2-option value=\"AZ\" display=\"Arizona\">Arizona</q2-option>\n <q2-option value=\"AR\" display=\"Arkansas\">Arkansas</q2-option>\n <q2-option value=\"AK\" display=\"Alaska\">Alaska</q2-option>\n </q2-select>\n `,\n });\n\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n options = await page.findAll('q2-option');\n await select.setProperty('selectedOptions', ['AL', 'AZ']);\n await page.waitForChanges();\n\n let selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions.length).toBe(2);\n expect(options.length).toBe(4);\n expect(await input.getProperty('value')).toEqual('Alabama');\n\n const alabamaSelector = 'q2-option[value=\"AL\"]';\n await page.$eval(alabamaSelector, element => element.remove());\n await page.waitForChanges();\n\n const alabamaOption = await page.find(alabamaSelector);\n expect(alabamaOption).toBeNull();\n expect(await select.getProperty('selectedOptions')).toEqual(['AL', 'AZ']);\n expect(await input.getProperty('value')).toEqual('Alabama');\n options = await page.findAll('q2-option');\n expect(options.length).toBe(3);\n selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions.length).toBe(1);\n });\n\n it('marks a newly added option as selected if it matches a selectedOptions value', async () => {\n page = await setup({\n html: `\n <q2-select label=\"States\" multiple>\n <q2-option value=\"AL\" display=\"Alabama\">Alabama</q2-option>\n <q2-option value=\"AZ\" display=\"Arizona\">Arizona</q2-option>\n <q2-option value=\"AR\" display=\"Arkansas\">Arkansas</q2-option>\n <q2-option value=\"AK\" display=\"Alaska\" selected>Alaska</q2-option>\n </q2-select>\n `,\n });\n\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n options = await page.findAll('q2-option');\n await select.setProperty('selectedOptions', ['AL', 'CA']);\n await page.waitForChanges();\n\n let selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions.length).toBe(1);\n expect(options.length).toBe(4);\n expect(await input.getProperty('value')).toEqual('Alabama');\n\n await page.evaluate(() => {\n const option = document.createElement('q2-option');\n option.value = 'CA';\n option.display = 'California';\n option.textContent = 'California';\n return document.querySelector('q2-select').appendChild(option);\n });\n await page.waitForChanges();\n\n const californiaSelector = 'q2-option[value=\"CA\"]';\n const option = await page.find(californiaSelector);\n expect(option).toHaveAttribute('selected');\n expect(await select.getProperty('selectedOptions')).toEqual(['AL', 'CA']);\n expect(await input.getProperty('value')).toEqual('Alabama');\n options = await page.findAll('q2-option');\n expect(options.length).toBe(5);\n selectedOptions = await page.findAll('q2-option[selected]');\n expect(selectedOptions.length).toBe(2);\n });\n });\n });\n\n describe('Accessibility', () => {\n describe('aXe DevTools', () => {\n it('does not have accessibility violations', async () => {\n const page = await setup({\n html: `\n <q2-select label=\"Test\" value=\"option-1\">\n <q2-option value=\"option-1\" display=\"Option Text\">Option Text</q2-option>\n <q2-option value=\"option-2\" display=\"Option Text\">Option Text</q2-option>\n </q2-select>\n `,\n });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n describe('Accessibility Tree', () => {\n it(\"option-list should have a role of 'listbox' and the options a role of 'option'\", async () => {\n page = await setup({\n html: `\n <q2-select label=\"My select\">\n <q2-option value=\"option-1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"option-2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"option-3\" display=\"Option 3\">Option 3</q2-option>\n </q2-select>\n `,\n });\n\n input = await page.find('q2-select >>> q2-input');\n await input.click();\n await page.waitForChanges();\n\n popover = await page.find('q2-select >>> q2-popover');\n expect(await popover.getProperty('open')).toEqual(true);\n\n const snapshot = await page.accessibility.snapshot();\n const optionList = snapshot.children[2];\n\n expect(optionList.role).toEqual('listbox');\n expect(optionList.children).toHaveLength(3);\n optionList.children.forEach(child => {\n expect(child.role).toEqual('option');\n expect(child.name).toBeTruthy();\n });\n });\n });\n describe('Keyboard Controls', () => {\n let options: E2EElement[];\n const isInputFocused = async (page: E2EPage) => {\n return page.$eval('body', () => document.activeElement.shadowRoot.activeElement.tagName === 'Q2-INPUT');\n };\n const isBodyFocused = async (page: E2EPage) => {\n return page.$eval('body', () => document.activeElement.tagName === 'BODY');\n };\n\n beforeEach(async () => {\n jest.setTimeout(5000);\n page = await setup({\n html: `\n <q2-select>\n <q2-option value=\"1\" display=\"Option 1\">Option 1</q2-option>\n <q2-option value=\"2\" display=\"Option 2\">Option 2</q2-option>\n <q2-option value=\"3\" display=\"Option 3\">Option 3</q2-option>\n <q2-option value=\"4\" display=\"Option 4\">Option 4</q2-option>\n <q2-option value=\"5\" display=\"Option 5\">Option 5</q2-option>\n <q2-option value=\"6\" display=\"Option 6\">Option 6</q2-option>\n <q2-option value=\"7\" display=\"Option 7\">Option 7</q2-option>\n <q2-option value=\"8\" display=\"Option 8\">Option 8</q2-option>\n <q2-option value=\"9\" display=\"Option 9\">Option 9</q2-option>\n <q2-option value=\"10\" display=\"Option 10\">Option 10</q2-option>\n <q2-option value=\"11\" display=\"Option 11\">Option 11</q2-option>\n <q2-option value=\"12\" display=\"Option 12\">Option 12</q2-option>\n <q2-option value=\"13\" display=\"Option 13\">Option 13</q2-option>\n <q2-option value=\"14\" display=\"Option 14\">Option 14</q2-option>\n <q2-option value=\"15\" display=\"Option 15\">Option 15</q2-option>\n </q2-select>\n `,\n });\n await page.waitForChanges();\n select = await page.find('q2-select');\n input = await page.find('q2-select >>> q2-input');\n popover = await page.find('q2-select >>> q2-popover');\n options = await page.findAll('q2-option');\n });\n\n describe('when input has focus', () => {\n beforeEach(async () => {\n await input.focus();\n });\n\n it('opens the dropdown, and moves focus to default option on ArrowDown', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('ArrowDown');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n const firstOption = options[0];\n expect(firstOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));\n });\n\n it('opens the dropdown, and moves focus to last option on ArrowUp', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('ArrowUp');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n const lastOption = options[options.length - 1];\n expect(lastOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(lastOption.getAttribute('value'));\n });\n\n it('opens the dropdown on Space', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('Space');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('opens the dropdown, and focuses first option on Home', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('Home');\n expect(await popover.getProperty('open')).toBe(true);\n const firstOption = options[0];\n expect(firstOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));\n });\n\n it('opens the dropdown and focuses last option on End', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('End');\n expect(await popover.getProperty('open')).toBe(true);\n const lastOption = options[options.length - 1];\n expect(lastOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(lastOption.getAttribute('value'));\n });\n\n it('pseudo-searches for option if printable character is pressed', async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option display=\"Nebraska\" value=\"NE\">Nebraska</q2-option>\n <q2-option display=\"Nevada\" value=\"NV\">Nevada</q2-option>\n <q2-option display=\"New Hampshire\" value=\"NH\">New Hampshire</q2-option>\n <q2-option display=\"New Jersey\" value=\"NJ\">New Jersey</q2-option>\n <q2-option display=\"New Mexico\" value=\"NM\">New Mexico</q2-option>\n <q2-option display=\"New York\" value=\"NY\">New York</q2-option>\n <q2-option display=\"North Carolina\" value=\"NC\">North Carolina</q2-option>\n <q2-option display=\"North Dakota\" value=\"ND\">North Dakota</q2-option>\n <q2-option display=\"Ohio\" value=\"OH\">Ohio</q2-option>\n <q2-option display=\"Oklahoma\" value=\"OK\">Oklahoma</q2-option>\n <q2-option display=\"Oregon\" value=\"OR\">Oregon</q2-option>\n <q2-option display=\"Pennsylvania\" value=\"PA\">Pennsylvania</q2-option>\n <q2-option display=\"Rhode Island\" value=\"RI\">Rhode Island</q2-option>\n </q2-select>\n `,\n });\n\n input = await page.find('q2-select >>> q2-input');\n await input.type('o');\n\n const q2Select = await page.find('q2-select');\n const selectInput = await page.find('q2-select >>> q2-input');\n expect(await selectInput.getProperty('value')).toEqual('Ohio');\n expect(await q2Select.getProperty('value')).toEqual('OH');\n\n await input.type('k');\n expect(await selectInput.getProperty('value')).toEqual('Oklahoma');\n expect(await q2Select.getProperty('value')).toEqual('OK');\n\n // Wait for debounce\n await waitForTimeout(2000);\n\n await input.type('New J');\n expect(await selectInput.getProperty('value')).toEqual('New Jersey');\n expect(await q2Select.getProperty('value')).toEqual('NJ');\n });\n\n describe('when value is present', () => {\n beforeEach(async () => {\n await select.setProperty('value', '3');\n await page.waitForChanges();\n });\n\n it('opens the dropdown, and moves focus to first selected option on ArrowDown', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('ArrowDown');\n expect(await popover.getProperty('open')).toBe(true);\n const selectedOption = options[2];\n expect(selectedOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(selectedOption.getAttribute('value'));\n });\n\n it('opens the dropdown, and moves focus to first selected option on ArrowUp', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('ArrowUp');\n expect(await popover.getProperty('open')).toBe(true);\n const selectedOption = options[2];\n expect(selectedOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(selectedOption.getAttribute('value'));\n });\n });\n });\n\n it('pseudo-searches for next matching option if same character is pressed 3 times', async () => {\n page = await setup({\n html: `\n <q2-select>\n <q2-option display=\"Nebraska\" value=\"NE\">Nebraska</q2-option>\n <q2-option display=\"Ohio\" value=\"OH\">Ohio</q2-option>\n <q2-option display=\"Nevada\" value=\"NV\">Nevada</q2-option>\n <q2-option display=\"Oklahoma\" value=\"OK\">Oklahoma</q2-option>\n <q2-option display=\"New Hampshire\" value=\"NH\">New Hampshire</q2-option>\n </q2-select>\n `,\n });\n\n input = await page.find('q2-select >>> q2-input');\n await input.press('n');\n await page.waitForChanges();\n\n const q2Select = await page.find('q2-select');\n const selectInput = await page.find('q2-select >>> q2-input');\n expect(await selectInput.getProperty('value')).toEqual('Nebraska');\n expect(await q2Select.getProperty('value')).toEqual('NE');\n\n await input.press('n');\n await page.waitForChanges();\n expect(await selectInput.getProperty('value')).toEqual('Nevada');\n expect(await q2Select.getProperty('value')).toEqual('NV');\n\n await input.press('n');\n await page.waitForChanges();\n expect(await selectInput.getProperty('value')).toEqual('New Hampshire');\n expect(await q2Select.getProperty('value')).toEqual('NH');\n });\n\n describe('focus', () => {\n let page: E2EPage;\n let select: E2EElement;\n beforeEach(async () => {\n page = await setup({ html: `<q2-select></q2-select>` });\n select = await page.find('q2-select');\n\n expect(await innerActiveTestId(page)).toBeUndefined();\n });\n\n const innerActiveTestId = async (page: E2EPage) => {\n return page.$eval('q2-select', el => el.shadowRoot.activeElement?.getAttribute('test-id'));\n };\n\n it('focuses inner button when focus event is dispatched', async () => {\n await select.triggerEvent('focus');\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('toggleDropdown');\n });\n\n it('focuses inner button when element.focus() is called', async () => {\n await select.focus();\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('toggleDropdown');\n });\n });\n\n describe('when dropdown has focus', () => {\n beforeEach(async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[0]).toHaveAttribute('active');\n });\n\n it('sets the value, closes the dropdown, and focuses input on Enter', async () => {\n await popover.press('Enter');\n expect(await select.getProperty('value')).toEqual('1');\n expect(await popover.getProperty('open')).toBe(false);\n expect(await isInputFocused(page)).toBe(true);\n });\n\n it('sets the value, closes the dropdown, and focuses input on Space', async () => {\n await popover.press(' ');\n expect(await select.getProperty('value')).toEqual('1');\n expect(await popover.getProperty('open')).toBe(false);\n expect(await isInputFocused(page)).toBe(true);\n });\n\n it('sets the value, closes the dropdown, and move to next element on Tab', async () => {\n await popover.press('Tab');\n expect(await select.getProperty('value')).toEqual('1');\n expect(await popover.getProperty('open')).toBe(false);\n expect(await isBodyFocused(page)).toBe(true);\n });\n\n it('closes dropdown, and focuses input on Escape', async () => {\n await popover.press('Escape');\n expect(await select.getProperty('value')).toBeUndefined();\n expect(await popover.getProperty('open')).toBe(false);\n expect(await isInputFocused(page)).toBe(true);\n });\n\n it('focuses next option on ArrowDown', async () => {\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(await getFocusedOptionValue(page)).toBe(options[1].getAttribute('value'));\n });\n\n it('focuses previous option on ArrowUp', async () => {\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(options[1]).toHaveAttribute('active');\n await popover.press('ArrowUp');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[0]).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toBe(options[0].getAttribute('value'));\n });\n\n it('focuses first option on Home', async () => {\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(options[1]).toHaveAttribute('active');\n await popover.press('Home');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[0]).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toBe(options[0].getAttribute('value'));\n });\n\n it('focuses last option on End', async () => {\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(options[1]).toHaveAttribute('active');\n await popover.press('End');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[14]).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toBe(options[14].getAttribute('value'));\n });\n\n it('jumps focus forward 10 options on PageDown', async () => {\n await popover.press('PageDown');\n await page.waitForChanges();\n expect(options[10]).toHaveAttribute('active');\n await popover.press('PageDown');\n await page.waitForChanges();\n expect(options[14]).toHaveAttribute('active');\n });\n\n it('jumps focus back 10 options on PageUp', async () => {\n await popover.press('End');\n await page.waitForChanges();\n expect(options[14]).toHaveAttribute('active');\n await popover.press('PageUp');\n await page.waitForChanges();\n expect(options[4]).toHaveAttribute('active');\n await popover.press('PageUp');\n await page.waitForChanges();\n expect(options[0]).toHaveAttribute('active');\n });\n });\n\n describe('when input has value', () => {\n beforeEach(async () => {\n await select.setAttribute('value', '2');\n await page.waitForChanges();\n expect(options[1]).toHaveAttribute('selected');\n expect(await popover.getProperty('open')).toBe(false);\n changeSpy = await select.spyOnEvent('change');\n inputSpy = await select.spyOnEvent('input');\n expect(await input.getProperty('value')).toEqual('Option 2');\n });\n\n describe('when dropdown has focus', () => {\n beforeEach(async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[1]).toHaveAttribute('active');\n });\n\n it('closes dropdown, maintains values, and focuses input on Escape', async () => {\n await popover.press('Escape');\n await page.waitForChanges();\n expect(await select.getProperty('value')).toEqual('2');\n expect(await popover.getProperty('open')).toBe(false);\n expect(await isInputFocused(page)).toBe(true);\n });\n });\n });\n\n describe('when searchable', () => {\n beforeEach(async () => {\n select.setAttribute('searchable', true);\n await page.waitForChanges();\n });\n\n describe('when search query is typed', () => {\n it('ArrowDown: focuses first option in search results', async () => {\n await input.press('3');\n await input.press('ArrowDown');\n await page.waitForChanges();\n expect(options[2]).toHaveAttribute('active');\n expect(await getFocusedValue(page)).toBe(options[2].getAttribute('value'));\n });\n it('ArrowUp: focuses last option in search results', async () => {\n await input.press('3');\n await input.press('ArrowUp');\n await page.waitForChanges();\n expect(options[12]).toHaveAttribute('active');\n expect(await getFocusedValue(page)).toBe(options[12].getAttribute('value'));\n });\n });\n\n describe('when options are populated with `q2-card` elements', () => {\n beforeEach(async () => {\n page = await setup({\n html: `\n <q2-select searchable multiline-options>\n <q2-option value=\"1\">\n <q2-card title=\"Foo\"></q2-card>\n </q2-option>\n <q2-option value=\"2\">\n <q2-card title=\"Bar\"></q2-card>\n </q2-option>\n <q2-option value=\"3\">\n <q2-card title=\"Baz\"></q2-card>\n </q2-option>\n </q2-select>\n `,\n });\n input = await page.find('q2-select >>> q2-input');\n });\n\n it('can search based on the `q2-card` title attribute', async () => {\n await input.focus();\n await input.type('Bar');\n\n options = await page.findAll('q2-option:not([hidden])');\n expect(options).toHaveLength(1);\n });\n });\n\n describe('when input has value', () => {\n beforeEach(async () => {\n select.setAttribute('value', '2');\n await page.waitForChanges();\n expect(options[1]).toHaveAttribute('selected');\n expect(await popover.getProperty('open')).toBe(false);\n changeSpy = await select.spyOnEvent('change');\n inputSpy = await select.spyOnEvent('input');\n expect(await input.getProperty('value')).toEqual('Option 2');\n });\n\n it('clears the input on focus', async () => {\n await input.focus();\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual('');\n\n await input.press('5');\n expect(await input.getProperty('value')).toEqual('5');\n\n expect(await popover.getProperty('open')).toBe(true);\n expect(await page.findAll('q2-option:not([hidden])')).toHaveLength(2);\n });\n\n it('clears the input on focus without emitting events', async () => {\n await input.focus();\n expect(await input.getProperty('value')).toEqual('');\n expect(changeSpy).not.toHaveReceivedEvent();\n expect(inputSpy).not.toHaveReceivedEvent();\n });\n\n describe('when input has focus', () => {\n it('clears the value on keypress and emits change and input events', async () => {\n await input.focus();\n expect(await input.getProperty('value')).toEqual('');\n await input.press('X');\n\n expect(changeSpy).toHaveReceivedEventDetail({ value: '' });\n expect(inputSpy).toHaveReceivedEventDetail({ query: 'X' });\n expect(await popover.getProperty('open')).toBe(true);\n expect(await select.getProperty('value')).toEqual('');\n expect(await input.getProperty('value')).toEqual('X');\n const firstOption = options[1];\n expect(firstOption).not.toHaveAttribute('selected');\n });\n\n it('opens the dropdown, and focuses next option on ArrowDown', async () => {\n await input.press('ArrowDown');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n const firstOption = options[1];\n expect(firstOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));\n });\n\n it('opens the dropdown, and focuses first option on ArrowUp', async () => {\n await input.press('ArrowUp');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n const firstOption = options[1];\n expect(firstOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));\n });\n\n it('closes dropdown if open on Escape', async () => {\n await input.press('ArrowDown');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n\n await input.press('Escape');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(false);\n });\n });\n });\n\n describe('when input is empty', () => {\n it('opens the dropdown on Space', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: ' ',\n });\n expect(await popover.getProperty('open')).toBe(true);\n });\n it('opens the dropdown on Enter', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'Enter',\n });\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n it('opens the dropdown, and focuses first option on ArrowDown', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n expect(await popover.getProperty('open')).toBe(true);\n const firstOption = options[0];\n expect(firstOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(firstOption.getAttribute('value'));\n });\n\n it('opens the dropdown, and focuses last option on ArrowUp', async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowUp',\n });\n expect(await popover.getProperty('open')).toBe(true);\n const lastOption = options[options.length - 1];\n expect(lastOption).toHaveAttribute('active');\n expect(await getFocusedOptionValue(page)).toEqual(lastOption.getAttribute('value'));\n });\n\n it(\"clears typed value if dropdown isn't open on Escape\", async () => {\n await input.focus();\n await input.type('Option');\n await page.waitForChanges();\n expect(await input.getProperty('value')).toEqual('Option');\n await input.press('Escape');\n expect(await input.getProperty('value')).toEqual('');\n });\n\n describe('when printable character is pressed', () => {\n it('searches for option', async () => {\n const eventData: any = {\n key: 'n',\n detail: {\n value: 'option 2',\n },\n };\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', eventData);\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', eventData);\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keyup', eventData);\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[0]).toHaveAttribute('hidden');\n expect(options[1]).not.toHaveAttribute('hidden');\n expect(options[2]).toHaveAttribute('hidden');\n });\n\n it('enters dropdown on Arrow Down', async () => {\n const eventData: any = {\n key: 'n',\n detail: {\n value: 'option 2',\n },\n };\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', eventData);\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'input', eventData);\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keyup', eventData);\n expect(await popover.getProperty('open')).toBe(true);\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n const visibleOption = options[1];\n expect(await getFocusedOptionValue(page)).toEqual(visibleOption.getAttribute('value'));\n });\n });\n\n describe('when multiple', () => {\n beforeEach(async () => {\n select.setProperty('multiple', true);\n await page.waitForChanges();\n });\n\n it('does not show an indicator of total selected options', async () => {\n expect(await popover.getProperty('open')).toBe(false);\n await input.press('ArrowDown');\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n\n input = await page.find('q2-select >>> q2-input');\n expect(input).not.toHaveAttribute('badge-value');\n });\n });\n });\n });\n\n describe('when multiple', () => {\n beforeEach(async () => {\n await select.setProperty('multiple', true);\n });\n\n describe('when visibility controls are focused', () => {\n let allOptionsRadio: E2EElement;\n beforeEach(async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n expect(await popover.getProperty('open')).toBe(true);\n await popover.press('Space');\n expect(options[0]).toHaveAttribute('selected');\n allOptionsRadio = await page.find('q2-select >>> [test-id=allOptionsButton]');\n selectedOptionsRadio = await page.find('q2-select >>> [test-id=selectedOptionsButton]');\n selectedOptionsRadioLabel = await page.find(\n 'q2-select >>> [test-id=selectedOptionsButton] + label'\n );\n allOptionsRadioLabel = await page.find('q2-select >>> [test-id=allOptionsButton] + label');\n await allOptionsRadio.focus();\n expect(options[0]).toHaveAttribute('active');\n expect(await popover.getProperty('open')).toBe(true);\n });\n\n describe('when all options button is focused', () => {\n beforeEach(async () => {\n await allOptionsRadioLabel.click();\n await page.waitForChanges();\n expect(await allOptionsRadio.getProperty('checked')).toEqual(true);\n });\n\n it('moves focus to first option on ArrowDown', async () => {\n await allOptionsRadio.press('ArrowDown');\n await page.waitForChanges();\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n });\n\n it('moves focus to first option on ArrowUp', async () => {\n await allOptionsRadio.press('ArrowUp');\n await page.waitForChanges();\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n });\n });\n\n describe('when selected options button is focused', () => {\n beforeEach(async () => {\n await selectedOptionsRadioLabel.click();\n await page.waitForChanges();\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n });\n\n it('moves focus to first option on ArrowDown', async () => {\n await selectedOptionsRadio.press('ArrowDown');\n await page.waitForChanges();\n expect(await allOptionsRadio.getProperty('checked')).toEqual(true);\n });\n\n it('moves focus to all options radio on ArrowUp', async () => {\n await selectedOptionsRadio.press('ArrowUp');\n await page.waitForChanges();\n expect(await allOptionsRadio.getProperty('checked')).toEqual(true);\n });\n });\n\n it('selects on Click', async () => {\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(false);\n await selectedOptionsRadioLabel.click();\n await page.waitForChanges();\n expect(await selectedOptionsRadio.getProperty('checked')).toEqual(true);\n expect(options[0]).toHaveAttribute('active');\n });\n });\n\n describe('when dropdown has focus', () => {\n beforeEach(async () => {\n await dispatchEvent(page, ['q2-select', 'q2-input'], 'keydown', {\n key: 'ArrowDown',\n });\n await page.waitForChanges();\n expect(await popover.getProperty('open')).toBe(true);\n expect(options[0]).toHaveAttribute('active');\n });\n\n const selectAndDeselectMultipleOptions = async (key: 'Space' | 'Enter') => {\n // Selecting second option\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(options[1]).not.toHaveAttribute('selected');\n await popover.press(key);\n expect(options[1]).toHaveAttribute('selected');\n expect(await popover.getProperty('open')).toBe(true);\n expect(await input.getProperty('value')).toEqual('Option 2');\n expect(await select.getProperty('selectedOptions')).toEqual(['2']);\n expect(input).not.toHaveAttribute('badge-value');\n\n // Selecting fourth option\n await popover.press('ArrowDown');\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(options[3]).toHaveAttribute('active');\n expect(options[3]).not.toHaveAttribute('selected');\n await popover.press(key);\n await page.waitForChanges();\n expect(options[3]).toHaveAttribute('selected');\n expect(options[3]).toHaveAttribute('active');\n expect(await popover.getProperty('open')).toBe(true);\n expect(await input.getProperty('value')).toEqual('Option 2');\n expect(await select.getProperty('selectedOptions')).toEqual(['2', '4']);\n expect(input).toEqualAttribute('badge-value', '+1');\n\n // Deselecting fourth option\n await popover.press(key);\n expect(options[3]).not.toHaveAttribute('selected');\n expect(options[3]).toHaveAttribute('active');\n expect(await popover.getProperty('open')).toBe(true);\n expect(await input.getProperty('value')).toEqual('Option 2');\n expect(await select.getProperty('selectedOptions')).toEqual(['2']);\n expect(input).not.toHaveAttribute('badge-value');\n\n // Selecting fifth option\n await popover.press('ArrowDown');\n await page.waitForChanges();\n expect(options[4]).toHaveAttribute('active');\n expect(options[4]).not.toHaveAttribute('selected');\n await popover.press(key);\n await page.waitForChanges();\n expect(options[4]).toHaveAttribute('selected');\n expect(await input.getProperty('value')).toEqual('Option 2');\n expect(await select.getProperty('selectedOptions')).toEqual(['2', '5']);\n expect(input).toEqualAttribute('badge-value', '+1');\n };\n\n it('can select and deselect multiple options via Space without closing dropdown', async () => {\n await selectAndDeselectMultipleOptions('Space');\n });\n\n it('selects and deselects option on Enter, without closing dropdown', async () => {\n await selectAndDeselectMultipleOptions('Enter');\n });\n });\n });\n });\n describe('Other', () => {});\n });\n});\n"]}