UNPKG

codetrix

Version:

A lightweight lodash-style utility library

262 lines (261 loc) 10.7 kB
import { isBrowser, isNode, isMobile, isTablet, isDesktop, isServerless, isWebWorker, isElectron, getRuntimeEnv, getOS, getBrowserName, getDeviceType, } from "../../utility/env"; describe("Environment Utilities", () => { describe("isBrowser", () => { it("should return true when window and document are defined", () => { global.window = {}; global.document = {}; expect(isBrowser()).toBe(true); delete global.window; delete global.document; }); it("should return false when window or document are undefined", () => { expect(isBrowser()).toBe(false); }); }); describe("isNode", () => { it("should return true when process.versions.node is defined", () => { global.process = { versions: { node: "18.0.0" } }; expect(isNode()).toBe(true); delete global.process; }); it("should return false when process is undefined", () => { expect(isNode()).toBe(false); }); it("should return false when process.versions?.node is undefined", () => { global.process = { versions: {} }; expect(isNode()).toBe(false); delete global.process; }); }); describe("isMobile", () => { it("should return true for mobile user agents", () => { global.window = {}; global.document = {}; global.navigator = { userAgent: "iPhone" }; expect(isMobile()).toBe(true); delete global.navigator; delete global.window; delete global.document; }); it("should return false for desktop user agents", () => { global.window = {}; global.document = {}; global.navigator = { userAgent: "Windows NT" }; expect(isMobile()).toBe(false); delete global.navigator; delete global.window; delete global.document; }); it("should return false if not in browser", () => { expect(isMobile()).toBe(false); }); }); describe("isTablet", () => { it("should return true for tablet user agents", () => { global.window = {}; global.document = {}; global.navigator = { userAgent: "iPad" }; expect(isTablet()).toBe(true); delete global.navigator; delete global.window; delete global.document; }); it("should return false for non-tablet user agents", () => { global.window = {}; global.document = {}; global.navigator = { userAgent: "Windows NT" }; expect(isTablet()).toBe(false); delete global.navigator; delete global.window; delete global.document; }); it("should return false if not in browser", () => { expect(isTablet()).toBe(false); }); }); describe("isDesktop", () => { it("should return true for desktop user agents", () => { global.window = {}; global.document = {}; global.navigator = { userAgent: "Windows NT" }; expect(isDesktop()).toBe(true); delete global.navigator; delete global.window; delete global.document; }); it("should return false for mobile user agents", () => { global.window = {}; global.document = {}; global.navigator = { userAgent: "Android" }; expect(isDesktop()).toBe(false); delete global.navigator; delete global.window; delete global.document; }); it("should return false for tablet user agents", () => { global.window = {}; global.document = {}; global.navigator = { userAgent: "iPad" }; expect(isDesktop()).toBe(false); delete global.navigator; delete global.window; delete global.document; }); }); describe("isServerless", () => { it("should return true if AWS_LAMBDA_FUNCTION_NAME is set", () => { global.process = { versions: { node: "18.0.0" }, env: { AWS_LAMBDA_FUNCTION_NAME: "lambda" } }; expect(isServerless()).toBe(true); delete global.process; }); it("should return true if VERCEL is set", () => { global.process = { versions: { node: "18.0.0" }, env: { VERCEL: "1" } }; expect(isServerless()).toBe(true); delete global.process; }); it("should return false if not serverless", () => { global.process = { versions: { node: "18.0.0" }, env: {} }; expect(isServerless()).toBe(false); delete global.process; }); it("should return false if not node", () => { expect(isServerless()).toBe(false); }); }); describe("isWebWorker", () => { it("should return true if self.constructor.name is DedicatedWorkerGlobalScope", () => { global.self = { constructor: { name: "DedicatedWorkerGlobalScope" } }; expect(isWebWorker()).toBe(true); delete global.self; }); it("should return false otherwise", () => { expect(isWebWorker()).toBe(false); }); }); describe("isElectron", () => { it("should return true if process.versions.electron is defined", () => { global.process = { versions: { node: "18.0.0", electron: "25.0.0" } }; expect(isElectron()).toBe(true); delete global.process; }); it("should return false if not electron", () => { global.process = { versions: { node: "18.0.0" } }; expect(isElectron()).toBe(false); delete global.process; }); it("should return false if not node", () => { expect(isElectron()).toBe(false); }); it("should return false if process.versions.electron is undefined", () => { global.process = { versions: { node: "18.0.0", electron: undefined } }; expect(isElectron()).toBe(false); delete global.process; }); }); describe("getRuntimeEnv", () => { it("should return 'browser' if isBrowser is true", () => { global.window = {}; global.document = {}; expect(getRuntimeEnv()).toBe("browser"); delete global.window; delete global.document; }); it("should return 'electron' if isNode and isElectron are true", () => { global.process = { versions: { node: "18.0.0", electron: "25.0.0" } }; expect(getRuntimeEnv()).toBe("electron"); delete global.process; }); it("should return 'node' if isNode is true", () => { global.process = { versions: { node: "18.0.0" } }; expect(getRuntimeEnv()).toBe("node"); delete global.process; }); it("should return 'webworker' if isWebWorker is true", () => { global.self = { constructor: { name: "DedicatedWorkerGlobalScope" } }; expect(getRuntimeEnv()).toBe("webworker"); delete global.self; }); it("should return 'unknown' otherwise", () => { expect(getRuntimeEnv()).toBe("unknown"); }); }); describe("getOS", () => { it("should return correct OS for various user agents", () => { global.window = {}; global.document = {}; global.navigator = { userAgent: "Windows NT" }; expect(getOS()).toBe("Windows"); global.navigator = { userAgent: "Macintosh" }; expect(getOS()).toBe("macOS"); global.navigator = { userAgent: "Linux" }; expect(getOS()).toBe("Linux"); global.navigator = { userAgent: "Android" }; expect(getOS()).toBe("Android"); global.navigator = { userAgent: "iPhone" }; expect(getOS()).toBe("iOS"); global.navigator = { userAgent: "UnknownAgent" }; expect(getOS()).toBe("Unknown"); delete global.navigator; delete global.window; delete global.document; }); it("should return 'Node.js' if not in browser", () => { expect(getOS()).toBe("Node.js"); }); }); describe("getBrowserName", () => { it("should return correct browser name for various user agents", () => { global.window = {}; global.document = {}; global.navigator = { userAgent: "Edg" }; expect(getBrowserName()).toBe("Edge"); global.navigator = { userAgent: "OPR" }; expect(getBrowserName()).toBe("Opera"); global.navigator = { userAgent: "Chrome" }; expect(getBrowserName()).toBe("Chrome"); global.navigator = { userAgent: "Safari" }; expect(getBrowserName()).toBe("Safari"); global.navigator = { userAgent: "Firefox" }; expect(getBrowserName()).toBe("Firefox"); global.navigator = { userAgent: "MSIE" }; expect(getBrowserName()).toBe("Internet Explorer"); global.navigator = { userAgent: "UnknownAgent" }; expect(getBrowserName()).toBe("Unknown"); delete global.navigator; delete global.window; delete global.document; }); it("should return 'Node.js' if not in browser", () => { expect(getBrowserName()).toBe("Node.js"); }); }); describe("getDeviceType", () => { it("should return 'mobile' for mobile user agents", () => { global.navigator = { userAgent: "Android" }; expect(getDeviceType()).toBe("mobile"); delete global.navigator; }); it("should return 'tablet' for tablet user agents", () => { global.navigator = { userAgent: "iPad" }; expect(getDeviceType()).toBe("tablet"); delete global.navigator; }); it("should return 'desktop' for desktop user agents", () => { global.navigator = { userAgent: "Windows NT" }; expect(getDeviceType()).toBe("desktop"); delete global.navigator; }); it("should return 'desktop' if navigator is undefined", () => { expect(getDeviceType()).toBe("desktop"); }); }); });