import { beVisible, beHidden, haveAttribute, haveClasses, notHaveClasses, haveText, contain, notContain, html, notBeVisible, notHaveAttribute, notExist, haveFocus, test, haveValue} from '../../../utils'
test('it works with x-model',
[html`
`],
({ get }) => {
get('ul').should(notBeVisible())
get('button').click()
get('ul').should(beVisible())
get('button').click()
get('ul').should(notBeVisible())
get('button').click()
get('[option="2"]').click()
get('ul').should(notBeVisible())
get('input').should(haveValue('Arlene Mccoy'))
get('article').should(haveText('Arlene Mccoy'))
get('button').click()
get('ul').should(contain('Wade Cooper'))
.should(contain('Arlene Mccoy'))
.should(contain('Devon Webb'))
get('[option="3"]').click()
get('ul').should(notBeVisible())
get('input').should(haveValue('Devon Webb'))
get('article').should(haveText('Devon Webb'))
get('button').click()
get('ul').should(contain('Wade Cooper'))
.should(contain('Arlene Mccoy'))
.should(contain('Devon Webb'))
get('[option="1"]').click()
get('ul').should(notBeVisible())
get('input').should(haveValue('Wade Cooper'))
get('article').should(haveText('Wade Cooper'))
},
)
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'))
get('input').should(haveValue('Arlene Mccoy'))
},
)
test('$combobox/$comboboxOption',
[html`
`],
({ get }) => {
get('article').should(haveText(''))
get('[option="5"]').should(haveClasses(['disabled']))
get('button')
.should(haveText('Select Person'))
.click()
get('[option="1"]').should(haveClasses(['active']))
get('input').type('{downarrow}')
get('article').should(haveText('Arlene Mccoy'))
get('p').should(haveText('1'))
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[name="person"]').should(beHidden())
.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').click()
get('[options]')
.should(beVisible())
get('input').should(haveFocus())
get('[option="1"]')
.should(haveClasses(['active']))
get('input')
.type('{downarrow}')
get('[option="2"]')
.should(haveClasses(['active']))
get('input')
.type('{downarrow}')
get('[option="4"]')
.should(haveClasses(['active']))
get('input')
.type('{uparrow}')
get('[option="2"]')
.should(haveClasses(['active']))
get('input')
.type('{home}')
get('[option="1"]')
.should(haveClasses(['active']))
get('input')
.type('{end}')
get('[option="10"]')
.should(haveClasses(['active']))
get('input')
.type('{pageUp}')
get('[option="1"]')
.should(haveClasses(['active']))
get('input')
.type('{pageDown}')
get('[option="10"]')
.should(haveClasses(['active']))
get('input')
.tab()
.should(haveFocus())
get('[options]')
.should(beVisible())
get('input')
.type('{esc}')
get('[options]')
.should(notBeVisible())
},
)
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-combobox-label-1 alpine-combobox-button-1'))
.should(haveAttribute('aria-expanded', 'false'))
.should(notHaveAttribute('aria-controls'))
.should(haveAttribute('id', 'alpine-combobox-button-1'))
.click()
.should(haveAttribute('aria-expanded', 'true'))
.should(haveAttribute('aria-controls', 'alpine-combobox-options-1'))
get('[options]')
.should(haveAttribute('role', 'combobox'))
.should(haveAttribute('id', 'alpine-combobox-options-1'))
.should(haveAttribute('aria-labelledby', 'alpine-combobox-label-1'))
.should(notHaveAttribute('aria-activedescendant'))
.should(haveAttribute('aria-activedescendant', 'alpine-combobox-option-1'))
get('[option="1"]')
.should(haveAttribute('role', 'option'))
.should(haveAttribute('id', 'alpine-combobox-option-1'))
.should(haveAttribute('tabindex', '-1'))
.should(haveAttribute('aria-selected', 'false'))
get('[option="2"]')
.should(haveAttribute('role', 'option'))
.should(haveAttribute('id', 'alpine-combobox-option-2'))
.should(haveAttribute('tabindex', '-1'))
.should(haveAttribute('aria-selected', 'false'))
get('input')
.type('{downarrow}')
.should(haveAttribute('aria-activedescendant', 'alpine-combobox-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'))
},
)