Skip to content

Commit 367eae4

Browse files
committed
[extensions] Add new Vehicles: BMW, Jeep Wagooner
1 parent a9b31c0 commit 367eae4

File tree

3 files changed

+97
-28
lines changed

3 files changed

+97
-28
lines changed

src/extensions/ua-parser-extensions.js

+12-7
Original file line numberDiff line numberDiff line change
@@ -335,15 +335,20 @@ const Libraries = Object.freeze({
335335

336336
const Vehicles = Object.freeze({
337337
device : [
338-
[
339-
/dilink.+(byd) auto/i, // BYD
340-
], [VENDOR], [
338+
[/aftlbt962e2/i], // BMW
339+
[[VENDOR, 'BMW']],
340+
341+
[/dilink.+(byd) auto/i], // BYD
342+
[VENDOR],
341343

342-
/(rivian) (r1t)/i, // Rivian
343-
], [VENDOR, MODEL], [
344+
[/aftlft962x3/i], // Jeep
345+
[[VENDOR, 'Jeep'], [MODEL, 'Wagooner']],
346+
347+
[/(rivian) (r1t)/i], // Rivian
348+
[VENDOR, MODEL],
344349

345-
/vcc.+netfront/i, // Volvo
346-
], [[VENDOR, 'Volvo']]
350+
[/vcc.+netfront/i], // Volvo
351+
[[VENDOR, 'Volvo']]
347352
]
348353
});
349354

test/data/ua/extension/vehicle.json

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
[
2+
{
3+
"desc" : "BMW",
4+
"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",
5+
"expect" :
6+
{
7+
"vendor" : "BMW",
8+
"model" : "undefined",
9+
"type" : "undefined"
10+
}
11+
},
12+
{
13+
"desc" : "BYD",
14+
"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",
15+
"expect" :
16+
{
17+
"vendor" : "BYD",
18+
"model" : "undefined",
19+
"type" : "undefined"
20+
}
21+
},
22+
{
23+
"desc" : "Jeep",
24+
"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",
25+
"expect" :
26+
{
27+
"vendor" : "Jeep",
28+
"model" : "Wagooner",
29+
"type" : "undefined"
30+
}
31+
},
32+
{
33+
"desc" : "Rivian",
34+
"ua" : "Dalvik/2.1.0 (Linux; U; Android 10; Rivian R1T Build/QQ3A.200605.002)",
35+
"expect" :
36+
{
37+
"vendor" : "Rivian",
38+
"model" : "R1T",
39+
"type" : "undefined"
40+
}
41+
},
42+
{
43+
"desc" : "Tesla",
44+
"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",
45+
"expect" :
46+
{
47+
"vendor" : "Tesla",
48+
"model" : "undefined",
49+
"type" : "embedded"
50+
}
51+
},
52+
{
53+
"desc" : "Volvo",
54+
"ua" : "Mozilla/5.0 (VCC; 1.0; like Gecko) NetFront/4.2",
55+
"expect" :
56+
{
57+
"vendor" : "Volvo",
58+
"model" : "undefined",
59+
"type" : "undefined"
60+
}
61+
}
62+
]

test/unit/extensions.js

+23-21
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,33 @@ const parseJS = require('@babel/parser').parse;
44
const traverse = require('@babel/traverse').default;
55
const safe = require('safe-regex');
66
const { UAParser } = require('../../src/main/ua-parser');
7-
const clis = require('../data/ua/extension/cli.json');
8-
const crawlers = require('../data/ua/extension/crawler.json');
9-
const emails = require('../data/ua/extension/email.json');
10-
const fetchers = require('../data/ua/extension/fetcher.json');
11-
const inapps = require('../data/ua/extension/inapp.json');
12-
const libraries = require('../data/ua/extension/library.json');
13-
const { Bots, CLIs, Crawlers, Emails, Fetchers, InApps, Libraries } = require('../../src/extensions/ua-parser-extensions');
7+
const { Bots, CLIs, Crawlers, Emails, Fetchers, InApps, Libraries, Vehicles } = require('../../src/extensions/ua-parser-extensions');
148

159
describe('Extensions', () => {
1610
[
17-
['CLIs', clis, CLIs],
18-
['Crawlers', crawlers, Crawlers],
19-
['Emails', emails, Emails],
20-
['Fetchers', fetchers, Fetchers],
21-
['InApps', inapps, InApps],
22-
['Libraries', libraries, Libraries]
11+
['CLIs', 'cli', CLIs],
12+
['Crawlers', 'crawler', Crawlers],
13+
['Emails', 'email', Emails],
14+
['Fetchers', 'fetcher', Fetchers],
15+
['InApps', 'inapp', InApps],
16+
['Libraries', 'library', Libraries],
17+
['Vehicles', 'vehicle', Vehicles]
2318
]
24-
.forEach((list) => {
25-
describe(list[0], () => {
26-
list[1].forEach((agent) => {
27-
it(`Can detect ${agent.desc}: "${agent.ua}"`, () => {
28-
let browser = UAParser(agent.ua, list[2]).browser;
29-
assert.strictEqual(String(browser.name), agent.expect.name);
30-
assert.strictEqual(String(browser.version), agent.expect.version);
31-
assert.strictEqual(String(browser.type), agent.expect.type);
19+
.forEach(([desc, path, ext]) => {
20+
const tests = require(`../data/ua/extension/${path}.json`);
21+
describe(desc, () => {
22+
tests.forEach((test) => {
23+
it(`Can detect ${test.desc}: "${test.ua}"`, () => {
24+
const { browser, device } = UAParser(test.ua, ext);
25+
if ('browser' in ext) {
26+
assert.strictEqual(String(browser.name), test.expect.name);
27+
assert.strictEqual(String(browser.version), test.expect.version);
28+
assert.strictEqual(String(browser.type), test.expect.type);
29+
} else if ('device' in ext) {
30+
assert.strictEqual(String(device.vendor), test.expect.vendor);
31+
assert.strictEqual(String(device.model), test.expect.model);
32+
assert.strictEqual(String(device.type), test.expect.type);
33+
}
3234
});
3335
});
3436
});

0 commit comments

Comments
 (0)