import { beSelected, haveText, haveValue, html, notBeSelected, test } from '../../utils'
test('$model allows you to interact with parent x-model bindings explicitly',
html`
`,
({ get }) => {
get('h1').should(haveText('bar'))
get('h2').should(haveText('bar'))
get('button').click()
get('h1').should(haveText('baz'))
get('h2').should(haveText('baz'))
}
)
test('$model accepts a callback when setting a value',
html`
`,
({ get }) => {
get('h1').should(haveText('bar'))
get('h2').should(haveText('bar'))
get('button').click()
get('h1').should(haveText('barr'))
get('h2').should(haveText('barr'))
}
)
test('$model can be used with a getter and setter',
html`
`,
({ get }) => {
get('h1').should(haveText('bar'))
get('h2').should(haveText('bar'))
get('h3').should(haveText('bar'))
get('button').click()
get('h1').should(haveText('baz'))
get('h2').should(haveText('baz'))
get('h3').should(haveText('baz'))
}
)
// @todo: this is failing...
test('$model can be used with another x-model',
html`
`,
({ get }) => {
get('h1').should(haveText('bar'))
get('h2').should(haveText('bar'))
get('option:first').should(beSelected())
get('option:last').should(notBeSelected())
get('select').
get('select').select('baz')
get('h1').should(haveText('baz'))
get('h2').should(haveText('baz'))
get('option:first').should(notBeSelected())
get('option:last').should(beSelected())
}
)
test('$model can be used on the same element as the corresponding x-model',
html`
`,
({ get }) => {
get('h1').should(haveText('bar'))
get('button').click()
get('h1').should(haveText('baz'))
}
)
test('$model destroys x-model event listeners on initialization',
html`
`,
({ get }) => {
get('h1').should(haveText('bar'))
get('input').type('baz')
get('h1').should(haveText('bar'))
}
)
test('$model doesnt destroy x-model event listeners when on an input element',
html`
`,
({ get }) => {
get('h1').should(haveText('bar'))
get('input').should(haveValue('bar'))
get('input').type('baz')
get('h1').should(haveText('barbaz'))
}
)
test('$model can watch for changing values and watcher gets cleaned up on element removal',
html`
click me
`,
({ get }) => {
get('h1').should(haveText('bar'))
get('h2').should(haveText(''))
get('button').click()
get('h1').should(haveText('baz'))
get('h2').should(haveText('baz'))
get('h2').click()
get('h3').click()
get('h1').should(haveText('bob'))
}
)
test('$model can be used as a getter/setter pair in x-data',
html`
`,
({ get }) => {
get('h2').should(haveText('bar'))
get('button').click()
get('h2').should(haveText('baz'))
}
)
test('$model can be used as a getter/setter pair in x-data with an initial value that makes x-model optional',
html`
`,
({ get }) => {
get('h2').should(haveText('bar'))
get('button').click()
get('h2').should(haveText('baz'))
}
)
test('$model can be used as a getter/setter pair in x-data on the same element when defined within a custom directive binding',
[html`