/* Copyright 2024,2025 New Vector Ltd. Copyright 2023 Suguru Hirahara SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE files in the repository root for full details. */ import { expect, test } from "."; test.describe("Appearance user settings tab", () => { test.use({ displayName: "Hanako", }); test("should be rendered properly", { tag: "@screenshot" }, async ({ page, user, app, axe }) => { await app.closeVerifyToast(); const tab = await app.settings.openUserSettings("Appearance"); // Click "Show advanced" link button await tab.getByRole("button", { name: "Show advanced" }).click(); // Assert that "Hide advanced" link button is rendered await expect(tab.getByRole("button", { name: "Hide advanced" })).toBeVisible(); await expect(tab).toMatchScreenshot("appearance-tab.png"); await expect(axe).toHaveNoViolations(); }); test( "should support changing font size by using the font size dropdown", { tag: "@screenshot" }, async ({ page, app, user }) => { await app.closeVerifyToast(); await app.settings.openUserSettings("Appearance"); const tab = page.getByTestId("mx_AppearanceUserSettingsTab"); const fontDropdown = tab.locator(".mx_FontScalingPanel_Dropdown"); await expect(fontDropdown.getByLabel("Font size")).toBeVisible(); // Default browser font size is 16px and the select value is 0 // -4 value is 12px await fontDropdown.getByLabel("Font size").selectOption({ value: "-4" }); await expect(page).toMatchScreenshot("window-12px.png", { includeDialogBackground: true }); }, ); test("should support enabling system font", async ({ page, app, user }) => { await app.closeVerifyToast(); await app.settings.openUserSettings("Appearance"); const tab = page.getByTestId("mx_AppearanceUserSettingsTab"); // Click "Show advanced" link button await tab.getByRole("button", { name: "Show advanced" }).click(); await tab.getByRole("switch", { name: "Use bundled emoji font" }).click(); await tab.getByRole("switch", { name: "Use a system font" }).click(); // Assert that the font-family value was removed await expect(page.locator("body")).toHaveCSS("font-family", '""'); }); test( "should keep same font and emoji when switching theme", { tag: "@screenshot" }, async ({ page, app, user, util }) => { await app.closeVerifyToast(); const roomId = await util.createAndDisplayRoom(); await app.client.sendMessage(roomId, { body: "Message with 🦡", msgtype: "m.text" }); await app.settings.openUserSettings("Appearance"); const tab = page.getByTestId("mx_AppearanceUserSettingsTab"); await tab.getByRole("button", { name: "Show advanced" }).click(); await tab.getByRole("switch", { name: "Use bundled emoji font" }).click(); await tab.getByRole("switch", { name: "Use a system font" }).click(); await app.closeDialog(); await expect(page).toMatchScreenshot("window-before-switch.png", { mask: [page.locator(".mx_MessageTimestamp")], }); // Switch to dark theme await app.settings.openUserSettings("Appearance"); await util.getMatchSystemThemeSwitch().click(); await util.getDarkTheme().click(); await app.closeDialog(); // Font and emoji should remain the same after theme switch await expect(page).toMatchScreenshot("window-after-switch.png", { mask: [page.locator(".mx_MessageTimestamp")], }); }, ); });