Skip to content

Commit

Permalink
Add tests. Improve safari version detection.
Browse files Browse the repository at this point in the history
  • Loading branch information
Hexagon committed Aug 28, 2024
1 parent e55da21 commit 83c5f47
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 3 deletions.
65 changes: 64 additions & 1 deletion mod.test.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
import { CurrentOS, OperatingSystem } from "./mod.ts";
import { CurrentOS, getOSFromUserAgent, getProductFromUserAgent, getVersionFromUserAgent, OperatingSystem } from "./mod.ts";
import { CurrentProduct, CurrentRuntime, CurrentVersion, Product, Runtime } from "./mod.ts";
import { assertEquals, assertNotEquals } from "@std/assert";
import { test } from "@cross/test";

const UserAgentStrings = {
chrome128OnWindows: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
chrome118OnLinux: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
firefox129OnMacOS: "Mozilla/5.0 (Macintosh; Intel Mac OS X 14.6; rv:129.0) Gecko/20100101 Firefox/129.0",
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",
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",
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",
};

test("Current runtime is correct (string)", () => {
if ("Bun" in globalThis) {
assertEquals("bun", CurrentRuntime);
Expand Down Expand Up @@ -45,3 +54,57 @@ test("Current version contains a dot", () => {
test("Current operating system is supported", () => {
assertNotEquals(OperatingSystem.Unsupported, CurrentOS);
});
test("Chrome is detected", () => {
assertEquals(getProductFromUserAgent(UserAgentStrings.chrome128OnWindows), Product.Chrome);
});
test("Windows is detected from chrome ua", () => {
assertEquals(getOSFromUserAgent(UserAgentStrings.chrome128OnWindows), OperatingSystem.Windows);
});
test("Chrome version is detected from chrome ua", () => {
assertEquals(getVersionFromUserAgent(UserAgentStrings.chrome128OnWindows), "128");
});
test("Chrome is detected", () => {
assertEquals(getProductFromUserAgent(UserAgentStrings.chrome128OnWindows), Product.Chrome);
});
test("Windows is detected from chrome ua", () => {
assertEquals(getOSFromUserAgent(UserAgentStrings.chrome128OnWindows), OperatingSystem.Windows);
});
test("Linux is detected from chrome ua", () => {
assertEquals(getOSFromUserAgent(UserAgentStrings.chrome118OnLinux), OperatingSystem.Linux);
});
test("Chrome version is detected from windows chrome ua", () => {
assertEquals(getVersionFromUserAgent(UserAgentStrings.chrome128OnWindows), "128");
});
test("Chrome version is detected from linux chrome ua", () => {
assertEquals(getVersionFromUserAgent(UserAgentStrings.chrome118OnLinux), "118");
});
test("Firefox is detected", () => {
assertEquals(getProductFromUserAgent(UserAgentStrings.firefox129OnMacOS), Product.Firefox);
});
test("MacOS is detected from Firefox user agent", () => {
assertEquals(getOSFromUserAgent(UserAgentStrings.firefox129OnMacOS), OperatingSystem.macOS);
});
test("Version is detected from Firefox user agent", () => {
assertEquals(getVersionFromUserAgent(UserAgentStrings.firefox129OnMacOS), "129");
});
test("Safari is detected", () => {
assertEquals(getProductFromUserAgent(UserAgentStrings.safari17OnIphone), Product.Safari);
});
test("Ios is detected from Safari user agent", () => {
assertEquals(getOSFromUserAgent(UserAgentStrings.safari17OnIphone), OperatingSystem.iOS);
});
test("Version is detected from Safari user agent", () => {
assertEquals(getVersionFromUserAgent(UserAgentStrings.safari17OnIphone), "17.5");
});
test("MacOS is detected from Safari user agent", () => {
assertEquals(getOSFromUserAgent(UserAgentStrings.safari17OnMacOS), OperatingSystem.macOS);
});
test("Version is detected from Safari user agent", () => {
assertEquals(getVersionFromUserAgent(UserAgentStrings.safari17OnMacOS), "17.5");
});
test("MacOS is detected from older Safari user agent", () => {
assertEquals(getOSFromUserAgent(UserAgentStrings.safari5OnIos), OperatingSystem.iOS);
});
test("Version is detected from Safari user agent", () => {
assertEquals(getVersionFromUserAgent(UserAgentStrings.safari5OnIos), "5.1");
});
4 changes: 2 additions & 2 deletions mod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ function getEdgeVersion(userAgent: string) {
}

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

Expand Down

0 comments on commit 83c5f47

Please sign in to comment.