Skip to content

Commit

Permalink
Update: add tests for shorthand commands.
Browse files Browse the repository at this point in the history
  • Loading branch information
mysticatea committed May 7, 2016
1 parent 2f26fa5 commit 4496065
Show file tree
Hide file tree
Showing 14 changed files with 831 additions and 281 deletions.
45 changes: 12 additions & 33 deletions src/bin/common/parse-cli-args.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const assign = require("object-assign");

const OVERWRITE_OPTION = /^--([^:]+?):([^=]+?)(?:=(.+))?$/;
const CONFIG_PATTERN = /^npm_package_config_(.+)$/;
const CONCAT_OPTIONS = /^-[chlnpPsSv]+$/;
const CONCAT_OPTIONS = /^-[clnps]+$/;

/**
* Overwrites a specified package config.
Expand Down Expand Up @@ -67,14 +67,8 @@ function createPackageConfig() {
*/
function addGroup(groups, initialValues) {
groups.push(assign(
{
continueOnError: false,
parallel: false,
patterns: [],
printLabel: false,
printName: false
},
initialValues
{parallel: false, patterns: []},
initialValues || {}
));
}

Expand All @@ -88,10 +82,11 @@ class ArgumentSet {
* @param {object} options - A key-value map for the options.
*/
constructor(initialValues = {}, options = {}) {
this.continueOnError = false;
this.groups = [];
this.help = false;
this.printLabel = false;
this.printName = false;
this.silent = process.env.npm_config_loglevel === "silent";
this.version = false;
this.singleMode = Boolean(options.singleMode);
this.packageConfig = createPackageConfig();

Expand Down Expand Up @@ -120,39 +115,28 @@ function parseCLIArgsCore(set, args) { // eslint-disable-line complexity
switch (arg) {
case "-c":
case "--continue-on-error":
set.lastGroup.continueOnError = true;
break;

case "-h":
case "--help":
set.help = true;
set.continueOnError = true;
break;

case "-l":
case "--print-label":
set.lastGroup.printLabel = true;
set.printLabel = true;
break;

case "-n":
case "--print-name":
set.lastGroup.printName = true;
set.printName = true;
break;

case "--silent":
set.silent = true;
break;

case "-v":
case "--version":
set.version = true;
break;

case "--color":
case "--no-color":
// do nothing.
break;

case "-S":
case "-s":
case "--sequential":
case "--serial":
Expand All @@ -163,21 +147,15 @@ function parseCLIArgsCore(set, args) { // eslint-disable-line complexity
if (set.singleMode) {
throw new Error(`Invalid Option: ${arg}`);
}
addGroup(set.groups, {
continueOnError: arg === "-S"
});
addGroup(set.groups);
break;

case "-P":
case "-p":
case "--parallel":
if (set.singleMode) {
throw new Error(`Invalid Option: ${arg}`);
}
addGroup(set.groups, {
parallel: true,
continueOnError: arg === "-P"
});
addGroup(set.groups, {parallel: true});
break;

default: {
Expand Down Expand Up @@ -217,6 +195,7 @@ function parseCLIArgsCore(set, args) { // eslint-disable-line complexity
* @param {string[]} args - CLI arguments.
* @param {object} initialValues - A key-value map for the default of new value.
* @param {object} options - A key-value map for the options.
* @param {boolean} options.singleMode - The flag to be single group mode.
* @returns {ArgumentSet} The parsed CLI arguments.
*/
module.exports = function parseCLIArgs(args, initialValues, options) {
Expand Down
20 changes: 9 additions & 11 deletions src/bin/npm-run-all/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,17 @@ const parseCLIArgs = require("../common/parse-cli-args");
module.exports = function npmRunAll(args, stdout, stderr) {
try {
const stdin = process.stdin;
const {groups, silent, packageConfig} = parseCLIArgs(args);
const {
continueOnError,
groups,
packageConfig,
printLabel,
printName,
silent
} = parseCLIArgs(args);

return groups.reduce(
(
prev,
{
patterns,
parallel,
continueOnError,
printLabel,
printName
}
) => {
(prev, {patterns, parallel}) => {
if (patterns.length === 0) {
return prev;
}
Expand Down
21 changes: 7 additions & 14 deletions src/bin/run-p/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,13 @@ module.exports = function npmRunAll(args, stdout, stderr) {
try {
const stdin = process.stdin;
const {
lastGroup: {
patterns,
parallel,
continueOnError,
printLabel,
printName
},
silent,
packageConfig
} = parseCLIArgs(
args,
{parallel: true},
{singleMode: true}
);
lastGroup: {patterns, parallel},
continueOnError,
packageConfig,
printLabel,
printName,
silent
} = parseCLIArgs(args, {parallel: true}, {singleMode: true});

if (patterns.length === 0) {
return Promise.resolve(null);
Expand Down
21 changes: 7 additions & 14 deletions src/bin/run-s/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,13 @@ module.exports = function npmRunAll(args, stdout, stderr) {
try {
const stdin = process.stdin;
const {
lastGroup: {
patterns,
parallel,
continueOnError,
printLabel,
printName
},
silent,
packageConfig
} = parseCLIArgs(
args,
{parallel: false},
{singleMode: true}
);
lastGroup: {patterns, parallel},
continueOnError,
packageConfig,
printLabel,
printName,
silent
} = parseCLIArgs(args, {parallel: false}, {singleMode: true});

if (patterns.length === 0) {
return Promise.resolve(null);
Expand Down
2 changes: 1 addition & 1 deletion test-workspace/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"stop": "node tasks/append.js stop",
"test-task:env-check": "node tasks/env-check.js",
"test-task:env-check2": "node tasks/env-check2.js",
"test-task:nested-env-check": "babel-node ../src/bin/npm-run-all.js test-task:env-check",
"test-task:nested-env-check": "babel-node ../src/bin/npm-run-all/index.js test-task:env-check",
"test-task:append": "node tasks/append.js",
"test-task:append:a": "node tasks/append.js a",
"test-task:append:a:c": "node tasks/append.js ac",
Expand Down

0 comments on commit 4496065

Please sign in to comment.