返回 DeepSeek-Reasonix
effort-switcher.test.tsx
根目录 / desktop / frontend / src / __tests__ / effort-switcher.test.tsx
1 import assert from "node:assert/strict";
2 import { JSDOM } from "jsdom";
3 import React, { act } from "react";
4 import { createRoot } from "react-dom/client";
5 import { EffortSwitcher } from "../components/EffortSwitcher";
6 const dom = new JSDOM('<div id="root"></div>', { url: "http://localhost/", pretendToBeVisual: true });
7 Object.assign(globalThis, {window: dom.window, document: dom.window.document, HTMLElement: dom.window.HTMLElement, Node: dom.window.Node, IS_REACT_ACT_ENVIRONMENT: true});
8 dom.window.matchMedia = (() => ({matches:true, addEventListener(){},removeEventListener(){}})) as typeof window.matchMedia;
9 const rootEl = document.getElementById("root")!;
10 const root = createRoot(rootEl);
11 let selected = "";
12 const effort = {supported:true,current:"deliberate",default:"deliberate",levels:["auto","invalid-legacy-level"],options:[{id:"deliberate",name:"Deliberate"},{id:"brief",name:"Brief"}]};
13 const render = async (disabled: boolean) => act(async () => root.render(<EffortSwitcher disabled={disabled} onPick={id => {selected=id;}} effort={effort} />));
14 await render(false);
15 assert.match(rootEl.textContent!, /Deliberate/);
16 await act(async () => rootEl.querySelector("button")!.click());
17 const options = Array.from(document.querySelectorAll<HTMLButtonElement>('[role="option"]'));
18 assert.deepEqual(options.map(option=>option.textContent),["auto","Deliberate","Brief"]);
19 await act(async () => {
20 options[2].click();
21 await new Promise<void>((resolve) => window.requestAnimationFrame(() => resolve()));
22 await new Promise((resolve) => setTimeout(resolve, 0));
23 });
24 assert.equal(selected,"brief","UI submits adapter ID, not display label or global alias");
25 await act(async () => rootEl.querySelector("button")!.click());
26 assert.ok(document.querySelector('[role="listbox"]'));
27 await render(true);
28 await render(false);
29 assert.equal(document.querySelector('[role="listbox"]'), null, "disabled then enabled does not reopen effort menu");
30 await act(async () => root.unmount());
31 console.log("PASS adapter-owned effort options and exact selection");
32
32 lines Plain Text