import { patchProp } from '../src/patchProp' import { render, h } from '../src' describe('runtime-dom: props patching', () => { test('basic', () => { const el = document.createElement('div') patchProp(el, 'id', null, 'foo') expect(el.id).toBe('foo') patchProp(el, 'id', null, null) expect(el.id).toBe('') }) test('value', () => { const el = document.createElement('input') patchProp(el, 'value', null, 'foo') expect(el.value).toBe('foo') patchProp(el, 'value', null, null) expect(el.value).toBe('') const obj = {} patchProp(el, 'value', null, obj) expect(el.value).toBe(obj.toString()) expect((el as any)._value).toBe(obj) }) test('boolean prop', () => { const el = document.createElement('select') patchProp(el, 'multiple', null, '') expect(el.multiple).toBe(true) patchProp(el, 'multiple', null, null) expect(el.multiple).toBe(false) }) test('innerHTML unmount prev children', () => { const fn = jest.fn() const comp = { render: () => 'foo', unmounted: fn } const root = document.createElement('div') render(h('div', null, [h(comp)]), root) expect(root.innerHTML).toBe(`
foo
`) render(h('div', { innerHTML: 'bar' }), root) expect(root.innerHTML).toBe(`
bar
`) expect(fn).toHaveBeenCalled() }) // #954 test('(svg) innerHTML unmount prev children', () => { const fn = jest.fn() const comp = { render: () => 'foo', unmounted: fn } const root = document.createElement('div') render(h('div', null, [h(comp)]), root) expect(root.innerHTML).toBe(`
foo
`) render(h('svg', { innerHTML: '' }), root) expect(root.innerHTML).toBe(``) expect(fn).toHaveBeenCalled() }) test('textContent unmount prev children', () => { const fn = jest.fn() const comp = { render: () => 'foo', unmounted: fn } const root = document.createElement('div') render(h('div', null, [h(comp)]), root) expect(root.innerHTML).toBe(`
foo
`) render(h('div', { textContent: 'bar' }), root) expect(root.innerHTML).toBe(`
bar
`) expect(fn).toHaveBeenCalled() }) })