Skip to content

Commit c0fceb8

Browse files
committed
benchmark: add default value for settings params
1 parent 1d7d094 commit c0fceb8

File tree

2 files changed

+41
-13
lines changed

2 files changed

+41
-13
lines changed

benchmark/_cli.js

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
const fs = require('fs');
44
const path = require('path');
55

6+
const kEmptyObject = Object.freeze(Object.create(null));
67
// Create an object of all benchmark scripts
78
const benchmarks = {};
89
fs.readdirSync(__dirname)
@@ -15,7 +16,7 @@ fs.readdirSync(__dirname)
1516
.filter((filename) => filename[0] !== '.' && filename[0] !== '_');
1617
});
1718

18-
function CLI(usage, settings) {
19+
function CLI(usage, settings = kEmptyObject) {
1920
if (process.argv.length < 3) {
2021
this.abort(usage); // Abort will exit the process
2122
}
@@ -25,8 +26,10 @@ function CLI(usage, settings) {
2526
this.items = [];
2627
this.test = false;
2728

28-
for (const argName of settings.arrayArgs) {
29-
this.optional[argName] = [];
29+
if (settings.arrayArgs) {
30+
for (const argName of settings.arrayArgs) {
31+
this.optional[argName] = [];
32+
}
3033
}
3134

3235
let currentOptional = null;
@@ -39,13 +42,9 @@ function CLI(usage, settings) {
3942
} else if (mode === 'both' && arg[0] === '-') {
4043
// Optional arguments declaration
4144

42-
if (arg[1] === '-') {
43-
currentOptional = arg.slice(2);
44-
} else {
45-
currentOptional = arg.slice(1);
46-
}
45+
currentOptional = arg.split('-').pop();
4746

48-
if (settings.boolArgs && settings.boolArgs.includes(currentOptional)) {
47+
if (settings.boolArgs?.includes(currentOptional)) {
4948
this.optional[currentOptional] = true;
5049
mode = 'both';
5150
} else {
@@ -55,7 +54,7 @@ function CLI(usage, settings) {
5554
} else if (mode === 'option') {
5655
// Optional arguments value
5756

58-
if (settings.arrayArgs.includes(currentOptional)) {
57+
if (settings.arrayArgs?.includes(currentOptional)) {
5958
this.optional[currentOptional].push(arg);
6059
} else {
6160
this.optional[currentOptional] = arg;
@@ -107,8 +106,8 @@ CLI.prototype.benchmarks = function() {
107106
};
108107

109108
CLI.prototype.shouldSkip = function(scripts) {
110-
const filters = this.optional.filter || [];
111-
const excludes = this.optional.exclude || [];
109+
const filters = this.optional.filter ? [...this.optional.filter] : [];
110+
const excludes = this.optional.exclude ? [...this.optional.exclude] : [];
112111
let skip = filters.length > 0;
113112

114113
for (const filter of filters) {

test/parallel/test-benchmark-cli.js

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
require('../common');
3+
const common = require('../common');
44

55
// This tests the CLI parser for our benchmark suite.
66

@@ -36,3 +36,32 @@ testFilterPattern([], ['foo', 'bar'], 'bar', true);
3636

3737
testFilterPattern(['foo'], ['bar'], 'foo', false);
3838
testFilterPattern(['foo'], ['bar'], 'foo-bar', true);
39+
40+
function testNoSettingsPattern(filters, excludes, filename, expectedResult) {
41+
process.argv = process.argv.concat(...filters.map((p) => ['--filter', p]));
42+
process.argv = process.argv.concat(...excludes.map((p) => ['--exclude', p]));
43+
process.argv = process.argv.concat(['bench']);
44+
try {
45+
const cli = new CLI('');
46+
assert.deepStrictEqual(cli.shouldSkip(filename), expectedResult);
47+
} catch {
48+
common.mustNotCall('If settings param is null, shouldn\'t throw an error');
49+
}
50+
process.argv = originalArgv;
51+
}
52+
53+
testNoSettingsPattern([], []);
54+
testNoSettingsPattern([], [], 'foo', false);
55+
56+
testNoSettingsPattern(['foo'], [], 'foo', false);
57+
testNoSettingsPattern(['foo'], [], 'bar', true);
58+
testNoSettingsPattern(['foo', 'bar'], [], 'foo', false);
59+
testNoSettingsPattern(['foo', 'bar'], [], 'bar', false);
60+
61+
testNoSettingsPattern([], ['foo'], 'foo', true);
62+
testNoSettingsPattern([], ['foo'], 'bar', false);
63+
testNoSettingsPattern([], ['foo', 'bar'], 'foo', true);
64+
testNoSettingsPattern([], ['foo', 'bar'], 'bar', true);
65+
66+
testNoSettingsPattern(['foo'], ['bar'], 'foo', false);
67+
testNoSettingsPattern(['foo'], ['bar'], 'foo-bar', true);

0 commit comments

Comments
 (0)