123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- let { morph } = require('@alpinejs/morph')
- let createElement = require('./createElement.js')
- test('can use custom key name', () => {
- let dom = createElement('<ul><li wire:key="2">bar</li></ul>')
- dom.querySelector('li').is_me = true
- morph(dom, '<ul><li wire:key="1">foo</li><li wire:key="2">bar</li></ul>', {
- key(el) { return el.getAttribute('wire:key') }
- })
- expect(dom.querySelector('li:nth-of-type(2)').is_me).toBeTruthy()
- })
- test('can prevent update', () => {
- let dom = createElement('<div><span>foo</span></div>')
- morph(dom, '<div><span>bar</span></div>', {
- updating(from, to, childrenOnly, prevent) {
- if (from.textContent === 'foo') {
- prevent()
- }
- }
- })
- expect(dom.querySelector('span').textContent).toEqual('foo')
- })
- test('can prevent update, but still update children', () => {
- let dom = createElement('<div><span foo="bar">foo</span></div>')
- morph(dom, '<div><span foo="baz">bar</span></div>', {
- updating(from, to, childrenOnly, prevent) {
- if (from.textContent === 'foo') {
- childrenOnly()
- }
- }
- })
- expect(dom.querySelector('span').textContent).toEqual('bar')
- expect(dom.querySelector('span').getAttribute('foo')).toEqual('bar')
- })
- test('changing tag doesnt trigger an update (add and remove instead)', () => {
- let dom = createElement('<div><span>foo</span></div>')
- let updateHookCalledTimes = 0
- morph(dom, '<div><h1>foo</h1></div>', {
- updating(from, to, prevent) {
- updateHookCalledTimes++
- }
- })
- expect(updateHookCalledTimes).toEqual(1)
- })
- test('can impact update', () => {
- let dom = createElement('<div><span>foo</span></div>')
- morph(dom, '<div><span>bar</span></div>', {
- updated(from, to) {
- if (from.textContent === 'bar') {
- from.textContent = 'baz'
- }
- }
- })
- expect(dom.querySelector('span').textContent).toEqual('baz')
- })
- test('updating and updated are sequential when element has child updates ', () => {
- let dom = createElement('<div><span>foo</span></div>')
- let updatings = []
- let updateds = []
- morph(dom, '<div><span>bar</span></div>', {
- updating(from, to) {
- updatings.push(from.nodeName.toLowerCase())
- },
- updated(from, to) {
- updateds.push(from.nodeName.toLowerCase())
- }
- })
- expect(updatings).toEqual(['div', 'span', '#text'])
- expect(updateds).toEqual(['div', 'span', '#text'])
- })
- test('can prevent removal', () => {
- let dom = createElement('<div><span>foo</span></div>')
- morph(dom, '<div></div>', {
- removing(from, prevent) {
- prevent()
- }
- })
- expect(dom.querySelector('span')).toBeTruthy()
- })
- test('can impact removal', () => {
- let dom = createElement('<div><span>foo</span></div>')
- let textContent
- morph(dom, '<div></div>', {
- removed(from) {
- textContent = from.textContent
- }
- })
- expect(textContent).toEqual('foo')
- })
- test('can prevent removal for tag replacement', () => {
- let dom = createElement('<div><span>foo</span></div>')
- morph(dom, '<div><h1>foo</h1></div>', {
- removing(from, prevent) {
- prevent()
- }
- })
- expect(dom.querySelector('span')).toBeTruthy()
- })
- test('can impact removal for tag replacement', () => {
- let dom = createElement('<div><span>foo</span></div>')
- let textContent
- morph(dom, '<div><h1>foo</h1></div>', {
- removed(from) {
- textContent = from.textContent
- }
- })
- expect(textContent).toEqual('foo')
- })
- test('can prevent addition', () => {
- let dom = createElement('<div></div>')
- morph(dom, '<div><span>foo</span></div>', {
- adding(to, prevent) {
- prevent()
- }
- })
- expect(dom.querySelector('span')).toBeFalsy()
- })
- test('can impact addition', () => {
- let dom = createElement('<div></div>')
- morph(dom, '<div><span>foo</span></div>', {
- added(to) {
- to.textContent = 'bar'
- }
- })
- expect(dom.querySelector('span').textContent).toEqual('bar')
- })
- test('can prevent addition for tag replacement', () => {
- let dom = createElement('<div><h1>foo</h1></div>')
- morph(dom, '<div><span>foo</span></div>', {
- adding(to, prevent) {
- prevent()
- }
- })
- expect(dom.querySelector('span')).toBeFalsy()
- })
- test('can impact addition for tag replacement', () => {
- let dom = createElement('<div><h1>foo</h1></div>')
- morph(dom, '<div><span>foo</span></div>', {
- added(to) {
- to.textContent = 'bar'
- }
- })
- expect(dom.querySelector('span').textContent).toEqual('bar')
- })
|