UNPKG

@enact/core

Version:

Enact is an open source JavaScript framework containing everything you need to create a fast, scalable mobile or web application.

173 lines (172 loc) 9.04 kB
"use strict"; var _platform = require("../platform"); describe('platform', function () { describe('parseUserAgent for User-Agent Reduction', function () { var testVersion = '113'; var uaGenerator = function uaGenerator(unifiedPlatform) { var deviceCompatibility = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var majorVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : testVersion; return "Mozilla/5.0 (".concat(unifiedPlatform, ") AppleWebKit/537.36 (KHTML, like Gecko) Chrome/").concat(majorVersion, ".0.0.0 ").concat(deviceCompatibility, " Safari/537.36"); }; var testCases = [[uaGenerator('Macintosh; Intel Mac OS X 10_15_7'), 'chrome'], [uaGenerator('Windows NT 10.0; Win64; x64'), 'chrome'], [uaGenerator('X11; Linux x86_64'), 'chrome'], [uaGenerator('X11; CrOS x86_64 14541.0.0'), 'chrome'], [uaGenerator('Fuchsia'), 'chrome'], [uaGenerator('Linux; Android 10; K', 'Mobile'), 'chrome']]; test("should return object including chrome ".concat(testVersion), function () { for (var i = 0; i < testCases.length; i++) { var _parseUserAgent; expect((_parseUserAgent = (0, _platform.parseUserAgent)(testCases[i][0])) === null || _parseUserAgent === void 0 || (_parseUserAgent = _parseUserAgent[testCases[i][1]]) === null || _parseUserAgent === void 0 ? void 0 : _parseUserAgent.toString()).toBe(testVersion); } }); }); describe('parseUserAgent for Safari', function () { test('should detect Safari browsers', function () { var knownUserAgents = { userAgentList: [ // Safari on macOS 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3 Safari/605.1.15', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3 Safari/605.1.15'], expected: { type: 'desktop', browserName: 'safari', browserVersion: 17.3, safari: 17.3 } }; for (var i = 0; i < knownUserAgents.userAgentList.length; i++) { var actual = (0, _platform.parseUserAgent)(knownUserAgents.userAgentList[i]); expect(actual).toMatchObject(knownUserAgents.expected); } }); test('should detect mobile Safari browsers', function () { var knownUserAgents = { // userAgentList: [ // Safari on iPhone, iPad 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3 Mobile/15E148 Safari/604.1', 'Mozilla/5.0 (iPad; CPU OS 17_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3 Mobile/15E148 Safari/604.1', // Chrome on iPhone, iPad 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/121.0.6167.138 Mobile/15E148 Safari/604.1', 'Mozilla/5.0 (iPad; CPU OS 17_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/121.0.6167.138 Mobile/15E148 Safari/604.1', // Edge on iPhone 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 EdgiOS/121.2277.99 Mobile/15E148 Safari/605.1.15', // Firefox on iPhone, iPad 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/122.0 Mobile/15E148 Safari/605.1.15', 'Mozilla/5.0 (iPad; CPU OS 17_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/122.0 Mobile/15E148 Safari/605.1.15'], expected: { type: 'mobile', browserName: 'safari', browserVersion: 17.3, safari: 17.3 } }; for (var i = 0; i < knownUserAgents.userAgentList.length; i++) { var actual = (0, _platform.parseUserAgent)(knownUserAgents.userAgentList[i]); expect(actual).toMatchObject(knownUserAgents.expected); } }); }); describe('parseUserAgent for Chrome', function () { test('should detect Chrome browsers', function () { var knownUserAgents = { // Chrome on Windows, macOS, Linux, Edge on Windows, macOS, respectively userAgentList: [ // Chrome on Windows, macOS, Linux 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', // Edge on Windows, macOS 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.2277.98', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.2277.98'], expected: { type: 'desktop', browserName: 'chrome', browserVersion: 121, chrome: 121 } }; for (var i = 0; i < knownUserAgents.userAgentList.length; i++) { var actual = (0, _platform.parseUserAgent)(knownUserAgents.userAgentList[i]); expect(actual).toMatchObject(knownUserAgents.expected); } }); test('should detect mobile Chrome browsers', function () { var knownUserAgents = { userAgentList: [ // Chrome on Android 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.143 Mobile Safari/537.36', // Edge on Android 'Mozilla/5.0 (Linux; Android 10; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.143 Mobile Safari/537.36 EdgA/120.0.2210.157'], expected: { type: 'mobile', browserName: 'chrome', browserVersion: 121, chrome: 121 } }; for (var i = 0; i < knownUserAgents.userAgentList.length; i++) { var actual = (0, _platform.parseUserAgent)(knownUserAgents.userAgentList[i]); expect(actual).toMatchObject(knownUserAgents.expected); } }); }); describe('parseUserAgent for Firefox', function () { test('should detect Firefox browsers', function () { var knownUserAgents = { userAgentList: [ // Firefox on Windows, macOS, Linux 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14.3; rv:122.0) Gecko/20100101 Firefox/122.0', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0'], expected: { type: 'desktop', browserName: 'firefox', browserVersion: 122, firefox: 122 } }; for (var i = 0; i < knownUserAgents.userAgentList.length; i++) { var actual = (0, _platform.parseUserAgent)(knownUserAgents.userAgentList[i]); expect(actual).toMatchObject(knownUserAgents.expected); } }); test('should detect mobile Firefox browsers', function () { var knownUserAgents = { userAgentList: [ // Firefox on Android 'Mozilla/5.0 (Android 14; Mobile; rv:122.0) Gecko/122.0 Firefox/122.0'], expected: { type: 'mobile', browserName: 'firefox', browserVersion: 122, firefox: 122 } }; for (var i = 0; i < knownUserAgents.userAgentList.length; i++) { var actual = (0, _platform.parseUserAgent)(knownUserAgents.userAgentList[i]); expect(actual).toMatchObject(knownUserAgents.expected); } }); }); describe('parseUserAgent for Chrome on webOS', function () { test('should detect Chrome browsers on webOS', function () { var knownUserAgent = 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 WebAppManager'; var expected = { type: 'webos', browserName: 'chrome', browserVersion: 108, chrome: 108 }; var actual = (0, _platform.parseUserAgent)(knownUserAgent); expect(actual).toMatchObject(expected); }); }); describe('platform', function () { test('should detect node environment if \'window\' does not exist', function () { var windowSpy = jest.spyOn(window, 'window', 'get').mockImplementation(function () {}); var expected = { type: 'node', browserName: 'unknown', browserVersion: 0 }; expect(_platform.platform).toMatchObject(expected); windowSpy.mockRestore(); }); test('should return `webos` for `type` in webOS environment', function () { Object.defineProperty(globalThis.navigator, 'userAgent', { value: 'Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.211 Safari/537.36 WebAppManager', configurable: true }); expect(_platform.platform.type).toBe('webos'); delete globalThis.navigator.userAgent; }); }); });