tests: Assert.grid: add centered parameter

This commit is contained in:
Peter Fajdiga
2024-10-27 21:13:14 +01:00
parent 054808cb38
commit b2dfad6042
3 changed files with 19 additions and 14 deletions

View File

@@ -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) {

View File

@@ -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);
});

View File

@@ -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;