import { expect, test } from "@playwright/test"; import { SIMULATION_ACTIVITY_STALL_TIMEOUT_MS, SIMULATION_ACTIVITY_STALL_TIMEOUT_SECONDS, SIMULATION_SOLVER_STALL_TIMEOUT_MINUTES, SIMULATION_SOLVER_STALL_TIMEOUT_MS, solverActivityStallTimeoutMessage, solverStallTimeoutMessage, solverStallTimeoutReached, } from "../../src/simulationTimeout"; test("solver stall watchdog allows the validated long-running window", () => { expect(SIMULATION_SOLVER_STALL_TIMEOUT_MINUTES).toBe(15); expect(SIMULATION_SOLVER_STALL_TIMEOUT_MS).toBe(900_000); expect(solverStallTimeoutReached(1_000, 900_999)).toBe(false); expect(solverStallTimeoutReached(1_000, 901_000)).toBe(true); }); test("solver stall messages use the configured duration", () => { expect(solverStallTimeoutMessage("detected")).toContain("连续 15 分钟"); expect(solverStallTimeoutMessage("recovering")).toContain("连续 15 分钟"); expect(solverStallTimeoutMessage("recovering")).toContain("恢复部分结果"); }); test("activity-aware watchdog keeps its shorter true-stall threshold", () => { expect(SIMULATION_ACTIVITY_STALL_TIMEOUT_SECONDS).toBe(60); expect(SIMULATION_ACTIVITY_STALL_TIMEOUT_MS).toBe(60_000); expect(solverActivityStallTimeoutMessage("detected")).toContain( "接受步和内部活动均连续 60 秒", ); });