[ https://issues.apache.org/jira/browse/CLI-297?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16908712#comment-16908712 ]
Friedrich Clausen commented on CLI-297: --------------------------------------- I have attempted a fix for this against the _cli-1.x_ branch; if fixes the issue without introducing any regressions in the existing tests however I don't know if it is what you are looking for in terms of contributions. Happy to redo another way {code} diff --git a/src/java/org/apache/commons/cli/Parser.java b/src/java/org/apache/commons/cli/Parser.java index b8306b6..c74d8a2 100644 --- a/src/java/org/apache/commons/cli/Parser.java +++ b/src/java/org/apache/commons/cli/Parser.java @@ -342,6 +342,10 @@ public abstract class Parser implements CommandLineParser { throw new MissingArgumentException(opt); } + + if (opt.getValues() != null && opt.getValue().equals("")) { + throw new MissingArgumentException(opt); + } } /** diff --git a/src/test/org/apache/commons/cli/bug/BugCLI297Test.java b/src/test/org/apache/commons/cli/bug/BugCLI297Test.java new file mode 100644 index 0000000..e3aaa96 --- /dev/null +++ b/src/test/org/apache/commons/cli/bug/BugCLI297Test.java @@ -0,0 +1,35 @@ +package org.apache.commons.cli.bug; + +import junit.framework.TestCase; +import org.apache.commons.cli.*; + +public class BugCLI297Test extends TestCase +{ + public void testMissingRequiredLongOptionEqualsSeparator() + { + String[] args = new String[] { "--cfile=" }; + + Options longOpt = new Options(); + longOpt.addOption( OptionBuilder.withLongOpt( "cfile" ) + .hasArg() + .isRequired() + .withDescription( "set the value of [c]" ) + .create( 'c' ) ); + + try + { + CommandLineParser parser = new PosixParser(); + CommandLine cl = parser.parse(longOpt,args); + fail( "exception should have been thrown" ); + } + catch (MissingArgumentException e) + { + assertEquals( "Incorrect exception message", "Missing argument for option: c", e.getMessage() ); + assertEquals("c", e.getOption().getOpt()); + } + catch (ParseException e) + { + fail( "expected to catch MissingOptionException but got " + e.getMessage() + " which is a " + e.getClass()); + } + } +} {code} > Required argument empty checking not working with equals specified long option > ------------------------------------------------------------------------------ > > Key: CLI-297 > URL: https://issues.apache.org/jira/browse/CLI-297 > Project: Commons CLI > Issue Type: Bug > Components: CLI-1.x > Affects Versions: 1.4 > Environment: OS: macOS 10.14.6 > Java: Corretto-8.212.04.2 (build 1.8.0_212-b04) > Reporter: Friedrich Clausen > Priority: Minor > > When an option taking an argument is specified with a space the blank > checking works: > {code:none} > $ CheckEmpty --widget-count > org.apache.commons.cli.MissingArgumentException: Missing argument for option: > widget-count > {code} > However when using the equals sign as a separator that checking does not > seem to apply > {code:none} > $ CheckEmpty --widget-count= > Received widget count of: > {code} > I'd expect it to throw an exception just like the space separated variety. -- This message was sent by Atlassian JIRA (v7.6.14#76016)