import { assert, expect, test, beforeAll } from 'vitest'; import { addFromTemplate } from '../src/template.mjs'; import { loadTemplate, mergeTemplate } from '../src/settings/template.mjs'; import { countChangedElements } from '../src/settings/utils.mjs'; beforeAll(async () => { document.body.innerHTML += `
`; document.body.innerHTML += `
`; document.body.innerHTML += ` `; }); test('basic template fragment', () => { const container = document.getElementById('basic'); assert(container); expect(container.children.length) .toBe(0); const times = 10; for (let count = 0; count < times; ++count) { const fragment = loadTemplate('basic'); mergeTemplate(container, fragment); } expect(container.children.length) .toBe(times); for (let count = 0; count < times; ++count) { const child = /** @type {HTMLElement | null} */ (container.children[count]); assert(child); expect(child.childElementCount) .toBe(2); expect(child.children[0].tagName) .toBe('H1'); expect(child.children[0].textContent) .toBe('Hello'); expect(child.children[1].tagName) .toBe('P'); expect(child.children[1].textContent) .toBe('world'); } }); test('template fragment with config', () => { const container = document.getElementById('basic-cfg'); assert(container); expect(container.children.length) .toBe(0); const cfgs = [ {foo: 'first', bar: 12321}, {foo: 'second', bar: 'datadatadata'}, {foo: 'third', bar: false}, ]; cfgs.forEach((cfg, index) => { addFromTemplate(container, 'basic-cfg', cfg); const last = /** @type {HTMLElement | null} */ (container.lastElementChild); assert(last); const foo = /** @type {HTMLInputElement | null} */ (last.querySelector('input[name=foo]')); assert(foo); expect(foo.value) .toBe(cfg.foo.toString()); const bar = /** @type {HTMLSpanElement | null} */ (last.querySelector('span[data-key=bar]')); assert(bar); expect(bar.textContent) .toBe(cfg.bar.toString()); const id = /** @type {HTMLSpanElement | null} */ (last.querySelector('span[data-key=template-id]')); assert(id); expect(id.textContent) .toBe(`#${index}`); }); expect(container.children.length) .toEqual(cfgs.length); expect(countChangedElements(container)) .toEqual(0); });