tests: add test for moving windows

This commit is contained in:
Peter Fajdiga
2024-09-24 01:27:49 +02:00
parent c675fc63d1
commit 335418e84b

View File

@@ -1,56 +1,95 @@
tests.register("Move focus", 1, () => {
tests.register("Focus and move windows", 1, () => {
const { qtMock, workspaceMock } = initMocks();
const config = getDefaultConfig();
const world = new World(config);
const col1Win1 = new MockKwinClient(
const client1 = new MockKwinClient(
1,
"app1",
"Application 1",
new MockQmlRect(10, 10, 100, 200),
);
const col2Win1 = new MockKwinClient(
const client2 = new MockKwinClient(
2,
"app2",
"Application 2",
new MockQmlRect(20, 20, 100, 200),
);
const col2Win2 = new MockKwinClient(
const client3 = new MockKwinClient(
3,
"app3",
"Application 3",
new MockQmlRect(40, 40, 100, 200),
);
workspaceMock.createWindow(col1Win1);
workspaceMock.createWindow(col2Win1);
workspaceMock.createWindow(col2Win2);
workspaceMock.createWindow(client1);
workspaceMock.createWindow(client2);
workspaceMock.createWindow(client3);
world.do((clientManager, desktopManager) => {
assert(clientManager.hasClient(col1Win1));
assert(clientManager.hasClient(col2Win1));
assert(clientManager.hasClient(col2Win2));
assert(clientManager.hasClient(client1));
assert(clientManager.hasClient(client2));
assert(clientManager.hasClient(client3));
});
assert(workspaceMock.activeWindow === col2Win2);
assert(workspaceMock.activeWindow === client3);
qtMock.fireShortcut("karousel-window-move-left");
const columnsWidth = 2 * 100 + config.gapsInnerHorizontal;
const column1LeftX = screenWidth/2 - columnsWidth/2;
const column2LeftX = column1LeftX + 100 + config.gapsInnerHorizontal;
const columnHeight = screenHeight - config.gapsOuterTop - config.gapsOuterBottom;
const windowHeight = (columnHeight - config.gapsInnerVertical)/2;
const window1TopY = config.gapsOuterTop;
const window2TopY = window1TopY + windowHeight + config.gapsInnerVertical;
assertRect(col1Win1.frameGeometry, column1LeftX, window1TopY, 100, columnHeight);
assertRect(col2Win1.frameGeometry, column2LeftX, window1TopY, 100, windowHeight);
assertRect(col2Win2.frameGeometry, column2LeftX, window2TopY, 100, windowHeight);
function getRectInGrid(column: number, window: number, nColumns: number, nWindows: number) {
const columnsWidth = nColumns * 100 + (nColumns-1) * config.gapsInnerHorizontal;
const windowHeight = (columnHeight - config.gapsInnerVertical * (nWindows-1)) / nWindows;
return new MockQmlRect(
column * (100 + config.gapsInnerHorizontal) + (screenWidth-columnsWidth) / 2,
config.gapsOuterTop + (windowHeight + config.gapsInnerVertical) * window,
100,
(columnHeight - config.gapsInnerVertical * (nWindows-1)) / nWindows,
);
}
function assertFocus(shortcutName: string, expectedFocus: KwinClient) {
qtMock.fireShortcut(shortcutName);
assert(workspaceMock.activeWindow === expectedFocus, `wrong activeWindow: ${workspaceMock.activeWindow?.pid}`, 1);
};
assertRectEqual(client1.frameGeometry, getRectInGrid(0, 0, 3, 1));
assertRectEqual(client2.frameGeometry, getRectInGrid(1, 0, 3, 1));
assertRectEqual(client3.frameGeometry, getRectInGrid(2, 0, 3, 1));
qtMock.fireShortcut("karousel-window-move-left");
assertRectEqual(client1.frameGeometry, getRectInGrid(0, 0, 2, 1));
assertRectEqual(client2.frameGeometry, getRectInGrid(1, 0, 2, 2));
assertRectEqual(client3.frameGeometry, getRectInGrid(1, 1, 2, 2));
qtMock.fireShortcut("karousel-window-move-left");
assertRectEqual(client1.frameGeometry, getRectInGrid(0, 0, 3, 1));
assertRectEqual(client3.frameGeometry, getRectInGrid(1, 0, 3, 1));
assertRectEqual(client2.frameGeometry, getRectInGrid(2, 0, 3, 1));
qtMock.fireShortcut("karousel-window-move-left");
assertRectEqual(client1.frameGeometry, getRectInGrid(0, 0, 2, 2));
assertRectEqual(client3.frameGeometry, getRectInGrid(0, 1, 2, 2));
assertRectEqual(client2.frameGeometry, getRectInGrid(1, 0, 2, 1));
qtMock.fireShortcut("karousel-window-move-left");
assertRectEqual(client3.frameGeometry, getRectInGrid(0, 0, 3, 1));
assertRectEqual(client1.frameGeometry, getRectInGrid(1, 0, 3, 1));
assertRectEqual(client2.frameGeometry, getRectInGrid(2, 0, 3, 1));
assertFocus("karousel-focus-3", client2);
qtMock.fireShortcut("karousel-window-move-start");
assertRectEqual(client2.frameGeometry, getRectInGrid(0, 0, 3, 1));
assertRectEqual(client3.frameGeometry, getRectInGrid(1, 0, 3, 1));
assertRectEqual(client1.frameGeometry, getRectInGrid(2, 0, 3, 1));
qtMock.fireShortcut("karousel-window-move-to-column-3");
assertRectEqual(client3.frameGeometry, getRectInGrid(0, 0, 2, 1));
assertRectEqual(client1.frameGeometry, getRectInGrid(1, 0, 2, 2));
assertRectEqual(client2.frameGeometry, getRectInGrid(1, 1, 2, 2));
const col1Win1 = client3;
const col2Win1 = client1;
const col2Win2 = client2;
assertFocus("karousel-focus-up", col2Win1);
assertFocus("karousel-focus-up", col2Win1);
assertFocus("karousel-focus-down", col2Win2);