-
Notifications
You must be signed in to change notification settings - Fork 11
feat!: switch type:string option arguments to greedy, but with error for suspect cases in strict mode #88
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 6 commits
Commits
Show all changes
24 commits
Select commit
Hold shift + click to select a range
a28864d
First cut at greedy with error for suspect value
shadowspawn 831e6da
Fix checkSafeOptionValue
shadowspawn de21b0f
Add some unit tests for new strict error for suspect option value
shadowspawn 2afaebc
Static example usage
shadowspawn 5fe37b7
Tweak parameter names in response to feedback
shadowspawn f9ff015
Merge branch 'main' into feature/greedy
shadowspawn 05967d4
Merge branch 'main' into feature/greedy
shadowspawn a7556dd
Rename routine, use custom error
shadowspawn da9fbcf
Add short example, and use function style matching other PR in flight.
shadowspawn 6439e99
Refactor tests and fix for new short message
shadowspawn ff03bcd
Switch to node compatible test format
shadowspawn bc77eb2
Add end-to-end greedy tests
shadowspawn 3b7ac89
Merge branch 'main' into feature/greedy
shadowspawn 8487167
Move checking routines together
shadowspawn 65c0833
Merge branch 'main' into feature/greedy
shadowspawn 120d95a
Merge remote-tracking branch 'upstream/main' into feature/greedy
shadowspawn 62726b8
Tweak error
shadowspawn 4362750
Go with ambiguous, matches having two informative messages.
shadowspawn 0eac39d
Merge branch 'main' into feature/greedy
shadowspawn f4ceff3
Fix more tests for null prototype
shadowspawn 22745ac
Merge branch 'main' into feature/greedy
f731241
Merge remote-tracking branch 'upstream/main' into feature/greedy
shadowspawn e477243
Merge branch 'feature/greedy' of github.com:shadowspawn/parseargs int…
shadowspawn 836bd9a
Move greedy related tests into index.js
shadowspawn File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or 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 hidden or 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 hidden or 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 |
|---|---|---|
| @@ -0,0 +1,69 @@ | ||
| 'use strict'; | ||
| /* eslint max-len: 0 */ | ||
|
|
||
| const test = require('tape'); | ||
| const { isSafeOptionValue } = require('../utils.js'); | ||
|
|
||
| // Basically rejecting values starting with a dash, but run through the interesting possibilities. | ||
|
|
||
| test('isSafeOptionValue: when passed plain text then returns true', (t) => { | ||
| t.true(isSafeOptionValue('abc')); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('isSafeOptionValue: when passed digits then returns true', (t) => { | ||
| t.true(isSafeOptionValue(123)); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('isSafeOptionValue: when passed empty string then returns true', (t) => { | ||
| t.true(isSafeOptionValue('')); | ||
| t.end(); | ||
| }); | ||
|
|
||
| // Special case, used as stdin/stdout et al and not reason to reject | ||
| test('isSafeOptionValue: when passed dash then returns true', (t) => { | ||
| t.true(isSafeOptionValue('-')); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('isSafeOptionValue: when passed -- then returns false', (t) => { | ||
| t.false(isSafeOptionValue('--')); | ||
| t.end(); | ||
| }); | ||
|
|
||
| // Supporting undefined so can pass element off end of array without checking | ||
| test('isSafeOptionValue: when passed undefined then returns false', (t) => { | ||
| t.false(isSafeOptionValue(undefined)); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('isSafeOptionValue: when passed short option then returns false', (t) => { | ||
| t.false(isSafeOptionValue('-a')); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('isSafeOptionValue: when passed short option digit then returns false', (t) => { | ||
| t.false(isSafeOptionValue('-1')); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('isSafeOptionValue: when passed negative number then returns false', (t) => { | ||
| t.false(isSafeOptionValue('-123')); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('isSafeOptionValue: when passed short option group of short option with value then returns false', (t) => { | ||
| t.false(isSafeOptionValue('-abd')); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('isSafeOptionValue: when passed long option then returns false', (t) => { | ||
| t.false(isSafeOptionValue('--foo')); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('isSafeOptionValue: when passed long option with value then returns false', (t) => { | ||
| t.false(isSafeOptionValue('--foo=bar')); | ||
| t.end(); | ||
| }); |
This file contains hidden or 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 |
|---|---|---|
| @@ -0,0 +1,95 @@ | ||
| 'use strict'; | ||
| /* eslint max-len: 0 */ | ||
|
|
||
| const test = require('tape'); | ||
| const { parseArgs } = require('../index.js'); | ||
|
|
||
| test('strict: when candidate option value is plain text then does not throw', (t) => { | ||
| const passedArgs = ['--with', 'abc']; | ||
| const knownOptions = { with: { type: 'string' } }; | ||
|
|
||
| t.doesNotThrow(() => { | ||
| parseArgs({ args: passedArgs, options: knownOptions, strict: true }); | ||
| }); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test("strict: when candidate option value is '-' then does not throw", (t) => { | ||
| const passedArgs = ['--with', '-']; | ||
| const knownOptions = { with: { type: 'string' } }; | ||
|
|
||
| t.doesNotThrow(() => { | ||
| parseArgs({ args: passedArgs, options: knownOptions, strict: true }); | ||
| }); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test("strict: when candidate option value is '--' then throws", (t) => { | ||
| const passedArgs = ['--with', '--']; | ||
| const knownOptions = { with: { type: 'string' } }; | ||
|
|
||
| t.throws(() => { | ||
| parseArgs({ args: passedArgs, options: knownOptions, strict: true }); | ||
| }); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('strict: when candidate option value is short option then throws', (t) => { | ||
| const passedArgs = ['--with', '-a']; | ||
| const knownOptions = { with: { type: 'string' } }; | ||
|
|
||
| t.throws(() => { | ||
| parseArgs({ args: passedArgs, options: knownOptions, strict: true }); | ||
| }); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('strict: when candidate option value is short option digit then throws', (t) => { | ||
| const passedArgs = ['--with', '-1']; | ||
| const knownOptions = { with: { type: 'string' } }; | ||
|
|
||
| t.throws(() => { | ||
| parseArgs({ args: passedArgs, options: knownOptions, strict: true }); | ||
| }); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('strict: when candidate option value is long option then throws', (t) => { | ||
| const passedArgs = ['--with', '--foo']; | ||
| const knownOptions = { with: { type: 'string' } }; | ||
|
|
||
| t.throws(() => { | ||
| parseArgs({ args: passedArgs, options: knownOptions, strict: true }); | ||
| }); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('strict: when short option and suspect value then throws with short option in error message', (t) => { | ||
| const passedArgs = ['-w', '--foo']; | ||
| const knownOptions = { with: { type: 'string', short: 'w' } }; | ||
|
|
||
| t.throws(() => { | ||
| parseArgs({ args: passedArgs, options: knownOptions, strict: true }); | ||
| }, /for '-w'/); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('strict: when long option and suspect value then throws with long option in error message', (t) => { | ||
| const passedArgs = ['--with', '--foo']; | ||
| const knownOptions = { with: { type: 'string' } }; | ||
|
|
||
| t.throws(() => { | ||
| parseArgs({ args: passedArgs, options: knownOptions, strict: true }); | ||
| }, /for '--with'/); | ||
| t.end(); | ||
| }); | ||
|
|
||
| test('strict: when long option and suspect value then throws with whole expected message', (t) => { | ||
| const passedArgs = ['--with', '--foo']; | ||
| const knownOptions = { with: { type: 'string' } }; | ||
|
|
||
| t.throws(() => { | ||
| parseArgs({ args: passedArgs, options: knownOptions, strict: true }); | ||
| }, /Did you forget to specify the option argument for '--with'\?\nTo specify an option argument starting with a dash use '--with=-EXAMPLE'\./); | ||
| t.end(); | ||
| }); |
This file contains hidden or 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
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.