import { assertObjectMatch } from "@std/assert/object-match";
import { assertArrayIncludes, assertEquals } from "@std/assert";
import layout from "../../src/sandbox/layout.ts";
Deno.test(function createFrameReturnsFrame() {
const frame = layout.createFrame("lamb of god");
assertObjectMatch(
frame,
{
id: "lamb of god",
x: 0,
y: 0,
width: 0,
height: 0,
rows: [],
},
);
});
Deno.test(function createInitialFrameHasPosition() {
const frame = layout.initialFrame("lamb of god");
assertObjectMatch(
frame,
{
x: 0,
y: 500,
},
);
});
Deno.test(function createComponentReturnsComponent() {
const component = layout.createComponent("soulless", 2);
assertObjectMatch(
component,
{
kind: "COMPONENT",
id: "soulless",
x: 0,
y: 0,
width: 240,
height: 132.5,
},
);
});
Deno.test(function createRowReturnsRow() {
const row = layout.createRow("compromised");
assertObjectMatch(
row,
{
items: [],
id: "compromised",
kind: "ROW",
x: 0,
y: 0,
width: 0,
height: 0,
},
);
});
Deno.test(function addToRowAddsItemIdempotently() {
const rootFrame = layout.initialFrame("a");
const aFrame = layout.createFrame("aFrame");
const aComponent = layout.createComponent("aComponent", 3);
layout.addToRow(rootFrame, "row1", aFrame);
assertEquals(rootFrame.rows.length, 1, "should have row");
assertArrayIncludes(
rootFrame.rows[0].items,
[aFrame],
"has the new frame component in the array",
);
layout.addToRow(rootFrame, "row1", aFrame);
assertEquals(
rootFrame.rows.length,
1,
"should have only one row after another push",
);
assertEquals(
rootFrame.rows[0].items.length,
1,
"should not have duplicate items",
);
layout.addToRow(rootFrame, "row1", aComponent);
assertEquals(
rootFrame.rows.length,
1,
"should have only one row after two pushes",
);
assertEquals(
rootFrame.rows[0].items.length,
2,
"should have two items in the row",
);
});
Deno.test(function calculateSizeAndPositionSingleComponent() {
const rootFrame = layout.initialFrame("rootFrame");
const component = layout.createComponent("component", 2);
layout.addToRow(rootFrame, "row 1", component);
layout.calculateSizeAndPosition(rootFrame);
// Wrong right now, commented out
//assertObjectMatch(rootFrame, {
// "id": "rootFrame",
// "kind": "frame",
// "x": 0,
// "y": 500,
// "width": 270,
// "height": 250,
// "rows": [
// {
// "items": [
// {
// "kind": "component",
// "id": "component",
// "x": 10,
// "y": 512,
// "width": 220,
// "height": 250,
// },
// ],
// "id": "row 1",
// "kind": "row",
// "x": -15,
// "y": 512,
// "width": 270,
// "height": 250,
// },
// ],
//});
});
Deno.test(function calculateSizeAndPositionOneRowFourComponents() {
const rootFrame = layout.initialFrame("rootFrame");
const component1 = layout.createComponent("component 1", 2);
const component2 = layout.createComponent("component 2", 2);
const component3 = layout.createComponent("component 3", 2);
const component4 = layout.createComponent("component 4", 2);
const component5 = layout.createComponent("component 5", 2);
layout.addToRow(rootFrame, "row 1", component1);
layout.addToRow(rootFrame, "row 1", component2);
layout.addToRow(rootFrame, "row 1", component3);
layout.addToRow(rootFrame, "row 1", component4);
layout.addToRow(rootFrame, "row 1", component5);
layout.calculateSizeAndPosition(rootFrame);
// These are wrong right now, so commented out.
//assertObjectMatch(rootFrame, {
// id: "rootFrame",
// kind: "frame",
// x: 0,
// y: 500,
// width: 1300,
// height: 250,
// rows: [
// {
// items: [
// {
// kind: "component",
// id: "component 1",
// x: -505,
// y: 512,
// width: 220,
// height: 250,
// },
// {
// kind: "component",
// id: "component 2",
// x: -260,
// y: 512,
// width: 220,
// height: 250,
// },
// {
// kind: "component",
// id: "component 3",
// x: -15,
// y: 512,
// width: 220,
// height: 250,
// },
// {
// kind: "component",
// id: "component 4",
// x: 230,
// y: 512,
// width: 220,
// height: 250,
// },
// {
// kind: "component",
// id: "component 5",
// x: 475,
// y: 512,
// width: 220,
// height: 250,
// },
// ],
// id: "row 1",
// kind: "row",
// x: -530,
// y: 512,
// width: 1300,
// height: 250,
// },
// ],
//});
});
Deno.test(function calculateSizeAndPositionOneRowSubFrame() {
const rootFrame = layout.initialFrame("rootFrame");
const component1 = layout.createComponent("component 1", 2);
layout.addToRow(rootFrame, "row 1", component1);
const component2 = layout.createComponent("component 2", 2);
layout.addToRow(rootFrame, "row 1", component2);
const subFrame1 = layout.createFrame("subFrame 1");
const component3 = layout.createComponent("component 3", 2);
const component4 = layout.createComponent("component 4", 2);
layout.addToRow(subFrame1, "row 1", component3);
layout.addToRow(subFrame1, "row 1", component4);
layout.addToRow(rootFrame, "row 1", subFrame1);
const component5 = layout.createComponent("component 5", 2);
layout.addToRow(rootFrame, "row 1", component5);
layout.calculateSizeAndPosition(rootFrame);
});
Deno.test(function calculateSizeAndPositionOneSubFrame() {
const rootFrame = layout.initialFrame("rootFrame");
const subFrame1 = layout.createFrame("subFrame 1");
const component1 = layout.createComponent("component 1", 2);
layout.addToRow(subFrame1, "row 1", component1);
layout.addToRow(rootFrame, "row 1", subFrame1);
layout.calculateSizeAndPosition(rootFrame);
});