import { Component, mount, useState, xml } from "../../src";
import { makeTestFixture, nextTick, snapshotEverything } from "../helpers";
let fixture: HTMLElement;
snapshotEverything();
beforeEach(() => {
fixture = makeTestFixture();
});
describe("basics", () => {
test("basic use", async () => {
class Child extends Component {
static template = xml`child`;
}
class Parent extends Component {
static template = xml``;
static components = { Child };
}
await mount(Parent, fixture);
expect(fixture.innerHTML).toBe("child1");
});
test("sub widget is interactive", async () => {
class Child extends Component {
static template = xml`
child
`;
state = useState({ val: 1 });
inc() {
this.state.val++;
}
}
class Parent extends Component {
static template = xml``;
static components = { Child };
}
await mount(Parent, fixture);
expect(fixture.innerHTML).toBe("child1");
const button = fixture.querySelector("button")!;
button.click();
await nextTick();
expect(fixture.innerHTML).toBe("child2");
});
test("can select a sub widget ", async () => {
class Child extends Component {
static template = xml`CHILD 1`;
}
class OtherChild extends Component {
static template = xml`
CHILD 2
`;
}
class Parent extends Component {
static template = xml`
`;
static components = { Child, OtherChild };
}
const env = { options: { flag: true } };
const parent = await mount(Parent, fixture, { env });
expect(fixture.innerHTML).toBe("CHILD 1");
env.options.flag = false;
parent.render();
await nextTick();
expect(fixture.innerHTML).toBe("CHILD 2
");
});
test("can select a sub widget, part 2", async () => {
class Child extends Component {
static template = xml`CHILD 1`;
}
class OtherChild extends Component {
static template = xml`CHILD 2
`;
}
class Parent extends Component {
static template = xml`
`;
state = useState({ flag: true });
static components = { Child, OtherChild };
}
let parent = await mount(Parent, fixture);
expect(fixture.innerHTML).toBe("CHILD 1");
parent.state.flag = false;
await nextTick();
expect(fixture.innerHTML).toBe("CHILD 2
");
});
test("top level sub widget with a parent", async () => {
class ComponentC extends Component {
static template = xml`Hello`;
}
class ComponentB extends Component {
static template = xml``;
static components = { ComponentC };
}
class ComponentA extends Component {
static template = xml`
`;
static components = { ComponentB };
}
await mount(ComponentA, fixture);
expect(fixture.innerHTML).toBe("Hello
");
});
});