[extensions] Add new Vehicles: BMW, Jeep Wagooner

This commit is contained in:
Faisal Salman 2025-03-07 10:14:37 +07:00
parent a9b31c0f7b
commit 367eae4c85
3 changed files with 97 additions and 28 deletions

View File

@ -335,15 +335,20 @@ const Libraries = Object.freeze({
const Vehicles = Object.freeze({ const Vehicles = Object.freeze({
device : [ device : [
[ [/aftlbt962e2/i], // BMW
/dilink.+(byd) auto/i, // BYD [[VENDOR, 'BMW']],
], [VENDOR], [
/(rivian) (r1t)/i, // Rivian [/dilink.+(byd) auto/i], // BYD
], [VENDOR, MODEL], [ [VENDOR],
/vcc.+netfront/i, // Volvo [/aftlft962x3/i], // Jeep
], [[VENDOR, 'Volvo']] [[VENDOR, 'Jeep'], [MODEL, 'Wagooner']],
[/(rivian) (r1t)/i], // Rivian
[VENDOR, MODEL],
[/vcc.+netfront/i], // Volvo
[[VENDOR, 'Volvo']]
] ]
}); });

View File

@ -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"
}
}
]

View File

@ -4,31 +4,33 @@ const parseJS = require('@babel/parser').parse;
const traverse = require('@babel/traverse').default; const traverse = require('@babel/traverse').default;
const safe = require('safe-regex'); const safe = require('safe-regex');
const { UAParser } = require('../../src/main/ua-parser'); const { UAParser } = require('../../src/main/ua-parser');
const clis = require('../data/ua/extension/cli.json'); const { Bots, CLIs, Crawlers, Emails, Fetchers, InApps, Libraries, Vehicles } = require('../../src/extensions/ua-parser-extensions');
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');
describe('Extensions', () => { describe('Extensions', () => {
[ [
['CLIs', clis, CLIs], ['CLIs', 'cli', CLIs],
['Crawlers', crawlers, Crawlers], ['Crawlers', 'crawler', Crawlers],
['Emails', emails, Emails], ['Emails', 'email', Emails],
['Fetchers', fetchers, Fetchers], ['Fetchers', 'fetcher', Fetchers],
['InApps', inapps, InApps], ['InApps', 'inapp', InApps],
['Libraries', libraries, Libraries] ['Libraries', 'library', Libraries],
['Vehicles', 'vehicle', Vehicles]
] ]
.forEach((list) => { .forEach(([desc, path, ext]) => {
describe(list[0], () => { const tests = require(`../data/ua/extension/${path}.json`);
list[1].forEach((agent) => { describe(desc, () => {
it(`Can detect ${agent.desc}: "${agent.ua}"`, () => { tests.forEach((test) => {
let browser = UAParser(agent.ua, list[2]).browser; it(`Can detect ${test.desc}: "${test.ua}"`, () => {
assert.strictEqual(String(browser.name), agent.expect.name); const { browser, device } = UAParser(test.ua, ext);
assert.strictEqual(String(browser.version), agent.expect.version); if ('browser' in ext) {
assert.strictEqual(String(browser.type), agent.expect.type); 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);
}
}); });
}); });
}); });