import { describe, it, beforeEach } from "node:test";
import assert from "node:assert/strict";
import { Component, getChildrenFragment } from "/js/components/component.js";
describe("component", () => {
beforeEach(() => {
document.body.innerHTML = "";
});
describe("Component - register", () => {
it("should convert PascalCase class name to kebab-case tag name", () => {
class TestPascalCase extends Component {}
TestPascalCase.register();
const element = document.createElement("test-pascal-case");
assert(element instanceof TestPascalCase);
});
it("should handle multiple uppercase letters", () => {
class MyTestComponent extends Component {}
MyTestComponent.register();
const element = document.createElement("my-test-component");
assert(element instanceof MyTestComponent);
});
});
describe("getChildrenFragment", () => {
it("should return a DocumentFragment", () => {
const div = document.createElement("div");
div.innerHTML = "test";
const fragment = getChildrenFragment(div);
assert(fragment instanceof DocumentFragment);
});
it("should move all children to the fragment", () => {
const div = document.createElement("div");
div.innerHTML = "onetwo";
const fragment = getChildrenFragment(div);
assert.deepEqual(fragment.childNodes.length, 2);
assert.deepEqual(div.childNodes.length, 0);
});
it("should preserve child content", () => {
const div = document.createElement("div");
div.innerHTML = "content";
const fragment = getChildrenFragment(div);
const span = fragment.querySelector(".test");
assert(span !== null);
assert.deepEqual(span.textContent, "content");
});
it("should handle text nodes", () => {
const div = document.createElement("div");
div.textContent = "plain text";
const fragment = getChildrenFragment(div);
assert.deepEqual(fragment.textContent, "plain text");
});
it("should handle empty nodes", () => {
const div = document.createElement("div");
const fragment = getChildrenFragment(div);
assert.deepEqual(fragment.childNodes.length, 0);
});
});
});