tests: add test for moving windows
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user