let { morph } = require('@alpinejs/morph')
let createElement = require('./createElement.js')
test('changed element is the same element', () => {
let dom = createElement('
foo
')
dom.querySelector('span').is_me = true
morph(dom, 'bar
')
expect(dom.querySelector('span').is_me).toBeTruthy()
})
test('non-keyed elements are replaced instead of moved', () => {
let dom = createElement('')
dom.querySelector('li').is_me = true
morph(dom, '')
expect(dom.querySelector('li:nth-of-type(1)').is_me).toBeTruthy()
})
test('keyed elements are moved instead of replaced', () => {
let dom = createElement('')
dom.querySelector('li').is_me = true
morph(dom, '')
expect(dom.querySelector('li:nth-of-type(2)').is_me).toBeTruthy()
})
test('elements inserted into a list are properly tracked using lookahead inside updating hook instead of keys', () => {
let dom = createElement('')
dom.querySelector('li').is_me = true
morph(dom, '', {
lookahead: true,
})
expect(dom.outerHTML).toEqual('')
expect(dom.querySelector('li:nth-of-type(2)').is_me).toBeTruthy()
})
test('lookahead still works if comparison elements have keys', () => {
let dom = createElement(``)
dom.querySelector('li:nth-of-type(1)').is_me = true
dom.querySelector('li:nth-of-type(2)').is_me = true
morph(dom, ``, {
lookahead: true,
})
expect(dom.querySelector('li:nth-of-type(1)').is_me).toBeFalsy()
expect(dom.querySelector('li:nth-of-type(2)').is_me).toBeTruthy()
expect(dom.querySelector('li:nth-of-type(3)').is_me).toBeTruthy()
expect(dom.querySelectorAll('li').length).toEqual(3)
})
test('baz', () => {
let dom = createElement(``)
dom.querySelector('li:nth-of-type(1)').is_me = true
dom.querySelector('li:nth-of-type(2)').is_me = true
morph(dom, ``, {
lookahead: true,
})
expect(dom.querySelector('li:nth-of-type(1)').is_me).toBeFalsy()
expect(dom.querySelector('li:nth-of-type(2)').is_me).toBeTruthy()
expect(dom.querySelector('li:nth-of-type(3)').is_me).toBeTruthy()
expect(dom.querySelectorAll('li').length).toEqual(3)
})
test('blah blah blah no lookahead', () => {
let dom = createElement(``)
dom.querySelector('li:nth-of-type(1)').is_me = true
morph(dom, ``)
expect(dom.querySelector('li:nth-of-type(1)').is_me).toBeFalsy()
expect(dom.querySelector('li:nth-of-type(2)').is_me).toBeTruthy()
expect(dom.querySelector('li:nth-of-type(3)').is_me).toBeFalsy()
expect(dom.querySelectorAll('li').length).toEqual(3)
})
//
// @todo: add test to make sure added nodes are cloned from the "to" tree