let { morph } = require('@alpinejs/morph')
let Alpine = require('alpinejs').default
let createElement = require('./createElement.js')
test('morphing an element with changed Alpine scope', () => {
let template = `
`
let dom = createElement(template)
document.body.appendChild(dom)
window.Alpine = Alpine
window.Alpine.start()
dom.querySelector('button').click()
expect(dom.querySelector('span').textContent).toEqual('baz')
morph(dom, template)
expect(dom.querySelector('span').textContent).toEqual('baz')
})
test('morphing element with changed HTML AND Alpine scope', () => {
let template = `
`
let dom = createElement(template)
document.body.appendChild(dom)
window.Alpine = Alpine
window.Alpine.start()
dom.querySelector('button').click()
expect(dom.querySelector('span').textContent).toEqual('baz')
expect(dom.querySelector('button').textContent).toEqual('Change Foo')
morph(dom, template.replace('Change Foo', 'Changed Foo'))
expect(dom.querySelector('span').textContent).toEqual('baz')
expect(dom.querySelector('button').textContent).toEqual('Changed Foo')
})
test('morphing an element with multiple nested Alpine components preserves scope', () => {
let template = `