Skip to content

Commit 83c5f47

Browse files
committed
Add tests. Improve safari version detection.
1 parent e55da21 commit 83c5f47

File tree

2 files changed

+66
-3
lines changed

2 files changed

+66
-3
lines changed

mod.test.ts

+64-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1-
import { CurrentOS, OperatingSystem } from "./mod.ts";
1+
import { CurrentOS, getOSFromUserAgent, getProductFromUserAgent, getVersionFromUserAgent, OperatingSystem } from "./mod.ts";
22
import { CurrentProduct, CurrentRuntime, CurrentVersion, Product, Runtime } from "./mod.ts";
33
import { assertEquals, assertNotEquals } from "@std/assert";
44
import { test } from "@cross/test";
55

6+
const UserAgentStrings = {
7+
chrome128OnWindows: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
8+
chrome118OnLinux: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
9+
firefox129OnMacOS: "Mozilla/5.0 (Macintosh; Intel Mac OS X 14.6; rv:129.0) Gecko/20100101 Firefox/129.0",
10+
safari17OnIphone: "Mozilla/5.0 (iPhone; CPU iPhone OS 17_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1",
11+
safari17OnMacOS: "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_6_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
12+
safari5OnIos: "Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3",
13+
};
14+
615
test("Current runtime is correct (string)", () => {
716
if ("Bun" in globalThis) {
817
assertEquals("bun", CurrentRuntime);
@@ -45,3 +54,57 @@ test("Current version contains a dot", () => {
4554
test("Current operating system is supported", () => {
4655
assertNotEquals(OperatingSystem.Unsupported, CurrentOS);
4756
});
57+
test("Chrome is detected", () => {
58+
assertEquals(getProductFromUserAgent(UserAgentStrings.chrome128OnWindows), Product.Chrome);
59+
});
60+
test("Windows is detected from chrome ua", () => {
61+
assertEquals(getOSFromUserAgent(UserAgentStrings.chrome128OnWindows), OperatingSystem.Windows);
62+
});
63+
test("Chrome version is detected from chrome ua", () => {
64+
assertEquals(getVersionFromUserAgent(UserAgentStrings.chrome128OnWindows), "128");
65+
});
66+
test("Chrome is detected", () => {
67+
assertEquals(getProductFromUserAgent(UserAgentStrings.chrome128OnWindows), Product.Chrome);
68+
});
69+
test("Windows is detected from chrome ua", () => {
70+
assertEquals(getOSFromUserAgent(UserAgentStrings.chrome128OnWindows), OperatingSystem.Windows);
71+
});
72+
test("Linux is detected from chrome ua", () => {
73+
assertEquals(getOSFromUserAgent(UserAgentStrings.chrome118OnLinux), OperatingSystem.Linux);
74+
});
75+
test("Chrome version is detected from windows chrome ua", () => {
76+
assertEquals(getVersionFromUserAgent(UserAgentStrings.chrome128OnWindows), "128");
77+
});
78+
test("Chrome version is detected from linux chrome ua", () => {
79+
assertEquals(getVersionFromUserAgent(UserAgentStrings.chrome118OnLinux), "118");
80+
});
81+
test("Firefox is detected", () => {
82+
assertEquals(getProductFromUserAgent(UserAgentStrings.firefox129OnMacOS), Product.Firefox);
83+
});
84+
test("MacOS is detected from Firefox user agent", () => {
85+
assertEquals(getOSFromUserAgent(UserAgentStrings.firefox129OnMacOS), OperatingSystem.macOS);
86+
});
87+
test("Version is detected from Firefox user agent", () => {
88+
assertEquals(getVersionFromUserAgent(UserAgentStrings.firefox129OnMacOS), "129");
89+
});
90+
test("Safari is detected", () => {
91+
assertEquals(getProductFromUserAgent(UserAgentStrings.safari17OnIphone), Product.Safari);
92+
});
93+
test("Ios is detected from Safari user agent", () => {
94+
assertEquals(getOSFromUserAgent(UserAgentStrings.safari17OnIphone), OperatingSystem.iOS);
95+
});
96+
test("Version is detected from Safari user agent", () => {
97+
assertEquals(getVersionFromUserAgent(UserAgentStrings.safari17OnIphone), "17.5");
98+
});
99+
test("MacOS is detected from Safari user agent", () => {
100+
assertEquals(getOSFromUserAgent(UserAgentStrings.safari17OnMacOS), OperatingSystem.macOS);
101+
});
102+
test("Version is detected from Safari user agent", () => {
103+
assertEquals(getVersionFromUserAgent(UserAgentStrings.safari17OnMacOS), "17.5");
104+
});
105+
test("MacOS is detected from older Safari user agent", () => {
106+
assertEquals(getOSFromUserAgent(UserAgentStrings.safari5OnIos), OperatingSystem.iOS);
107+
});
108+
test("Version is detected from Safari user agent", () => {
109+
assertEquals(getVersionFromUserAgent(UserAgentStrings.safari5OnIos), "5.1");
110+
});

mod.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ function getEdgeVersion(userAgent: string) {
1515
}
1616

1717
function getSafariVersion(userAgent: string) {
18-
const match = userAgent.match(/Version\/([0-9]+)\.([0-9]+)(\.[0-9]+)? Safari\//);
19-
if (match) return `${match[1]}.${match[2]}`; // Could include 3rd part if present
18+
const match = userAgent.match(/Version\/([0-9]+)\.([0-9]+)(\.[0-9]+)?/);
19+
if (match) return `${match[1]}.${match[2]}`;
2020
return "Unknown";
2121
}
2222

0 commit comments

Comments
 (0)