diff --git a/src/tests/flows/layout.ts b/src/tests/flows/layout.ts index 866a917..417e229 100644 --- a/src/tests/flows/layout.ts +++ b/src/tests/flows/layout.ts @@ -12,7 +12,7 @@ tests.register("Focus and move windows", 1, () => { function testLayout(shortcutName: string, grid: KwinClient[][]) { qtMock.fireShortcut(shortcutName); - Assert.centeredGrid(config, screen, 100, grid, { skip: 1 }); + Assert.grid(config, screen, 100, grid, true, { skip: 1 }); } function testFocus(shortcutName: string, expectedFocus: KwinClient) { diff --git a/src/tests/flows/pinning.ts b/src/tests/flows/pinning.ts index f72e633..c6001d9 100644 --- a/src/tests/flows/pinning.ts +++ b/src/tests/flows/pinning.ts @@ -6,34 +6,34 @@ tests.register("Pin", 20, () => { const screenHalfRight = new MockQmlRect(screen.width/2, 0, screen.width/2, screen.height); const [pinned, tiled1, tiled2] = workspaceMock.createClients(3); - Assert.centeredGrid(config, screen, 100, [ [pinned], [tiled1], [tiled2] ]); + Assert.grid(config, screen, 100, [ [pinned], [tiled1], [tiled2] ], true); pinned.pin(screenHalfLeft); Assert.equalRects(pinned.frameGeometry, screenHalfLeft); - Assert.centeredGrid(config, screenHalfRight, 100, [ [tiled1], [tiled2] ]); + Assert.grid(config, screenHalfRight, 100, [ [tiled1], [tiled2] ], true); pinned.pin(screenHalfRight); Assert.equalRects(pinned.frameGeometry, screenHalfRight); - Assert.centeredGrid(config, screenHalfLeft, 100, [ [tiled1], [tiled2] ]); + Assert.grid(config, screenHalfLeft, 100, [ [tiled1], [tiled2] ], true); pinned.unpin(); Assert.equalRects(pinned.frameGeometry, screenHalfRight); - Assert.centeredGrid(config, screen, 100, [ [tiled1], [tiled2] ]); + Assert.grid(config, screen, 100, [ [tiled1], [tiled2] ], true); pinned.pin(screenHalfRight); Assert.equalRects(pinned.frameGeometry, screenHalfRight); - Assert.centeredGrid(config, screenHalfLeft, 100, [ [tiled1], [tiled2] ]); + Assert.grid(config, screenHalfLeft, 100, [ [tiled1], [tiled2] ], true); pinned.minimized = true; - Assert.centeredGrid(config, screen, 100, [ [tiled1], [tiled2] ]); + Assert.grid(config, screen, 100, [ [tiled1], [tiled2] ], true); pinned.minimized = false; Assert.equalRects(pinned.frameGeometry, screenHalfRight); - Assert.centeredGrid(config, screenHalfLeft, 100, [ [tiled1], [tiled2] ]); + Assert.grid(config, screenHalfLeft, 100, [ [tiled1], [tiled2] ], true); workspaceMock.activeWindow = pinned; qtMock.fireShortcut("karousel-window-toggle-floating"); Assert.assert(pinned.tile === null); pinned.frameGeometry = new MockQmlRect(10, 20, 100, 200); // This is needed because the window's preferredWidth can change when pinning, because frameGeometryChanged can fire before tileChanged. TODO: Ensure pinned window keeps its preferredWidth. - Assert.centeredGrid(config, screen, 100, [ [tiled1], [tiled2], [pinned] ]); + Assert.grid(config, screen, 100, [ [tiled1], [tiled2], [pinned] ], true); }); diff --git a/src/tests/utils/Assert.ts b/src/tests/utils/Assert.ts index 740b274..96268ef 100644 --- a/src/tests/utils/Assert.ts +++ b/src/tests/utils/Assert.ts @@ -123,27 +123,32 @@ namespace Assert { ); } - export function centeredGrid( + export function grid( config: Config, screen: QmlRect, columnWidth: number, grid: KwinClient[][], + centered: boolean, { message, skip=0 }: Options = {}, ) { + const nColumns = grid.length; + const columnHeight = screen.height - config.gapsOuterTop - config.gapsOuterBottom; + const columnsWidth = nColumns * columnWidth + (nColumns-1) * config.gapsInnerHorizontal; + const startX = centered ? + screen.x + (screen.width - columnsWidth) / 2 : + grid[0][0].frameGeometry.x; + // assumes uniformly sized windows within columns of uniform width function getRectInGrid(column: number, window: number, nColumns: number, nWindows: number) { - const columnHeight = screen.height - config.gapsOuterTop - config.gapsOuterBottom; - const columnsWidth = nColumns * columnWidth + (nColumns-1) * config.gapsInnerHorizontal; const windowHeight = (columnHeight - config.gapsInnerVertical * (nWindows-1)) / nWindows; return new MockQmlRect( - screen.x + column * (columnWidth + config.gapsInnerHorizontal) + (screen.width-columnsWidth) / 2, + startX + column * (columnWidth + config.gapsInnerHorizontal), screen.y + config.gapsOuterTop + (windowHeight + config.gapsInnerVertical) * window, columnWidth, (columnHeight - config.gapsInnerVertical * (nWindows-1)) / nWindows, ); } - const nColumns = grid.length; for (let iColumn = 0; iColumn < nColumns; iColumn++) { const column = grid[iColumn]; const nWindows = column.length;