let { morph } = require('@alpinejs/morph') let createElement = require('./createElement.js') test('changed element is the same element', async () => { let dom = createElement('
foo
') dom.querySelector('span').is_me = true await morph(dom, '
bar
') expect(dom.querySelector('span').is_me).toBeTruthy() }) test('non-keyed elements are replaced instead of moved', async () => { let dom = createElement('') dom.querySelector('li').is_me = true await morph(dom, '') expect(dom.querySelector('li:nth-of-type(1)').is_me).toBeTruthy() }) test('keyed elements are moved instead of replaced', async () => { let dom = createElement('') dom.querySelector('li').is_me = true await 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', async () => { let dom = createElement('') dom.querySelector('li').is_me = true await 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', async () => { let dom = createElement(``) dom.querySelector('li:nth-of-type(1)').is_me = true dom.querySelector('li:nth-of-type(2)').is_me = true await 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', async () => { let dom = createElement(``) dom.querySelector('li:nth-of-type(1)').is_me = true dom.querySelector('li:nth-of-type(2)').is_me = true await 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', async () => { let dom = createElement(``) dom.querySelector('li:nth-of-type(1)').is_me = true await 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