import Assert from "@web-atoms/unit-test/dist/Assert";
import Category from "@web-atoms/unit-test/dist/Category";
import Test from "@web-atoms/unit-test/dist/Test";
import TestItem from "@web-atoms/unit-test/dist/TestItem";
import { App } from "../../../App";
import { Atom } from "../../../Atom";
import { AtomTest } from "../../../unit/AtomTest";
import { AtomGridView } from "../../../web/controls/AtomGridView";
import AtomWebTest from "../AtomWebTest";

@Category("Grid view")
export class TestCase extends AtomWebTest {

    @Test("Grid Test")
    public async test(): Promise<any> {

        const gv = new AtomGridView(this.app, document.createElement("section"));
        gv.columns = "20,*,50";
        gv.rows = "10,*,30%";
        gv.element.style.width = "1000px";
        gv.element.style.height = "1000px";

        const header = document.createElement("header");
        const headerAny = header as any;
        headerAny.cell = "0:3,0";

        gv.append(header);

        const footer = document.createElement("footer");
        const footerAny = footer as any;
        footerAny.cell = "0:3,2";

        gv.append(footer);

        const left = document.createElement("div");
        const leftAny = left as any;
        leftAny.cell = "0,1";

        gv.append(left);

        const right = document.createElement("div");
        const rightAny = right as any;
        rightAny.cell = "2,1";

        gv.append(right);

        const fill = document.createElement("div");
        const fillAny = fill as any;
        fillAny.cell = "1,1";

        gv.append(fill);

        gv.invalidate();

        await Atom.delay(10);

        await this.app.waitForPendingCalls();

        const hps = header.parentElement.style;

        Assert.equals("0px", hps.left);
        Assert.equals("0px", hps.top);
        Assert.equals("1000px" , hps.width);
        Assert.equals("10px", hps.height);

        const lps = left.parentElement.style;

        Assert.equals("0px", lps.left);
        Assert.equals("10px", lps.top);
        Assert.equals("20px" , lps.width);
        Assert.equals("690px", lps.height);

        const rps = right.parentElement.style;

        Assert.equals("950px", rps.left);
        Assert.equals("10px", rps.top);
        Assert.equals("50px" , rps.width);
        Assert.equals("690px", rps.height);

        const fillps = fill.parentElement.style;

        Assert.equals("20px", fillps.left);
        Assert.equals("10px", fillps.top);
        Assert.equals("930px" , fillps.width);
        Assert.equals("690px", fillps.height);

        const footerps = footer.parentElement.style;

        Assert.equals("0px", footerps.left);
        Assert.equals("700px", footerps.top);
        Assert.equals("1000px" , footerps.width);
        Assert.equals("300px", footerps.height);
    }

}
