`,
({ 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`
`,
({ 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`
`,
({ 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`
`,
({ 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`