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`

`, ` Alpine.directive('test', (el) => { Alpine.bind(el, { 'x-data'() { return { value: this.$model } } }) }) `], ({ get }) => { get('h2').should(haveText('bar')) get('button').click() get('h2').should(haveText('baz')) } )