Files
kandev/apps/web/lib/browser/rendering-engine.test.ts
2026-08-01 17:07:32 +01:00

102 lines
3.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { detectRenderingEngine, markRenderingEngine } from "./rendering-engine";
type NavigatorFixture = {
userAgent: string;
};
const safariMac: NavigatorFixture = {
userAgent:
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
};
describe("detectRenderingEngine", () => {
it.each([
["macOS Safari", safariMac],
[
"macOS WKWebView",
{
userAgent:
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) AppleWebKit/605.1.15 (KHTML, like Gecko)",
},
],
[
"WebKitGTK",
{
userAgent:
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/617.1 (KHTML, like Gecko) Version/18.0 Safari/617.1",
},
],
[
"iOS Chrome",
{
userAgent:
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/125.0.6422.99 Mobile/15E148 Safari/604.1",
},
],
[
"iOS Edge",
{
userAgent:
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) EdgiOS/125.0.2535.85 Mobile/15E148 Safari/604.1",
},
],
[
"iPadOS desktop mode",
{
userAgent:
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",
},
],
] satisfies Array<[string, NavigatorFixture]>)("%s is WebKit", (_name, navigatorLike) => {
expect(detectRenderingEngine(navigatorLike)).toBe("webkit");
});
it.each([
[
"desktop Chrome",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
],
[
"Edge WebView2",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0",
],
[
"Android Chrome",
"Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Mobile Safari/537.36",
],
[
"Firefox",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:127.0) Gecko/20100101 Firefox/127.0",
],
["unknown", "TestBrowser/1.0"],
] satisfies Array<[string, string]>)("%s is not WebKit", (_name, userAgent) => {
expect(detectRenderingEngine({ userAgent })).toBe("other");
});
it("keeps desktop Mac Chrome on the non-WebKit path", () => {
expect(
detectRenderingEngine({
userAgent:
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
}),
).toBe("other");
});
});
describe("markRenderingEngine", () => {
it("writes a transient WebKit marker to the supplied root", () => {
const root = document.createElement("html");
expect(markRenderingEngine(root, safariMac)).toBe("webkit");
expect(root.dataset.renderingEngine).toBe("webkit");
});
it("fails safe to the default marker for missing navigator data", () => {
const root = document.createElement("html");
expect(markRenderingEngine(root, null)).toBe("other");
expect(root.dataset.renderingEngine).toBe("other");
});
});