import { beVisible, haveText, html, test } from '../utils' test('element side effects are cleaned up after the elements are removed', html`
remove

`, ({ get }) => { get('h1').should(haveText('2')) get('h2').should(haveText('1')) get('button').click() get('h1').should(haveText('3')) get('h2').should(haveText('2')) get('a').click() get('button').click() get('h1').should(haveText('3')) get('h2').should(haveText('3')) } ) test('nested element side effects are cleaned up after the parent is removed', html`
remove

`, ({ get }) => { get('h1').should(haveText('2')) get('h2').should(haveText('1')) get('button').click() get('h1').should(haveText('3')) get('h2').should(haveText('2')) get('a').click() get('button').click() get('h1').should(haveText('3')) get('h2').should(haveText('3')) } ) test('element magic-based side effects are cleaned up after the element is removed', html`
remove

`, ({ get }) => { get('h1').should(haveText('1')) get('h2').should(haveText('1')) get('button').click() get('h1').should(haveText('2')) get('h2').should(haveText('2')) get('a').click() get('button').click() get('h1').should(haveText('3')) get('h2').should(haveText('2')) } ) test('can mutate directive value', html`
`, ({ get }) => { get('span').should(haveText('bar')) get('button').click() get('span').should(haveText('baz')) } ) test('can add new directive', html`
`, ({ get }) => { get('span').should(haveText('')) get('button').click() get('span').should(haveText('bar')) } ) test('can pause and queue mutations for later resuming/flushing', html`

remove add add add
`, ({ get }) => { get('h1').should(haveText('1')) get('button').click() get('h1').should(haveText('2')) get('#remove').click() get('button').click() get('h1').should(haveText('2')) get('#defer').click() get('#add').click() get('button').click() get('h1').should(haveText('2')) get('#flush').click() get('button').click() get('h1').should(haveText('3')) } ) test('does not initialise components twice when contained in multiple mutations', html`
`, ({ get }) => { get('span#one').should(haveText('0')) get('span#two').should(haveText('0')) get('button').click() get('span#one').should(haveText('1')) get('span#two').should(haveText('1')) } ) test('directives keep working when node is moved into a different one', html`
`, ({ get }) => { get('span').should(haveText('0')) get('button#one').click() get('span').should(haveText('1')) get('button#two').click() get('p').should(beVisible()) get('button#one').click() get('span').should(haveText('2')) } ) test('no side effects when directives are added to an element that is removed afterwards', html`

`, ({ get }) => { get('span').should(haveText('0')) get('button').click() get('input').type('a') get('span').should(haveText('0')) } )