Skip to content

Commit 8df6ee0

Browse files
committed
test: test case for TrustedTypesPolicy case
1 parent e4a18c7 commit 8df6ee0

File tree

1 file changed

+129
-0
lines changed

1 file changed

+129
-0
lines changed

test/e2e/overlay.test.js

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2124,4 +2124,133 @@ describe("overlay", () => {
21242124
await server.stop();
21252125
}
21262126
});
2127+
2128+
it("should navigate between multiple errors when Trusted Types are enabled", async () => {
2129+
const compiler = webpack(trustedTypesConfig);
2130+
2131+
// Create multiple distinct errors for navigation testing
2132+
new ErrorPlugin("First error message").apply(compiler);
2133+
new ErrorPlugin("Second error message").apply(compiler);
2134+
new ErrorPlugin("Third error message").apply(compiler);
2135+
2136+
const devServerOptions = {
2137+
port,
2138+
client: {
2139+
overlay: {
2140+
trustedTypesPolicyName: "webpack#dev-overlay",
2141+
},
2142+
},
2143+
};
2144+
const server = new Server(devServerOptions, compiler);
2145+
2146+
await server.start();
2147+
2148+
const { page, browser } = await runBrowser();
2149+
2150+
try {
2151+
const consoleMessages = [];
2152+
2153+
page.on("console", (message) => {
2154+
consoleMessages.push(message.text());
2155+
});
2156+
2157+
await page.goto(`http://localhost:${port}/`, {
2158+
waitUntil: "networkidle0",
2159+
});
2160+
2161+
// Delay for the overlay to appear
2162+
await delay(1000);
2163+
2164+
// Get the overlay iframe and its content frame
2165+
const overlayHandle = await page.$("#webpack-dev-server-client-overlay");
2166+
const overlayFrame = await overlayHandle.contentFrame();
2167+
2168+
// Check initial error counter display
2169+
let errorCounter = await overlayFrame.$eval(
2170+
".error-counter",
2171+
(el) => el.textContent,
2172+
);
2173+
expect(errorCounter).toBe("ERROR 1/3");
2174+
2175+
// Check initial error content
2176+
let errorContent = await overlayFrame.$eval(
2177+
".error-message",
2178+
(el) => el.textContent,
2179+
);
2180+
expect(errorContent).toContain("First error message");
2181+
2182+
// Test navigation button - next
2183+
const nextButton = await overlayFrame.$("button:nth-of-type(2)");
2184+
await nextButton.click();
2185+
await delay(100);
2186+
2187+
// Verify we moved to second error
2188+
errorCounter = await overlayFrame.$eval(
2189+
".error-counter",
2190+
(el) => el.textContent,
2191+
);
2192+
expect(errorCounter).toBe("ERROR 2/3");
2193+
errorContent = await overlayFrame.$eval(
2194+
".error-message",
2195+
(el) => el.textContent,
2196+
);
2197+
expect(errorContent).toContain("Second error message");
2198+
2199+
// Test keyboard navigation - ⌘/Ctrl + →
2200+
await page.keyboard.down(
2201+
process.platform === "darwin" ? "Meta" : "Control",
2202+
);
2203+
await page.keyboard.press("ArrowRight");
2204+
await page.keyboard.up(
2205+
process.platform === "darwin" ? "Meta" : "Control",
2206+
);
2207+
await delay(100);
2208+
2209+
// Verify we moved to third error
2210+
errorCounter = await overlayFrame.$eval(
2211+
".error-counter",
2212+
(el) => el.textContent,
2213+
);
2214+
expect(errorCounter).toBe("ERROR 3/3");
2215+
errorContent = await overlayFrame.$eval(
2216+
".error-message",
2217+
(el) => el.textContent,
2218+
);
2219+
expect(errorContent).toContain("Third error message");
2220+
2221+
// Test keyboard navigation - ⌘/Ctrl + ← (going back to previous error)
2222+
await page.keyboard.down(
2223+
process.platform === "darwin" ? "Meta" : "Control",
2224+
);
2225+
await page.keyboard.press("ArrowLeft");
2226+
await page.keyboard.up(
2227+
process.platform === "darwin" ? "Meta" : "Control",
2228+
);
2229+
await delay(100);
2230+
2231+
// Verify we moved back to second error
2232+
errorCounter = await overlayFrame.$eval(
2233+
".error-counter",
2234+
(el) => el.textContent,
2235+
);
2236+
expect(errorCounter).toBe("ERROR 2/3");
2237+
errorContent = await overlayFrame.$eval(
2238+
".error-message",
2239+
(el) => el.textContent,
2240+
);
2241+
expect(errorContent).toContain("Second error message");
2242+
2243+
// Ensure no Trusted Types violations were reported
2244+
expect(
2245+
consoleMessages.filter((item) =>
2246+
/requires 'TrustedHTML' assignment/.test(item),
2247+
),
2248+
).toHaveLength(0);
2249+
} catch (error) {
2250+
throw error;
2251+
} finally {
2252+
await browser.close();
2253+
await server.stop();
2254+
}
2255+
});
21272256
});

0 commit comments

Comments
 (0)