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