123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- let { morph } = require('@alpinejs/morph')
- let createElement = require('./createElement.js')
- test('changed element is the same element', () => {
- let dom = createElement('<div><span>foo</span></div>')
- dom.querySelector('span').is_me = true
- morph(dom, '<div><span>bar</span></div>')
- expect(dom.querySelector('span').is_me).toBeTruthy()
- })
- test('non-keyed elements are replaced instead of moved', () => {
- let dom = createElement('<ul><li>bar</li></ul>')
- dom.querySelector('li').is_me = true
- morph(dom, '<ul><li>foo</li><li>bar</li></ul>')
- expect(dom.querySelector('li:nth-of-type(1)').is_me).toBeTruthy()
- })
- test('keyed elements are moved instead of replaced', () => {
- let dom = createElement('<ul><li key="2">bar</li></ul>')
- dom.querySelector('li').is_me = true
- morph(dom, '<ul><li key="1">foo</li><li key="2">bar</li></ul>')
- 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('<ul><li>bar</li></ul>')
- dom.querySelector('li').is_me = true
- morph(dom, '<ul><li>foo</li><li>bar</li></ul>', {
- lookahead: true,
- })
- expect(dom.outerHTML).toEqual('<ul><li>foo</li><li>bar</li></ul>')
- expect(dom.querySelector('li:nth-of-type(2)').is_me).toBeTruthy()
- })
- test('lookahead still works if comparison elements have keys', () => {
- let dom = createElement(`<ul>
- <li key="bar">bar</li>
- <li>hey</li>
- </ul>`)
- dom.querySelector('li:nth-of-type(1)').is_me = true
- dom.querySelector('li:nth-of-type(2)').is_me = true
- morph(dom, `<ul>
- <li key="foo">foo</li>
- <li key="bar">bar</li>
- <li>hey</li>
- </ul>`, {
- 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(`<ul>
- <li key="bar">bar</li>
- <li>hey</li>
- </ul>`)
- dom.querySelector('li:nth-of-type(1)').is_me = true
- dom.querySelector('li:nth-of-type(2)').is_me = true
- morph(dom, `<ul>
- <li>foo</li>
- <li key="bar">bar</li>
- <li>hey</li>
- </ul>`, {
- 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(`<ul>
- <li key="bar">bar</li>
- <li>hey</li>
- </ul>`)
- dom.querySelector('li:nth-of-type(1)').is_me = true
- morph(dom, `<ul>
- <li key="foo">foo</li>
- <li key="bar">bar</li>
- <li>hey</li>
- </ul>`)
- 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
|