Skip to content

Commit 0c7b0f9

Browse files
committed
test(webview): cover codex speed themes
1 parent 3558eed commit 0c7b0f9

8 files changed

Lines changed: 117 additions & 11 deletions

webview-ui/playwright/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import "./vscode-theme-dark.css"
22
import "@vscode/codicons/dist/codicon.css"
33
import "../src/index.css"
4+
import "./vscode-theme-light.css"
45

56
// Components read `window.IMAGES_BASE_URI` at mount time to resolve extension
67
// image assets. Under Playwright CT the extension host isn't present, so seed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
.vscode-light {
2+
color-scheme: light;
3+
--vscode-foreground: #3b3b3b;
4+
--vscode-disabledForeground: #61616180;
5+
--vscode-descriptionForeground: #717171;
6+
--vscode-errorForeground: #a1260d;
7+
--vscode-focusBorder: #0090f1;
8+
--vscode-editor-foreground: #333333;
9+
--vscode-editor-background: #ffffff;
10+
--vscode-button-foreground: #ffffff;
11+
--vscode-button-background: #007acc;
12+
--vscode-button-hoverBackground: #0062a3;
13+
--vscode-dropdown-foreground: #3b3b3b;
14+
--vscode-dropdown-background: #ffffff;
15+
--vscode-dropdown-border: #cecece;
16+
--vscode-input-foreground: #3b3b3b;
17+
--vscode-input-background: #ffffff;
18+
--vscode-input-border: #cecece;
19+
--vscode-list-hoverForeground: #3b3b3b;
20+
--vscode-list-hoverBackground: #e8e8e8;
21+
--vscode-list-focusBackground: #d6ebff;
22+
--vscode-list-activeSelectionBackground: #0060c0;
23+
--vscode-list-activeSelectionForeground: #ffffff;
24+
--vscode-toolbar-hoverBackground: #e8e8e8;
25+
--vscode-widget-border: #d4d4d4;
26+
--vscode-widget-shadow: #00000029;
27+
--vscode-menu-foreground: #3b3b3b;
28+
--vscode-menu-background: #ffffff;
29+
--vscode-editorHoverWidget-foreground: #3b3b3b;
30+
--vscode-editorHoverWidget-background: #f8f8f8;
31+
--vscode-editorHoverWidget-border: #c8c8c8;
32+
--vscode-scrollbarSlider-background: #64646466;
33+
--vscode-scrollbarSlider-hoverBackground: #64646499;
34+
--vscode-scrollbarSlider-activeBackground: #00000099;
35+
}

webview-ui/src/components/settings/providers/__tests__/OpenAICodex.visual.fixture.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
/* v8 ignore file -- Playwright component fixture is covered by the visual test. */
22
import React from "react"
33

4+
import {
5+
OpenAiCodexServiceTier,
6+
type OpenAiCodexServiceTier as OpenAiCodexServiceTierValue,
7+
} from "@roo-code/types/model"
8+
49
import { TranslationContext } from "@src/i18n/TranslationContext"
510
import { TooltipProvider } from "@src/components/ui/tooltip"
611
import { OpenAICodexSpeedSelector } from "../OpenAICodexSpeedSelector"
@@ -14,15 +19,19 @@ const translations: Record<string, string> = {
1419
"settings:openAiCodexSpeed.fast": "Fast (1.5x speed, increased usage)",
1520
}
1621

17-
export const OpenAICodexFixture = () => (
22+
interface OpenAICodexFixtureProps {
23+
value?: OpenAiCodexServiceTierValue
24+
}
25+
26+
export const OpenAICodexFixture = ({ value = OpenAiCodexServiceTier.Default }: OpenAICodexFixtureProps) => (
1827
<TranslationContext.Provider
1928
value={{
2029
t: (key) => translations[key] ?? key,
2130
i18n: null as unknown as typeof import("../../../../i18n/setup").default,
2231
}}>
2332
<TooltipProvider>
2433
<div className="w-[480px] bg-vscode-editor-background p-4 text-vscode-foreground">
25-
<OpenAICodexSpeedSelector onValueChange={() => {}} />
34+
<OpenAICodexSpeedSelector value={value} onValueChange={() => {}} />
2635
</div>
2736
</TooltipProvider>
2837
</TranslationContext.Provider>
Lines changed: 70 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,77 @@
11
import React from "react"
22

3+
import { OpenAiCodexServiceTier } from "@roo-code/types/model"
4+
35
import { expect, test } from "../../../../../playwright/coverage-fixture"
46
import { OpenAICodexFixture } from "./OpenAICodex.visual.fixture"
57

6-
test("renders the OpenAI Codex speed selector in the VS Code dark theme", async ({ mount }) => {
7-
const component = await mount(<OpenAICodexFixture />)
8-
const selector = component.getByTestId("openai-codex-service-tier")
8+
const themes = [
9+
{
10+
name: "dark",
11+
bodyClass: "vscode-dark",
12+
themeId: "Default Dark Modern",
13+
editorBackground: "#1e1e1e",
14+
dropdownBackground: "#3c3c3c",
15+
triggerBackground: "rgb(60, 60, 60)",
16+
},
17+
{
18+
name: "light",
19+
bodyClass: "vscode-light",
20+
themeId: "Default Light Modern",
21+
editorBackground: "#ffffff",
22+
dropdownBackground: "#ffffff",
23+
triggerBackground: "rgb(255, 255, 255)",
24+
},
25+
] as const
26+
27+
const tiers = [
28+
{ name: "standard", value: OpenAiCodexServiceTier.Default },
29+
{ name: "priority", value: OpenAiCodexServiceTier.Priority },
30+
] as const
31+
32+
for (const theme of themes) {
33+
for (const tier of tiers) {
34+
test(`renders the ${tier.name} OpenAI Codex speed in the VS Code ${theme.name} theme`, async ({ mount }) => {
35+
const component = await mount(<OpenAICodexFixture value={tier.value} />)
36+
const selector = component.getByTestId("openai-codex-service-tier")
37+
38+
await selector.evaluate((element, { bodyClass, themeId }) => {
39+
const { document } = element.ownerDocument.defaultView!
40+
41+
document.documentElement.className = bodyClass
42+
document.body.className = bodyClass
43+
document.body.dataset.vscodeThemeId = themeId
44+
}, theme)
45+
await expect
46+
.poll(() =>
47+
selector.evaluate((element) => {
48+
const body = element.ownerDocument.body
49+
const styles = getComputedStyle(body)
50+
const trigger = element.querySelector("button")!
51+
52+
return {
53+
documentClass: element.ownerDocument.documentElement.className,
54+
bodyClass: body.className,
55+
editorBackground: styles.getPropertyValue("--vscode-editor-background").trim(),
56+
dropdownBackground: styles.getPropertyValue("--vscode-dropdown-background").trim(),
57+
triggerBackground: getComputedStyle(trigger).backgroundColor,
58+
}
59+
}),
60+
)
61+
.toEqual({
62+
documentClass: theme.bodyClass,
63+
bodyClass: theme.bodyClass,
64+
editorBackground: theme.editorBackground,
65+
dropdownBackground: theme.dropdownBackground,
66+
triggerBackground: theme.triggerBackground,
67+
})
968

10-
await selector.evaluate(async () => {
11-
await document.fonts.ready
12-
await new Promise<void>((resolve) => requestAnimationFrame(() => resolve()))
13-
})
69+
await selector.evaluate(async () => {
70+
await document.fonts.ready
71+
await new Promise<void>((resolve) => requestAnimationFrame(() => resolve()))
72+
})
1473

15-
await expect(selector).toHaveScreenshot("openai-codex-speed-selector-dark.png")
16-
})
74+
await expect(selector).toHaveScreenshot(`openai-codex-speed-selector-${tier.name}-${theme.name}.png`)
75+
})
76+
}
77+
}
4.75 KB
Loading
4.54 KB
Loading

webview-ui/src/components/settings/providers/__tests__/__screenshots__/openai-codex-speed-selector-dark.png renamed to webview-ui/src/components/settings/providers/__tests__/__screenshots__/openai-codex-speed-selector-standard-dark.png

File renamed without changes.
2.88 KB
Loading

0 commit comments

Comments
 (0)