Reorganize test files

This commit is contained in:
Faisal Salman 2024-11-22 22:29:03 +07:00
parent bcf249da06
commit f5ee90fcf8
66 changed files with 121 additions and 66 deletions

72
package-lock.json generated
View File

@ -35,8 +35,11 @@
"@babel/traverse": "7.23.2", "@babel/traverse": "7.23.2",
"@jazzer.js/core": "^1.4.0", "@jazzer.js/core": "^1.4.0",
"@playwright/test": "~1.32.2", "@playwright/test": "~1.32.2",
"@types/node": "^22.9.1",
"@types/node-fetch": "^2.6.12",
"jshint": "~2.13.6", "jshint": "~2.13.6",
"mocha": "~8.2.0", "mocha": "~8.2.0",
"node-fetch": "^2.7.0",
"requirejs": "2.3.2", "requirejs": "2.3.2",
"safe-regex": "^2.1.1", "safe-regex": "^2.1.1",
"tsd": "^0.29.0", "tsd": "^0.29.0",
@ -781,10 +784,23 @@
"dev": true "dev": true
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "18.15.11", "version": "22.9.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz",
"integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", "integrity": "sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==",
"dev": true "dev": true,
"dependencies": {
"undici-types": "~6.19.8"
}
},
"node_modules/@types/node-fetch": {
"version": "2.6.12",
"resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz",
"integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==",
"dev": true,
"dependencies": {
"@types/node": "*",
"form-data": "^4.0.0"
}
}, },
"node_modules/@types/normalize-package-data": { "node_modules/@types/normalize-package-data": {
"version": "2.4.2", "version": "2.4.2",
@ -3525,6 +3541,26 @@
"integrity": "sha512-YsjmaKGPDkmhoNKIpkChtCsPVaRE0a274IdERKnuc/E8K1UJdBZ4/mvI006OijlQZHCfpRNOH3dfHQs92se8gg==", "integrity": "sha512-YsjmaKGPDkmhoNKIpkChtCsPVaRE0a274IdERKnuc/E8K1UJdBZ4/mvI006OijlQZHCfpRNOH3dfHQs92se8gg==",
"dev": true "dev": true
}, },
"node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"dev": true,
"dependencies": {
"whatwg-url": "^5.0.0"
},
"engines": {
"node": "4.x || >=6.0.0"
},
"peerDependencies": {
"encoding": "^0.1.0"
},
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
}
},
"node_modules/node-releases": { "node_modules/node-releases": {
"version": "2.0.10", "version": "2.0.10",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
@ -4576,6 +4612,12 @@
"node": ">=8.0" "node": ">=8.0"
} }
}, },
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"dev": true
},
"node_modules/trim-newlines": { "node_modules/trim-newlines": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
@ -4649,6 +4691,12 @@
"node": ">=0.8.0" "node": ">=0.8.0"
} }
}, },
"node_modules/undici-types": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
"dev": true
},
"node_modules/universalify": { "node_modules/universalify": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
@ -4710,6 +4758,22 @@
"spdx-expression-parse": "^3.0.0" "spdx-expression-parse": "^3.0.0"
} }
}, },
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"dev": true
},
"node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"dev": true,
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"node_modules/which": { "node_modules/which": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",

View File

@ -4,11 +4,11 @@ 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('./specs/browser-clis.json'); const clis = require('./specs/extension/cli.json');
const crawlers = require('./specs/browser-crawlers.json'); const crawlers = require('./specs/extension/crawler.json');
const emails = require('./specs/browser-emails.json'); const emails = require('./specs/extension/email.json');
const fetchers = require('./specs/browser-fetchers.json'); const fetchers = require('./specs/extension/fetcher.json');
const libraries = require('./specs/browser-libraries.json'); const libraries = require('./specs/extension/library.json');
const { Bots, CLIs, Crawlers, Emails, Fetchers, Libraries } = require('../src/extensions/ua-parser-extensions'); const { Bots, CLIs, Crawlers, Emails, Fetchers, Libraries } = require('../src/extensions/ua-parser-extensions');
describe('Extensions', () => { describe('Extensions', () => {

View File

@ -5,11 +5,11 @@ var requirejs = require('requirejs');
var parseJS = require('@babel/parser').parse; var parseJS = require('@babel/parser').parse;
var traverse = require('@babel/traverse').default; var traverse = require('@babel/traverse').default;
var {UAParser} = require('../src/main/ua-parser'); var {UAParser} = require('../src/main/ua-parser');
var browsers = require('./specs/browser-all.json'); var browsers = require('./specs/browser/browser-all.json');
var cpus = require('./specs/cpu-all.json'); var cpus = require('./specs/cpu/cpu-all.json');
var devices = readJsonFiles('test/specs/devices'); var devices = readJsonFiles('test/specs/device');
var engines = require('./specs/engine-all.json'); var engines = require('./specs/engine/engine-all.json');
var os = require('./specs/os-all.json'); var os = require('./specs/os/os-all.json');
var { Headers } = require('node-fetch'); var { Headers } = require('node-fetch');
function readJsonFiles(dir) { function readJsonFiles(dir) {
@ -20,39 +20,6 @@ function readJsonFiles(dir) {
return list; return list;
}; };
var parser = new UAParser();
var methods = [
{
title : 'getBrowser',
label : 'browser',
list : browsers,
properties : ['name', 'major', 'version', 'type']
},
{
title : 'getCPU',
label : 'cpu',
list : cpus,
properties : ['architecture']
},
{
title : 'getDevice',
label : 'device',
list : devices,
properties : ['model', 'type', 'vendor']
},
{
title : 'getEngine',
label : 'engine',
list : engines,
properties : ['name', 'version']
},
{
title : 'getOS',
label : 'os',
list : os,
properties : ['name', 'version']
}];
describe('UAParser()', function () { describe('UAParser()', function () {
var ua = 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6'; var ua = 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6';
assert.deepEqual(UAParser(ua), new UAParser().setUA(ua).getResult()); assert.deepEqual(UAParser(ua), new UAParser().setUA(ua).getResult());
@ -66,26 +33,50 @@ describe('UAParser.setUA method does not throw with undefined ua argument', func
assert.doesNotThrow(() => new UAParser().setUA(undefined).getResult()); assert.doesNotThrow(() => new UAParser().setUA(undefined).getResult());
}); });
for (var i in methods) { describe('UAParser get*() methods', () => {
describe(methods[i]['title'], function () { [
for (var j in methods[i]['list']) { {
if (!!methods[i]['list'][j].ua) { title : 'getBrowser()',
describe('[' + methods[i]['list'][j].desc + ']', function () { label : 'browser',
describe('"' + methods[i]['list'][j].ua + '"', function () { list : browsers
var expect = methods[i]['list'][j].expect; },
var result = parser.setUA(methods[i]['list'][j].ua).getResult()[methods[i]['label']]; {
title : 'getCPU()',
methods[i]['properties'].forEach(function(m) { label : 'cpu',
it('should return ' + methods[i]['label'] + ' ' + m + ': ' + expect[m], function () { list : cpus
assert.strictEqual(result[m], expect[m] != 'undefined' ? expect[m] : undefined); },
}); {
}); title : 'getDevice()',
}); label : 'device',
}); list : devices
} },
{
title : 'getEngine()',
label : 'engine',
list : engines
},
{
title : 'getOS()',
label : 'os',
list : os
} }
]
.forEach(method => {
describe(`[${method.title}]`, () => {
method.list.forEach(unit => {
describe(`[${unit.desc}]: "${unit.ua}"`, () => {
const actual = UAParser(unit.ua)[method.label];
Object.entries(unit.expect).forEach(entry => {
const [key, val] = entry;
it(`Should return ${key}: ${val}`, () => {
assert.strictEqual(String(val), String(actual[key]));
});
});
});
});
});
});
}); });
}
describe('Returns', function () { describe('Returns', function () {
it('getResult() should returns JSON', function(done) { it('getResult() should returns JSON', function(done) {
@ -192,9 +183,9 @@ describe('Testing regexes', function () {
describe('Begin testing', function () { describe('Begin testing', function () {
it('all regexes in main file', function () { it('all regexes in main file', function () {
describe('Test against `safe-regex` module', function () {
regexes.forEach(function (regex) { regexes.forEach(function (regex) {
describe('Test against `safe-regex` : ' + regex, function () { it(`Should pass \`safe-regex\`: ${regex}`, function () {
it('should be safe from potentially vulnerable regex', function () {
assert.strictEqual(safe(regex), true); assert.strictEqual(safe(regex), true);
}); });
}); });