Files

55 lines
2.4 KiB
TypeScript
Raw Permalink Normal View History

import {
createElementFromAttrs,
createElementFromHTML,
queryElemChildren,
querySingleVisibleElem,
toggleElem,
} from './dom.ts';
2024-06-07 15:42:31 +02:00
test('createElementFromHTML', () => {
expect(createElementFromHTML('<a>foo<span>bar</span></a>').outerHTML).toEqual('<a>foo<span>bar</span></a>');
2024-11-21 22:09:16 +08:00
expect(createElementFromHTML('<tr data-x="1"><td>foo</td></tr>').outerHTML).toEqual('<tr data-x="1"><td>foo</td></tr>');
2024-06-07 15:42:31 +02:00
});
2024-06-27 01:01:20 +08:00
test('createElementFromAttrs', () => {
const el = createElementFromAttrs('button', {
id: 'the-id',
class: 'cls-1 cls-2',
disabled: true,
2024-08-02 03:06:03 +08:00
checked: false,
2024-06-27 01:01:20 +08:00
required: null,
2024-08-02 03:06:03 +08:00
tabindex: 0,
2024-10-31 04:06:36 +08:00
'data-foo': 'the-data',
}, 'txt', createElementFromHTML('<span>inner</span>'));
expect(el.outerHTML).toEqual('<button id="the-id" class="cls-1 cls-2" disabled="" tabindex="0" data-foo="the-data">txt<span>inner</span></button>');
2024-06-27 01:01:20 +08:00
});
test('querySingleVisibleElem', () => {
2025-05-09 02:26:18 +08:00
let el = createElementFromHTML('<div></div>');
expect(querySingleVisibleElem(el, 'span')).toBeNull();
el = createElementFromHTML('<div><span>foo</span></div>');
2025-12-03 03:13:16 +01:00
expect(querySingleVisibleElem(el, 'span')!.textContent).toEqual('foo');
el = createElementFromHTML('<div><span style="display: none;">foo</span><span>bar</span></div>');
2025-12-03 03:13:16 +01:00
expect(querySingleVisibleElem(el, 'span')!.textContent).toEqual('bar');
2025-05-09 02:26:18 +08:00
el = createElementFromHTML('<div><span class="some-class tw-hidden">foo</span><span>bar</span></div>');
2025-12-03 03:13:16 +01:00
expect(querySingleVisibleElem(el, 'span')!.textContent).toEqual('bar');
el = createElementFromHTML('<div><span>foo</span><span>bar</span></div>');
2026-03-27 04:39:24 +01:00
expect(() => querySingleVisibleElem(el, 'span')).toThrow('Expected exactly one visible element');
});
2024-11-26 23:10:45 +08:00
test('queryElemChildren', () => {
const el = createElementFromHTML('<div><span class="a">a</span><span class="b">b</span></div>');
const children = queryElemChildren(el, '.a');
expect(children.length).toEqual(1);
});
test('toggleElem', () => {
const el = createElementFromHTML('<div><div>a</div><div class="tw-hidden">b</div></div>');
toggleElem(el.children);
expect(el.outerHTML).toEqual('<div><div class="tw-hidden">a</div><div class="">b</div></div>');
toggleElem(el.children, false);
expect(el.outerHTML).toEqual('<div><div class="tw-hidden">a</div><div class="tw-hidden">b</div></div>');
toggleElem(el.children, true);
expect(el.outerHTML).toEqual('<div><div class="">a</div><div class="">b</div></div>');
});