import { beVisible, haveAttribute, haveClasses, haveText, html, notBeVisible, notHaveAttribute, notExist, haveFocus, test } 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')) }, ) // @todo fix $listboxOption.isDisabled 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'])) }, ) // @todo support "name" prop test('"name" prop', [html`
`], ({ get }) => { get('input').should(notExist()) get('input').should(beHidden()) .should(haveAttribute('name', 'person')) .should(haveAttribute('value', '2')) .should(haveAttribute('type', 'hidden')) get('[option="2"]').click() get('[option="4"]').click() get('input').should(beHidden()) .should(haveAttribute('name', 'person')) .should(haveAttribute('value', '4')) .should(haveAttribute('type', 'hidden')) }, ); // @todo support "default-value" prop test('"default-value" prop', [html`
`], ({ get }) => { get('input').should(beHidden()) .should(haveAttribute('name', 'person')) .should(haveAttribute('value', '2')) .should(haveAttribute('type', 'hidden')) }, ); // @todo support "multiple" prop 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()) }, ); // @todo support "static" prop test('keyboard controls', [html`
`], ({ get }) => { get('.active').should(notExist()) get('button').focus().type(' ') get('[options]') .should(beVisible()) .should(haveFocus()) .type('{downarrow}') get('[option="1"') .should(haveClasses(['active'])) get('[options]') .type('{downarrow}') get('[option="2"]') .should(haveClasses(['active'])) .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()) }, ) // @todo support horizontal prop and add tests for it 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'])) }, ) // @todo update these assertions to be accurate 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-items-1')) get('[options]') .should(haveAttribute('aria-orientation', 'vertical')) .should(haveAttribute('role', 'menu')) .should(haveAttribute('id', 'alpine-listbox-items-1')) .should(haveAttribute('aria-labelledby', 'alpine-listbox-button-1')) .should(notHaveAttribute('aria-activedescendant')) .should(haveAttribute('tabindex', '0')) .type('{downarrow}') .should(haveAttribute('aria-activedescendant', 'alpine-listbox-item-1')) get('[option="1"') .should(haveAttribute('role', 'menuitem')) .should(haveAttribute('id', 'alpine-listbox-item-1')) .should(haveAttribute('tabindex', '-1')) get('[option="2"]') .should(haveAttribute('role', 'menuitem')) .should(haveAttribute('id', 'alpine-listbox-item-2')) .should(haveAttribute('tabindex', '-1')) get('[options]') .type('{downarrow}') .should(haveAttribute('aria-activedescendant', 'alpine-listbox-item-2')) }, )