[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({
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']]
]
});

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