web-atoms-core
Version:
108 lines (72 loc) • 2.83 kB
text/typescript
import Assert from "@web-atoms/unit-test/dist/Assert";
import Test from "@web-atoms/unit-test/dist/Test";
import TestItem from "@web-atoms/unit-test/dist/TestItem";
import Markdown from "../../../core/Markdown";
import { AtomControl } from "../../../web/controls/AtomControl";
import AtomWebTest from "../AtomWebTest";
class TestViewModel {
public name: any = "";
}
class InputControl extends AtomControl {
public create(): void {
const input = document.createElement("input");
this.viewModel = this.resolve(TestViewModel);
this.append(input);
this.runAfterInit(() => {
this.setLocalValue(input, "autofocus", true);
});
}
}
class FormattedControl extends AtomControl {
public create(): void {
this.viewModel = this.resolve(TestViewModel);
this.bind(this.element, "formattedText", [["viewModel", "name"]]);
}
}
class ImageSrcControl extends AtomControl {
public create(): void {
this.viewModel = this.resolve(TestViewModel);
this.bind(this.element, "src", [["viewModel", "name"]]);
}
}
class SetClassControl extends AtomControl {
public create(): void {
this.viewModel = this.resolve(TestViewModel);
this.bind(this.element, "class", [["viewModel", "name"]]);
}
}
export default class AtomControlPropertiesTest extends AtomWebTest {
// @Test
// public async autoFocus(): Promise<void> {
// const root = document.createElement("div");
// const control = new InputControl(this.app, root);
// await this.app.waitForPendingCalls();
// const input = control.element.firstElementChild as HTMLInputElement;
// Assert.equals(input, document.activeElement);
// }
public async formattedText(): Promise<void> {
const control = new FormattedControl(this.app);
await this.app.waitForPendingCalls();
control.viewModel.name = Markdown.from("Akash **Kava**");
Assert.equals("Akash <strong>Kava</strong>", control.element.innerHTML);
}
public async src(): Promise<void> {
const control = new ImageSrcControl(this.app, document.createElement("img"));
await this.app.waitForPendingCalls();
control.viewModel.name = "/a.jpg";
const img = control.element as HTMLImageElement;
Assert.equals("/a.jpg", img.src);
control.viewModel.name = "http://a/a.jpg";
Assert.equals("//a/a.jpg", img.src);
}
public async setClass(): Promise<void> {
const control = new SetClassControl(this.app);
await this.app.waitForPendingCalls();
const vm = control.viewModel as TestViewModel;
vm.name = { a: 1, b: 1, c: 0 };
Assert.equals("a b", control.element.className);
}
}