@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
JavaScript
;
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;
});
});
});