import { getPositionDiff, generateGraph } from "./resizeUtils"; describe("resizeUtils", () => { it("can enter shade mode", () => { const graph = { a: {}, b: { below: "a" }, c: { below: "b" }, }; const sizeDiff = { a: { height: -75, width: 0 }, b: { height: 0, width: 0 }, c: { height: 0, width: 0 }, }; const actual = getPositionDiff(graph, sizeDiff); const expected = { a: { x: 0, y: 0 }, b: { x: 0, y: -75 }, c: { x: 0, y: -75 }, }; expect(actual).toEqual(expected); }); it("can make the middle window enter shade mode", () => { const graph = { a: {}, b: { below: "a" }, c: { below: "b" }, }; const sizeDiff = { a: { height: 0, width: 0 }, b: { height: -75, width: 0 }, c: { height: 0, width: 0 }, }; const actual = getPositionDiff(graph, sizeDiff); const expected = { a: { x: 0, y: 0 }, b: { x: 0, y: 0 }, c: { x: 0, y: -75 }, }; expect(actual).toEqual(expected); }); it("can exit shade mode", () => { const graph = { a: {}, b: { below: "a" }, c: { below: "b" }, }; const sizeDiff = { a: { height: 75, width: 0 }, b: { height: 0, width: 0 }, c: { height: 0, width: 0 }, }; const actual = getPositionDiff(graph, sizeDiff); const expected = { a: { x: 0, y: 0 }, b: { x: 0, y: 75 }, c: { x: 0, y: 75 }, }; expect(actual).toEqual(expected); }); it("can enter double mode", () => { const graph = { a: {}, b: { below: "a" }, c: { below: "b" }, }; const sizeDiff = { a: { height: 100, width: 100 }, b: { height: 100, width: 100 }, c: { height: 100, width: 100 }, }; const actual = getPositionDiff(graph, sizeDiff); const expected = { a: { x: 0, y: 0 }, b: { x: 0, y: 100 }, c: { x: 0, y: 200 }, }; expect(actual).toEqual(expected); }); it("can enter double mode when shaped like a grid", () => { const graph = { a: {}, b: { right: "a" }, c: { below: "a" }, d: { below: "b", right: "c" }, }; const sizeDiff = { a: { height: 100, width: 100 }, b: { height: 100, width: 100 }, c: { height: 100, width: 100 }, d: { height: 100, width: 100 }, }; const actual = getPositionDiff(graph, sizeDiff); const expected = { a: { x: 0, y: 0 }, b: { x: 100, y: 0 }, c: { x: 0, y: 100 }, d: { x: 100, y: 100 }, }; expect(actual).toEqual(expected); }); it("can enter double mode when shaped like a 3x3 grid", () => { const graph = { a: {}, b: { right: "a" }, c: { right: "b" }, d: { below: "a" }, e: { below: "b", right: "d" }, f: { below: "c", right: "e" }, g: { below: "d" }, h: { below: "e", right: "g" }, i: { below: "f", right: "h" }, }; const sizeDiff = { a: { height: 100, width: 100 }, b: { height: 100, width: 100 }, c: { height: 100, width: 100 }, d: { height: 100, width: 100 }, e: { height: 100, width: 100 }, f: { height: 100, width: 100 }, g: { height: 100, width: 100 }, h: { height: 100, width: 100 }, i: { height: 100, width: 100 }, }; const actual = getPositionDiff(graph, sizeDiff); const expected = { a: { x: 0, y: 0 }, b: { x: 100, y: 0 }, c: { x: 200, y: 0 }, d: { x: 0, y: 100 }, e: { x: 100, y: 100 }, f: { x: 200, y: 100 }, g: { x: 0, y: 200 }, h: { x: 100, y: 200 }, i: { x: 200, y: 200 }, }; expect(actual).toEqual(expected); }); it("can exit double mode", () => { const graph = { a: {}, b: { below: "a" }, c: { below: "b" }, }; const sizeDiff = { a: { height: -100, width: -100 }, b: { height: -100, width: -100 }, c: { height: -100, width: -100 }, }; const actual = getPositionDiff(graph, sizeDiff); const expected = { a: { x: 0, y: 0 }, b: { x: 0, y: -100 }, c: { x: 0, y: -200 }, }; expect(actual).toEqual(expected); }); it("can enter shade mode when horizontal", () => { const graph = { a: {}, b: { right: "a" }, c: { right: "b" }, }; const sizeDiff = { a: { height: -75, width: 0 }, b: { height: 0, width: 0 }, c: { height: 0, width: 0 }, }; const actual = getPositionDiff(graph, sizeDiff); const expected = { a: { x: 0, y: 0 }, b: { x: 0, y: 0 }, c: { x: 0, y: 0 }, }; expect(actual).toEqual(expected); }); it("can enter double mode when horizontal", () => { const graph = { a: {}, b: { right: "a" }, c: { right: "b" }, }; const sizeDiff = { a: { height: 100, width: 100 }, b: { height: 100, width: 100 }, c: { height: 100, width: 100 }, }; const actual = getPositionDiff(graph, sizeDiff); const expected = { a: { x: 0, y: 0 }, b: { x: 100, y: 0 }, c: { x: 200, y: 0 }, }; expect(actual).toEqual(expected); }); it("can leave double mode when horizontal", () => { const graph = { a: {}, b: { right: "a" }, c: { right: "b" }, }; const sizeDiff = { a: { height: -100, width: -100 }, b: { height: -100, width: -100 }, c: { height: -100, width: -100 }, }; const actual = getPositionDiff(graph, sizeDiff); const expected = { a: { x: 0, y: 0 }, b: { x: -100, y: 0 }, c: { x: -200, y: 0 }, }; expect(actual).toEqual(expected); }); it("can shade two windows above two other windows", () => { const graph = { a: {}, b: { below: "a" }, c: {}, d: { below: "c" }, }; const sizeDiff = { a: { height: -75, width: 0 }, b: { height: 0, width: 0 }, c: { height: -75, width: 0 }, d: { height: 0, width: 0 }, }; const actual = getPositionDiff(graph, sizeDiff); const expected = { a: { x: 0, y: 0 }, b: { x: 0, y: -75 }, c: { x: 0, y: 0 }, d: { x: 0, y: -75 }, }; expect(actual).toEqual(expected); }); }); describe("generateGraph", () => { it("of stacked windows", () => { const actual = generateGraph([ { key: "a", x: 0, y: 0, width: 100, height: 100 }, { key: "b", x: 0, y: 100, width: 100, height: 100 }, { key: "c", x: 0, y: 200, width: 100, height: 100 }, ]); expect(actual).toEqual({ a: {}, b: { below: "a" }, c: { below: "b" }, }); }); it("of disconnected windows", () => { const actual = generateGraph([ { key: "a", x: 0, y: 0, width: 100, height: 100 }, { key: "b", x: 0, y: 110, width: 100, height: 100 }, ]); expect(actual).toEqual({ a: {}, b: {}, }); }); it("of windows that touch in y, but the lower one is to the right", () => { const actual = generateGraph([ { key: "a", x: 0, y: 0, width: 100, height: 100 }, { key: "b", x: 110, y: 100, width: 100, height: 100 }, ]); expect(actual).toEqual({ a: {}, b: {}, }); }); it("of windows that touch in y, but the lower one is to the left", () => { const actual = generateGraph([ { key: "a", x: 110, y: 0, width: 100, height: 100 }, { key: "b", x: 0, y: 100, width: 100, height: 100 }, ]); expect(actual).toEqual({ a: {}, b: {}, }); }); it("of windows that touch in x, but the right one is below", () => { const actual = generateGraph([ { key: "a", x: 0, y: 0, width: 100, height: 100 }, { key: "b", x: 100, y: 110, width: 100, height: 100 }, ]); expect(actual).toEqual({ a: {}, b: {}, }); }); it("of windows that touch in x, but the right one is above", () => { const actual = generateGraph([ { key: "a", x: 0, y: 110, width: 100, height: 100 }, { key: "b", x: 100, y: 0, width: 100, height: 100 }, ]); expect(actual).toEqual({ a: {}, b: {}, }); }); });