diff --git a/src/extensions/ua-parser-extensions.js b/src/extensions/ua-parser-extensions.js index 761b3c8..7c24624 100644 --- a/src/extensions/ua-parser-extensions.js +++ b/src/extensions/ua-parser-extensions.js @@ -335,15 +335,20 @@ const Libraries = Object.freeze({ const Vehicles = Object.freeze({ device : [ - [ - /dilink.+(byd) auto/i, // BYD - ], [VENDOR], [ + [/aftlbt962e2/i], // BMW + [[VENDOR, 'BMW']], - /(rivian) (r1t)/i, // Rivian - ], [VENDOR, MODEL], [ + [/dilink.+(byd) auto/i], // BYD + [VENDOR], - /vcc.+netfront/i, // Volvo - ], [[VENDOR, 'Volvo']] + [/aftlft962x3/i], // Jeep + [[VENDOR, 'Jeep'], [MODEL, 'Wagooner']], + + [/(rivian) (r1t)/i], // Rivian + [VENDOR, MODEL], + + [/vcc.+netfront/i], // Volvo + [[VENDOR, 'Volvo']] ] }); diff --git a/test/data/ua/extension/vehicle.json b/test/data/ua/extension/vehicle.json new file mode 100644 index 0000000..7800051 --- /dev/null +++ b/test/data/ua/extension/vehicle.json @@ -0,0 +1,62 @@ +[ + { + "desc" : "BMW", + "ua" : "Mozilla/5.0 (Linux; Android 9; AFTLBT962E2) AppleWebKit/537.36 (KHTML, like Gecko) Silk/118.3.1 like Chrome/118.0.5993.155 Safari/537.36", + "expect" : + { + "vendor" : "BMW", + "model" : "undefined", + "type" : "undefined" + } + }, + { + "desc" : "BYD", + "ua" : "Mozilla/5.0 (Linux; Android 10; DiLink3.0 For BYD AUTO Build/QKQ1.200816.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.186 Safari/537.36", + "expect" : + { + "vendor" : "BYD", + "model" : "undefined", + "type" : "undefined" + } + }, + { + "desc" : "Jeep", + "ua" : "Mozilla/5.0 (Linux; Android 9; AFTLFT962X3) AppleWebKit/537.36 (KHTML, like Gecko) Silk/124.5.2 like Chrome/124.0.6367.248 Safari/537.36", + "expect" : + { + "vendor" : "Jeep", + "model" : "Wagooner", + "type" : "undefined" + } + }, + { + "desc" : "Rivian", + "ua" : "Dalvik/2.1.0 (Linux; U; Android 10; Rivian R1T Build/QQ3A.200605.002)", + "expect" : + { + "vendor" : "Rivian", + "model" : "R1T", + "type" : "undefined" + } + }, + { + "desc" : "Tesla", + "ua" : "Mozilla/5.0 (X11; GNU/Linux) AppleWebKit/537.36 (KHTML, like Gecko) Chromium/79.0.3945.130 Chrome/79.0.3945.130 Safari/537.36 Tesla/2020.36.16-3e9e4e8dd287", + "expect" : + { + "vendor" : "Tesla", + "model" : "undefined", + "type" : "embedded" + } + }, + { + "desc" : "Volvo", + "ua" : "Mozilla/5.0 (VCC; 1.0; like Gecko) NetFront/4.2", + "expect" : + { + "vendor" : "Volvo", + "model" : "undefined", + "type" : "undefined" + } + } +] diff --git a/test/unit/extensions.js b/test/unit/extensions.js index f4548f3..417ed8a 100644 --- a/test/unit/extensions.js +++ b/test/unit/extensions.js @@ -4,31 +4,33 @@ const parseJS = require('@babel/parser').parse; const traverse = require('@babel/traverse').default; const safe = require('safe-regex'); const { UAParser } = require('../../src/main/ua-parser'); -const clis = require('../data/ua/extension/cli.json'); -const crawlers = require('../data/ua/extension/crawler.json'); -const emails = require('../data/ua/extension/email.json'); -const fetchers = require('../data/ua/extension/fetcher.json'); -const inapps = require('../data/ua/extension/inapp.json'); -const libraries = require('../data/ua/extension/library.json'); -const { Bots, CLIs, Crawlers, Emails, Fetchers, InApps, Libraries } = require('../../src/extensions/ua-parser-extensions'); +const { Bots, CLIs, Crawlers, Emails, Fetchers, InApps, Libraries, Vehicles } = require('../../src/extensions/ua-parser-extensions'); describe('Extensions', () => { [ - ['CLIs', clis, CLIs], - ['Crawlers', crawlers, Crawlers], - ['Emails', emails, Emails], - ['Fetchers', fetchers, Fetchers], - ['InApps', inapps, InApps], - ['Libraries', libraries, Libraries] + ['CLIs', 'cli', CLIs], + ['Crawlers', 'crawler', Crawlers], + ['Emails', 'email', Emails], + ['Fetchers', 'fetcher', Fetchers], + ['InApps', 'inapp', InApps], + ['Libraries', 'library', Libraries], + ['Vehicles', 'vehicle', Vehicles] ] - .forEach((list) => { - describe(list[0], () => { - list[1].forEach((agent) => { - it(`Can detect ${agent.desc}: "${agent.ua}"`, () => { - let browser = UAParser(agent.ua, list[2]).browser; - assert.strictEqual(String(browser.name), agent.expect.name); - assert.strictEqual(String(browser.version), agent.expect.version); - assert.strictEqual(String(browser.type), agent.expect.type); + .forEach(([desc, path, ext]) => { + const tests = require(`../data/ua/extension/${path}.json`); + describe(desc, () => { + tests.forEach((test) => { + it(`Can detect ${test.desc}: "${test.ua}"`, () => { + const { browser, device } = UAParser(test.ua, ext); + if ('browser' in ext) { + assert.strictEqual(String(browser.name), test.expect.name); + assert.strictEqual(String(browser.version), test.expect.version); + assert.strictEqual(String(browser.type), test.expect.type); + } else if ('device' in ext) { + assert.strictEqual(String(device.vendor), test.expect.vendor); + assert.strictEqual(String(device.model), test.expect.model); + assert.strictEqual(String(device.type), test.expect.type); + } }); }); });