/** * Layout Stability Tests * Tests that column widths and row heights remain stable during gameplay */ import { test, expect } from '@playwright/test'; test.describe('Layout Stability', () => { test.beforeEach(async ({ page }) => { await page.goto('/'); }); test('chess board has fixed dimensions', async ({ page }) => { const board = page.locator('#chess-board'); const box = await board.boundingBox(); expect(box.width).toBe(600); expect(box.height).toBe(600); }); test('board squares are 75px x 75px', async ({ page }) => { const firstSquare = page.locator('.square').first(); const box = await firstSquare.boundingBox(); expect(box.width).toBe(75); expect(box.height).toBe(75); }); test('column widths remain stable when pieces are captured', async ({ page }) => { // Get initial column widths const leftSidebar = page.locator('.captured-white').first(); const boardSection = page.locator('.board-section'); const rightSidebar = page.locator('.game-sidebar'); const initialLeft = await leftSidebar.boundingBox(); const initialBoard = await boardSection.boundingBox(); const initialRight = await rightSidebar.boundingBox(); // Make moves that capture pieces // e2 to e4 await page.locator('.square[data-row="6"][data-col="4"]').click(); await page.locator('.square[data-row="4"][data-col="4"]').click(); // Wait a bit for any animations await page.waitForTimeout(500); // Get widths after move const afterLeft = await leftSidebar.boundingBox(); const afterBoard = await boardSection.boundingBox(); const afterRight = await rightSidebar.boundingBox(); // Widths should remain exactly the same expect(afterLeft.width).toBe(initialLeft.width); expect(afterBoard.width).toBe(initialBoard.width); expect(afterRight.width).toBe(initialRight.width); }); test('row heights remain stable when highlighting moves', async ({ page }) => { // Get initial row heights by measuring first and last square const firstSquare = page.locator('.square').first(); const initialBox = await firstSquare.boundingBox(); // Click a piece to highlight legal moves await page.locator('.square[data-row="6"][data-col="4"]').click(); // Wait for highlighting await page.waitForTimeout(300); // Check that square dimensions haven't changed const afterBox = await firstSquare.boundingBox(); expect(afterBox.height).toBe(initialBox.height); }); test('last-move highlighting does not change layout', async ({ page }) => { const board = page.locator('#chess-board'); const initialBox = await board.boundingBox(); // Make a move (e2 to e4) await page.locator('.square[data-row="6"][data-col="4"]').click(); await page.locator('.square[data-row="4"][data-col="4"]').click(); // Wait for last-move highlight to apply await page.waitForTimeout(300); // Board dimensions should not change const afterBox = await board.boundingBox(); expect(afterBox.width).toBe(initialBox.width); expect(afterBox.height).toBe(initialBox.height); }); });