import { Store } from "../data/Store";
import assert from "assert";
import { createTestRenderer, act } from "../util/test/createTestRenderer";
import { bind } from "./bind";
import { PureContainer } from "./PureContainer";
describe("PureContainer", () => {
it("renders static text children", async () => {
let widget = (
Test
);
let store = new Store();
const component = await createTestRenderer(store, widget);
let tree = component.toJSON();
assert(tree && !Array.isArray(tree), "Expected single element");
assert.deepEqual(tree, {
type: "div",
props: {},
children: ["Test"],
});
});
it("renders multiple children", async () => {
let widget = (
First
Second
Third
);
let store = new Store();
const component = await createTestRenderer(store, widget);
let tree = component.toJSON();
assert(Array.isArray(tree), "Expected array of elements");
assert.equal(tree.length, 3);
assert.deepEqual(tree, [
{
type: "div",
props: {},
children: ["First"],
},
{
type: "div",
props: {},
children: ["Second"],
},
{
type: "div",
props: {},
children: ["Third"],
},
]);
});
it("renders children with data bindings", async () => {
let widget = (
);
let store = new Store({
data: {
message: "Hello World",
},
});
const component = await createTestRenderer(store, widget);
let tree = component.toJSON();
assert(tree && !Array.isArray(tree), "Expected single element");
assert.deepEqual(tree, {
type: "div",
props: {},
children: ["Hello World"],
});
});
it("renders nested containers", async () => {
let widget = (
);
let store = new Store();
const component = await createTestRenderer(store, widget);
let tree = component.toJSON();
assert(tree && !Array.isArray(tree), "Expected single element");
assert.deepEqual(tree, {
type: "div",
props: {},
children: [
{
type: "span",
props: {},
children: ["Nested"],
},
],
});
});
it("conditionally renders children based on visible binding", async () => {
let widget = (
);
let store = new Store({
data: {
show: true,
},
});
const component = await createTestRenderer(store, widget);
let tree = component.toJSON();
assert(tree && !Array.isArray(tree), "Expected single element");
assert.deepEqual(tree, {
type: "div",
props: {},
children: ["Visible"],
});
});
it("handles empty children", async () => {
let widget = (
);
let store = new Store();
const component = await createTestRenderer(store, widget);
let tree = component.toJSON();
assert(tree && !Array.isArray(tree), "Expected single element");
assert.deepEqual(tree, {
type: "div",
props: {},
children: null,
});
});
it("renders children from items property", async () => {
let widget = (
Item 1, Item 2
]} />
);
let store = new Store();
const component = await createTestRenderer(store, widget);
let tree = component.toJSON();
assert(Array.isArray(tree), "Expected array of elements");
assert.equal(tree.length, 2);
assert.deepEqual(tree[0], {
type: "div",
props: {},
children: ["Item 1"],
});
assert.deepEqual(tree[1], {
type: "div",
props: {},
children: ["Item 2"],
});
});
it("updates children when store data changes", async () => {
let widget = (
);
let store = new Store({
data: {
count: 0,
},
});
const component = await createTestRenderer(store, widget);
let tree = component.toJSON();
assert.deepEqual(tree, {
type: "div",
props: {},
children: ["0"],
});
// Update the store
await act(async () => {
store.set("count", 5);
});
// Re-render
tree = component.toJSON();
assert.deepEqual(tree, {
type: "div",
props: {},
children: ["5"],
});
});
});