/ tests / e2e / theme.spec.ts
theme.spec.ts
 1  import { test, expect, sourceBrowsingUrl } from "@tests/support/fixtures.js";
 2  
 3  const sourceBrowsingFixture = `${sourceBrowsingUrl}/tree/main/src/true.c`;
 4  
 5  test("default theme", async ({ page }) => {
 6    await page.goto(sourceBrowsingFixture);
 7  
 8    {
 9      await expect(page.locator("html")).toHaveAttribute("data-theme", "dark");
10      await expect(page.locator("html")).toHaveAttribute(
11        "data-codefont",
12        "jetbrains",
13      );
14    }
15  });
16  
17  test("theme persistence", async ({ page }) => {
18    await page.goto(sourceBrowsingFixture);
19    await expect(
20      page.getByRole("banner").getByRole("link", { name: "source-browsing" }),
21    ).toBeVisible();
22    await page.getByRole("button", { name: "Settings" }).click();
23  
24    await page.getByText("System").click();
25    await page.getByRole("button", { name: "Light Mode" }).click();
26  
27    await expect(page.locator("html")).toHaveAttribute("data-theme", "light");
28    await expect(page.locator("html")).toHaveAttribute("data-codefont", "system");
29  
30    await page.reload();
31  
32    await expect(page.locator("html")).toHaveAttribute("data-theme", "light");
33    await expect(page.locator("html")).toHaveAttribute("data-codefont", "system");
34  });
35  
36  test("change theme", async ({ page }) => {
37    await page.goto(sourceBrowsingFixture);
38    await expect(
39      page.getByRole("banner").getByRole("link", { name: "source-browsing" }),
40    ).toBeVisible();
41    await page.getByRole("button", { name: "Settings" }).click();
42  
43    await page.getByRole("button", { name: "Light Mode" }).click();
44    await expect(page.locator("html")).toHaveAttribute("data-theme", "light");
45    await expect(page.locator("body")).toHaveCSS(
46      "background-color",
47      "rgb(245, 245, 255)",
48    );
49    // Source highlighting reacts to theme change.
50    await expect(page.getByText("() {")).toHaveCSS("color", "rgb(35, 37, 99)");
51  
52    await page.getByRole("button", { name: "Dark Mode" }).click();
53    await expect(page.locator("html")).toHaveAttribute("data-theme", "dark");
54    await expect(page.locator("body")).toHaveCSS(
55      "background-color",
56      "rgb(10, 13, 16)",
57    );
58    // Source highlighting reacts to theme change.
59    await expect(page.getByText("() {")).toHaveCSS("color", "rgb(249, 249, 251)");
60  });
61  
62  test("change code font", async ({ page }) => {
63    await page.goto(sourceBrowsingFixture);
64    await expect(
65      page.getByRole("banner").getByRole("link", { name: "source-browsing" }),
66    ).toBeVisible();
67  
68    await page.getByRole("button", { name: "Settings" }).click();
69  
70    await page.getByText("System").click();
71    await expect(page.getByText("System")).toHaveClass(/selected/);
72    await expect(page.locator("html")).toHaveAttribute("data-codefont", "system");
73  
74    await page.getByText("JetBrains Mono").click();
75    await expect(page.getByText("JetBrains Mono")).toHaveClass(/selected/);
76    await expect(page.locator("html")).toHaveAttribute(
77      "data-codefont",
78      "jetbrains",
79    );
80  });