-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Allow boolean default for flag option (#987)
* Add support for default value for boolean flags * Expand testing for boolean flags to cover new features * Add written description of boolean default value for --foo/--no-foo * Avoid eslint warnings for requiring shouldjs in simple way
- Loading branch information
1 parent
55e88dc
commit a9503bb
Showing
7 changed files
with
105 additions
and
73 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,22 @@ | ||
/** | ||
* Module dependencies. | ||
*/ | ||
const commander = require('../'); | ||
require('should'); | ||
|
||
var program = require('../') | ||
, should = require('should'); | ||
// Test simple flag and negatable flag | ||
|
||
program | ||
.version('0.0.1') | ||
.option('-p, --pepper', 'add pepper') | ||
.option('-c, --no-cheese', 'remove cheese'); | ||
function simpleFlagProgram() { | ||
const program = new commander.Command(); | ||
program | ||
.option('-p, --pepper', 'add pepper') | ||
.option('-C, --no-cheese', 'remove cheese'); | ||
return program; | ||
} | ||
|
||
program.parse(['node', 'test', '--pepper']); | ||
program.pepper.should.be.true(); | ||
program.cheese.should.be.true(); | ||
const simpleFlagNoOptions = simpleFlagProgram(); | ||
simpleFlagNoOptions.parse(['node', 'test']); | ||
simpleFlagNoOptions.should.not.have.property('pepper'); | ||
simpleFlagNoOptions.cheese.should.be.true(); | ||
|
||
const simpleFlagLong = simpleFlagProgram(); | ||
simpleFlagLong.parse(['node', 'test', '--pepper', '--no-cheese']); | ||
simpleFlagLong.pepper.should.be.true(); | ||
simpleFlagLong.cheese.should.be.false(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,31 +1,63 @@ | ||
/** | ||
* Module dependencies. | ||
*/ | ||
|
||
var program = require('../') | ||
, should = require('should'); | ||
|
||
program | ||
.version('0.0.1') | ||
.option('-e, --everything', 'add all of the toppings') | ||
.option('-p, --pepper', 'add pepper') | ||
.option('-P, --no-pepper', 'remove pepper') | ||
.option('-c|--no-cheese', 'remove cheese'); | ||
|
||
program.parse(['node', 'test']); | ||
program.should.not.have.property('everything'); | ||
program.should.not.have.property('pepper'); | ||
program.cheese.should.be.true(); | ||
|
||
program.parse(['node', 'test', '--everything']); | ||
program.everything.should.be.true(); | ||
program.should.not.have.property('pepper'); | ||
program.cheese.should.be.true(); | ||
|
||
program.parse(['node', 'test', '--pepper']); | ||
program.pepper.should.be.true(); | ||
program.cheese.should.be.true(); | ||
|
||
program.parse(['node', 'test', '--everything', '--no-pepper', '--no-cheese']); | ||
program.pepper.should.be.false(); | ||
program.cheese.should.be.false(); | ||
const commander = require('../'); | ||
require('should'); | ||
|
||
// Test combination of flag and --no-flag | ||
// (negatable flag on its own is tested in test.options.bool.js) | ||
|
||
function flagProgram(defaultValue) { | ||
const program = new commander.Command(); | ||
program | ||
.option('-p, --pepper', 'add pepper', defaultValue) | ||
.option('-P, --no-pepper', 'remove pepper'); | ||
return program; | ||
} | ||
|
||
// Flag with no default, normal usage. | ||
|
||
const programNoDefaultNoOptions = flagProgram(); | ||
programNoDefaultNoOptions.parse(['node', 'test']); | ||
programNoDefaultNoOptions.should.not.have.property('pepper'); | ||
|
||
const programNoDefaultWithFlag = flagProgram(); | ||
programNoDefaultWithFlag.parse(['node', 'test', '--pepper']); | ||
programNoDefaultWithFlag.pepper.should.be.true(); | ||
|
||
const programNoDefaultWithNegFlag = flagProgram(); | ||
programNoDefaultWithNegFlag.parse(['node', 'test', '--no-pepper']); | ||
programNoDefaultWithNegFlag.pepper.should.be.false(); | ||
|
||
// Flag with default, say from an environment variable. | ||
|
||
const programTrueDefaultNoOptions = flagProgram(true); | ||
programTrueDefaultNoOptions.parse(['node', 'test']); | ||
programTrueDefaultNoOptions.pepper.should.be.true(); | ||
|
||
const programTrueDefaultWithFlag = flagProgram(true); | ||
programTrueDefaultWithFlag.parse(['node', 'test', '-p']); | ||
programTrueDefaultWithFlag.pepper.should.be.true(); | ||
|
||
const programTrueDefaultWithNegFlag = flagProgram(true); | ||
programTrueDefaultWithNegFlag.parse(['node', 'test', '-P']); | ||
programTrueDefaultWithNegFlag.pepper.should.be.false(); | ||
|
||
const programFalseDefaultNoOptions = flagProgram(false); | ||
programFalseDefaultNoOptions.parse(['node', 'test']); | ||
programFalseDefaultNoOptions.pepper.should.be.false(); | ||
|
||
const programFalseDefaultWithFlag = flagProgram(false); | ||
programFalseDefaultWithFlag.parse(['node', 'test', '-p']); | ||
programFalseDefaultWithFlag.pepper.should.be.true(); | ||
|
||
const programFalseDefaultWithNegFlag = flagProgram(false); | ||
programFalseDefaultWithNegFlag.parse(['node', 'test', '-P']); | ||
programFalseDefaultWithNegFlag.pepper.should.be.false(); | ||
|
||
// Flag specified both ways, last one wins. | ||
|
||
const programNoYes = flagProgram(); | ||
programNoYes.parse(['node', 'test', '--no-pepper', '--pepper']); | ||
programNoYes.pepper.should.be.true(); | ||
|
||
const programYesNo = flagProgram(); | ||
programYesNo.parse(['node', 'test', '--pepper', '--no-pepper']); | ||
programYesNo.pepper.should.be.false(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters