import { beVisible, beHidden, 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')) }, ) 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')) }, ); // @todo: support default-value 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(haveAttribute('value', 'null')) 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()) }, ) // @todo support horizontal prop test('"horizontal" 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('{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('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('.active').should(notExist()) get('[toggle]').click() get('[option="2"') .click() .should(haveClasses(['selected'])) get('[select-tim]').click() get('[option="4"]').should(haveClasses(['selected'])) get('[toggle]').should(haveText('4')) }, ) // @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')) }, ) test.only('"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 "by" attribute