import { beVisible, beHidden, haveAttribute, haveClasses, notHaveClasses, haveText, html, notBeVisible, notHaveAttribute, notExist, haveFocus, test, ensureNoConsoleWarns} from '../../../utils' test('it works with x-model', [html`
`], ({ get }) => { get('ul').should(notBeVisible()) get('button') .should(haveText('Select Person')) .click() get('ul').should(beVisible()) get('button').click() get('ul').should(notBeVisible()) get('button').click() get('[option="2"]').click() get('ul').should(notBeVisible()) get('button').should(haveText('Arlene Mccoy')) }, ) test('it works with internal state', [html`
`], ({ get }) => { get('ul').should(notBeVisible()) get('button') .should(haveText('Select Person')) .click() get('ul').should(beVisible()) get('button').click() get('ul').should(notBeVisible()) get('button').click() get('[option="2"]').click() get('ul').should(notBeVisible()) get('button').should(haveText('Arlene Mccoy')) }, ) test('$listbox/$listboxOption', [html`
`], ({ get }) => { get('article').should(haveText('')) get('[option="5"]').should(haveClasses(['disabled'])) get('button') .should(haveText('Select Person')) .click() get('article').should(haveText('Wade Cooper')) get('[option="1"]').should(haveClasses(['active'])) get('ul').type('{downarrow}') get('article').should(haveText('Arlene Mccoy')) get('[option="2"]').should(haveClasses(['active'])) get('button').should(haveText('Select Person')) get('[option="2"]').click() get('button').should(haveText('Arlene Mccoy')) get('[option="2"]').should(haveClasses(['selected'])) }, ) test('"name" prop', [html`
`], ({ get }) => { get('input').should(haveAttribute('value', 'null')) get('button').click() get('input').should(haveAttribute('value', 'null')) get('[option="2"]').click() get('input').should(beHidden()) .should(haveAttribute('name', 'person')) .should(haveAttribute('value', '2')) .should(haveAttribute('type', 'hidden')) get('button').click() get('[option="4"]').click() get('input').should(beHidden()) .should(haveAttribute('name', 'person')) .should(haveAttribute('value', '4')) .should(haveAttribute('type', 'hidden')) }, ); test('"name" prop with object value', [html`
`], ({ get }) => { get('input[name="person"]').should(haveAttribute('value', 'null')) get('button').click() get('[name="person[id]"]').should(notExist()) get('[option="2"]').click() get('input[name="person"]').should(notExist()) get('[name="person[id]"]').should(beHidden()) .should(haveAttribute('value', '2')) .should(haveAttribute('type', 'hidden')) get('[name="person[name]"]').should(beHidden()) .should(haveAttribute('value', 'Arlene Mccoy')) .should(haveAttribute('type', 'hidden')) get('button').click() get('[option="4"]').click() get('[name="person[id]"]').should(beHidden()) .should(haveAttribute('value', '4')) .should(haveAttribute('type', 'hidden')) get('[name="person[name]"]').should(beHidden()) .should(haveAttribute('value', 'Tom Cook')) .should(haveAttribute('type', 'hidden')) }, ); test('"default-value" prop', [html`
`], ({ get }) => { get('input').should(beHidden()) .should(haveAttribute('name', 'person')) .should(haveAttribute('value', '2')) .should(haveAttribute('type', 'hidden')) }, ); test('"multiple" prop', [html`
`], ({ get }) => { get('button').click() get('[option="2"]').click() get('ul').should(beVisible()) get('button').should(haveText('2')) get('[option="4"]').click() get('button').should(haveText('2,4')) get('ul').should(beVisible()) get('[option="4"]').click() get('button').should(haveText('2')) get('ul').should(beVisible()) }, ); test('"multiple" and "name" props together', [html`
`], ({ get }) => { get('input[name="people"]').should(notExist()) get('button').click() get('[name="people[0][id]"]').should(notExist()) get('[option="2"]').click() get('ul').should(beVisible()) get('button').should(haveText('2')) get('input[name="people"]').should(notExist()) get('[name="people[0][id]"]').should(beHidden()) .should(haveAttribute('value', '2')) .should(haveAttribute('type', 'hidden')) get('[name="people[0][name]"]').should(beHidden()) .should(haveAttribute('value', 'Arlene Mccoy')) .should(haveAttribute('type', 'hidden')) get('[option="4"]').click() get('[name="people[0][id]"]').should(beHidden()) .should(haveAttribute('value', '2')) .should(haveAttribute('type', 'hidden')) get('[name="people[0][name]"]').should(beHidden()) .should(haveAttribute('value', 'Arlene Mccoy')) .should(haveAttribute('type', 'hidden')) get('[name="people[1][id]"]').should(beHidden()) .should(haveAttribute('value', '4')) .should(haveAttribute('type', 'hidden')) get('[name="people[1][name]"]').should(beHidden()) .should(haveAttribute('value', 'Tom Cook')) .should(haveAttribute('type', 'hidden')) get('button').should(haveText('2,4')) get('ul').should(beVisible()) get('[option="4"]').click() get('[name="people[0][id]"]').should(beHidden()) .should(haveAttribute('value', '2')) .should(haveAttribute('type', 'hidden')) get('[name="people[0][name]"]').should(beHidden()) .should(haveAttribute('value', 'Arlene Mccoy')) .should(haveAttribute('type', 'hidden')) get('[name="people[1][id]"]').should(notExist()) get('[name="people[1][name]"]').should(notExist()) get('button').should(haveText('2')) get('ul').should(beVisible()) }, ); test('keyboard controls', [html`
`], ({ get }) => { get('.active').should(notExist()) get('button').focus().type(' ') get('[options]') .should(beVisible()) .should(haveFocus()) get('[option="1"]') .should(haveClasses(['active'])) get('[options]') .type('{downarrow}') get('[option="2"]') .should(haveClasses(['active'])) get('[options]') .type('{downarrow}') get('[option="4"]') .should(haveClasses(['active'])) get('[options]') .type('{uparrow}') get('[option="2"]') .should(haveClasses(['active'])) get('[options]') .type('{home}') get('[option="1"]') .should(haveClasses(['active'])) get('[options]') .type('{end}') get('[option="10"]') .should(haveClasses(['active'])) get('[options]') .type('{pageUp}') get('[option="1"]') .should(haveClasses(['active'])) get('[options]') .type('{pageDown}') get('[option="10"]') .should(haveClasses(['active'])) get('[options]') .tab() .should(haveFocus()) .should(beVisible()) .tab({ shift: true }) .should(haveFocus()) .should(beVisible()) .type('{esc}') .should(notBeVisible()) }, ) test('"horizontal" keyboard controls', [html`
`], ({ get }) => { get('.active').should(notExist()) get('button').focus().type(' ') get('[options]') .should(haveAttribute('aria-orientation', 'horizontal')) .should(beVisible()) .should(haveFocus()) get('[option="1"]') .should(haveClasses(['active'])) get('[options]') .type('{rightarrow}') get('[option="2"]') .should(haveClasses(['active'])) get('[options]') .type('{rightarrow}') get('[option="4"]') .should(haveClasses(['active'])) get('[options]') .type('{leftarrow}') get('[option="2"]') .should(haveClasses(['active'])) }, ) test('"by" prop with string value', [html`
`], ({ get }) => { get('ul').should(notBeVisible()) get('button') .should(haveText('Select Person')) .click() get('ul').should(beVisible()) get('button').click() get('ul').should(notBeVisible()) get('button').click() get('[option="2"]').click() get('ul').should(notBeVisible()) get('button').should(haveText('Arlene Mccoy')) }, ) test('search', [html`
`], ({ get, wait }) => { get('.active').should(notExist()) get('button').click() get('[options]') .type('ar') get('[option="2"]') .should(haveClasses(['active'])) wait(500) get('[options]') .type('ma') get('[option="8"]') .should(haveClasses(['active'])) }, ) test('changing value manually changes internal state', [html`
`], ({ get }) => { get('[select-tim]').click() get('[option="4"]').should(haveClasses(['selected'])) get('[option="1"]').should(notHaveClasses(['selected'])) get('[toggle]').should(haveText('4')) }, ) test('has accessibility attributes', [html`
`], ({ get }) => { get('button') .should(haveAttribute('aria-haspopup', 'true')) .should(haveAttribute('aria-labelledby', 'alpine-listbox-label-1')) .should(haveAttribute('aria-expanded', 'false')) .should(notHaveAttribute('aria-controls')) .should(haveAttribute('id', 'alpine-listbox-button-1')) .click() .should(haveAttribute('aria-expanded', 'true')) .should(haveAttribute('aria-controls', 'alpine-listbox-options-1')) get('[options]') .should(haveAttribute('aria-orientation', 'vertical')) .should(haveAttribute('role', 'listbox')) .should(haveAttribute('id', 'alpine-listbox-options-1')) .should(haveAttribute('aria-labelledby', 'alpine-listbox-button-1')) .should(notHaveAttribute('aria-activedescendant')) .should(haveAttribute('tabindex', '0')) .should(haveAttribute('aria-activedescendant', 'alpine-listbox-option-1')) get('[option="1"]') .should(haveAttribute('role', 'option')) .should(haveAttribute('id', 'alpine-listbox-option-1')) .should(haveAttribute('tabindex', '-1')) .should(haveAttribute('aria-selected', 'false')) get('[option="2"]') .should(haveAttribute('role', 'option')) .should(haveAttribute('id', 'alpine-listbox-option-2')) .should(haveAttribute('tabindex', '-1')) .should(haveAttribute('aria-selected', 'false')) get('[options]') .type('{downarrow}') .should(haveAttribute('aria-activedescendant', 'alpine-listbox-option-2')) get('[option="2"]') .click() .should(haveAttribute('aria-selected', 'true')) }, ) test('"static" prop', [html`
`], ({ get }) => { get('ul').should(notBeVisible()) get('[normal-toggle]') .should(haveText('Select Person')) .click() get('ul').should(notBeVisible()) get('[real-toggle]').click() get('ul').should(beVisible()) get('[option="2"]').click() get('ul').should(beVisible()) get('[normal-toggle]').should(haveText('Arlene Mccoy')) }, ) test('works with morph', [html`
Selected:
`], ({ get }, reload, window, document) => { let toHtml = html`
Selected:
` ensureNoConsoleWarns() get('div').then(([el]) => window.Alpine.morph(el, toHtml)) get('button').should(haveText('Select Framework (updated)')) }, ) test('boolean option values', [html`
`], ({ get }) => { get('ul').should(notBeVisible()) get('button') .should(haveText('Select boolean')) .click() get('ul').should(beVisible()) get('[option="boolean-true"]').should(notHaveClasses(['selected'])) get('[option="boolean-false"]').should(notHaveClasses(['selected'])) get('[option="boolean-true"]').click() get('ul').should(notBeVisible()) get('button').should(haveText('true')) get('button').click() get('ul').should(beVisible()) get('[option="boolean-true"]').should(haveClasses(['selected'])) get('[option="boolean-false"]').should(notHaveClasses(['selected'])) get('[option="boolean-false"]').click() get('ul').should(notBeVisible()) get('button').should(haveText('false')) get('button').click() get('ul').should(beVisible()) get('[option="boolean-true"]').should(notHaveClasses(['selected'])) get('[option="boolean-false"]').should(haveClasses(['selected'])) }, ) test('integer option values', [html`
`], ({ get }) => { get('ul').should(notBeVisible()) get('button') .should(haveText('Select number')) .click() get('ul').should(beVisible()) get('[option="0"]').should(notHaveClasses(['selected'])) get('[option="1"]').should(notHaveClasses(['selected'])) get('[option="2"]').should(notHaveClasses(['selected'])) get('[option="1"]').click() get('ul').should(notBeVisible()) get('button').should(haveText('1')) get('button').click() get('ul').should(beVisible()) get('[option="0"]').should(notHaveClasses(['selected'])) get('[option="1"]').should(haveClasses(['selected'])) get('[option="2"]').should(notHaveClasses(['selected'])) get('[option="0"]').click() get('ul').should(notBeVisible()) get('button').should(haveText('0')) get('button').click() get('ul').should(beVisible()) get('[option="0"]').should(haveClasses(['selected'])) get('[option="1"]').should(notHaveClasses(['selected'])) get('[option="2"]').should(notHaveClasses(['selected'])) get('[option="2"]').click() get('ul').should(notBeVisible()) get('button').should(haveText('2')) get('button').click() get('ul').should(beVisible()) get('[option="0"]').should(notHaveClasses(['selected'])) get('[option="1"]').should(notHaveClasses(['selected'])) get('[option="2"]').should(haveClasses(['selected'])) }, ) // test "by" attribute