commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pierre-Luc Lacroix (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CLI-246) GnuParser removes first character from longer argument containing single character option
Date Tue, 16 Sep 2014 14:28:34 GMT

     [ https://issues.apache.org/jira/browse/CLI-246?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Pierre-Luc Lacroix updated CLI-246:
-----------------------------------
    Description: 
Title might be hard to understand, but basically:

Arguments:
String [] cli = {"-cc", "-ccc", "-c"};

Options:
Options opts = new Options();
opts.addOption(OptionBuilder.create("cc"));
opts.addOption(OptionBuilder.create("c"));

As you can see, "-ccc" is an extra unrecognized argument.

When you try to parse it:

CommandLineParser parser = new GnuParser();
CommandLine line = parser.parse(opts, cli, true);


Content on line:
args: [cc, -c]
line: [[ option: cc  :: null ], [ option: c  :: null ]]

I would expect:
args: [-ccc]
line: [[ option: cc  :: null ], [ option: c  :: null ]]


Wrote a few unit tests (3rd one fails):

{code:title=UnitTest.java|borderStyle=solid}
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.junit.Assert;
import org.junit.Test;


public class CommonsCli {
	
	@Test
	public void test1() throws ParseException {
		
		String [] cli = {"-cc"};
		
		Options opts = new Options();
		opts.addOption(OptionBuilder.create("cc"));
		
		
		CommandLineParser parser = new GnuParser();
		CommandLine line = parser.parse(opts, cli);
		
		if (line.getArgs().length > 0 ) {
			Assert.fail("Extra argument found: " + line.getArgList().get(0));
		}

	}
	
	@Test
	public void test2() throws ParseException {
		
		String [] cli = {"-cc", "-ccc"};
		
		Options opts = new Options();
		opts.addOption(OptionBuilder.create("cc"));
		
		CommandLineParser parser = new GnuParser();
		CommandLine line = parser.parse(opts, cli, true);
		
		if (line.getArgs().length > 0 ) {
			Assert.assertEquals("-ccc", line.getArgList().get(0));
		}

	}
	
	
	@Test
	public void test3() throws ParseException {
		
		String [] cli = {"-cc", "-ccc", "-c"};
		
		Options opts = new Options();
		opts.addOption(OptionBuilder.create("cc"));
		opts.addOption(OptionBuilder.create("c"));
		
		CommandLineParser parser = new GnuParser();
		CommandLine line = parser.parse(opts, cli, true);
		
		if (line.getArgs().length > 0 ) {
			Assert.assertEquals("-ccc", line.getArgList().get(0));
		}

	}

}
{code}

  was:
Title might be hard to understand, but basically:

Arguments:
String [] cli = {"-cc", "-ccc", "-c"};

Options:
Options opts = new Options();
opts.addOption(OptionBuilder.create("cc"));
opts.addOption(OptionBuilder.create("c"));

As you can see, "-ccc" is an extra unrecognized argument.

When you try to parse it:

CommandLineParser parser = new GnuParser();
CommandLine line = parser.parse(opts, cli, true);


Content on line:
args: [cc, -c]
line: [[ option: cc  :: null ], [ option: c  :: null ]]

I would expect:
args: [-ccc]
line: [[ option: cc  :: null ], [ option: c  :: null ]]


Wrote a little unit test (that fails):

{code:Java}
@Test
public void test3() throws ParseException {

	String [] cli = {"-cc", "-ccc", "-c"};
		
	Options opts = new Options();
	opts.addOption(OptionBuilder.create("cc"));
	opts.addOption(OptionBuilder.create("c"));
		
	CommandLineParser parser = new GnuParser();
	CommandLine line = parser.parse(opts, cli, true);
	
	if (line.getArgs().length > 0 ) {
		Assert.assertEquals("-ccc", line.getArgList().get(0));
	}
}
{code}


> GnuParser removes first character from longer argument containing single character option
> -----------------------------------------------------------------------------------------
>
>                 Key: CLI-246
>                 URL: https://issues.apache.org/jira/browse/CLI-246
>             Project: Commons CLI
>          Issue Type: Bug
>          Components: CLI-1.x
>    Affects Versions: 1.2
>         Environment: Windows 64-bit
>            Reporter: Pierre-Luc Lacroix
>            Priority: Minor
>
> Title might be hard to understand, but basically:
> Arguments:
> String [] cli = {"-cc", "-ccc", "-c"};
> Options:
> Options opts = new Options();
> opts.addOption(OptionBuilder.create("cc"));
> opts.addOption(OptionBuilder.create("c"));
> As you can see, "-ccc" is an extra unrecognized argument.
> When you try to parse it:
> CommandLineParser parser = new GnuParser();
> CommandLine line = parser.parse(opts, cli, true);
> Content on line:
> args: [cc, -c]
> line: [[ option: cc  :: null ], [ option: c  :: null ]]
> I would expect:
> args: [-ccc]
> line: [[ option: cc  :: null ], [ option: c  :: null ]]
> Wrote a few unit tests (3rd one fails):
> {code:title=UnitTest.java|borderStyle=solid}
> import org.apache.commons.cli.CommandLine;
> import org.apache.commons.cli.CommandLineParser;
> import org.apache.commons.cli.GnuParser;
> import org.apache.commons.cli.OptionBuilder;
> import org.apache.commons.cli.Options;
> import org.apache.commons.cli.ParseException;
> import org.junit.Assert;
> import org.junit.Test;
> public class CommonsCli {
> 	
> 	@Test
> 	public void test1() throws ParseException {
> 		
> 		String [] cli = {"-cc"};
> 		
> 		Options opts = new Options();
> 		opts.addOption(OptionBuilder.create("cc"));
> 		
> 		
> 		CommandLineParser parser = new GnuParser();
> 		CommandLine line = parser.parse(opts, cli);
> 		
> 		if (line.getArgs().length > 0 ) {
> 			Assert.fail("Extra argument found: " + line.getArgList().get(0));
> 		}
> 	}
> 	
> 	@Test
> 	public void test2() throws ParseException {
> 		
> 		String [] cli = {"-cc", "-ccc"};
> 		
> 		Options opts = new Options();
> 		opts.addOption(OptionBuilder.create("cc"));
> 		
> 		CommandLineParser parser = new GnuParser();
> 		CommandLine line = parser.parse(opts, cli, true);
> 		
> 		if (line.getArgs().length > 0 ) {
> 			Assert.assertEquals("-ccc", line.getArgList().get(0));
> 		}
> 	}
> 	
> 	
> 	@Test
> 	public void test3() throws ParseException {
> 		
> 		String [] cli = {"-cc", "-ccc", "-c"};
> 		
> 		Options opts = new Options();
> 		opts.addOption(OptionBuilder.create("cc"));
> 		opts.addOption(OptionBuilder.create("c"));
> 		
> 		CommandLineParser parser = new GnuParser();
> 		CommandLine line = parser.parse(opts, cli, true);
> 		
> 		if (line.getArgs().length > 0 ) {
> 			Assert.assertEquals("-ccc", line.getArgList().get(0));
> 		}
> 	}
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message