Hi Russel,
I've been looking at that just now, and it doesn't work as expected.
I'm assuming you mean 'blah' here is a separate argument to 'foo', not
as an argument to '-q', that 'foo blah' is valid.
I've also been trying to attach an argument to an option so for
instance -f filename would work, without any luck. I think either I'm
missing something, or there's a bug.
Please find enclosed a JUnit file which seems to highlight a problem.
The final test in 'testWithOneArgument' fails.
=======================================
package com.wategan.cli.demo;
import junit.framework.TestCase;
import org.apache.commons.cli2.*;
import org.apache.commons.cli2.builder.ArgumentBuilder;
import org.apache.commons.cli2.builder.DefaultOptionBuilder;
import org.apache.commons.cli2.builder.GroupBuilder;
import org.apache.commons.cli2.commandline.Parser;
import org.apache.commons.cli2.option.DefaultOption;
public class CLIDemoWithOneOptionWithAnArgumentTest extends TestCase {
public void testOptionAndArgument() throws Exception {
CommandLine cmd = parseArgs(new String[]{"-l", "hell"});
assertNotNull(cmd);
Option longOption = cmd.getOption("-l");
Object widthOption = cmd.getValue("width");
assertNotNull(longOption);
assertNotNull(widthOption);
assertEquals(2, cmd.getOptions().size());
assertEquals("hell", widthOption.toString().trim());
assertEquals("[-l (--length)]", longOption.toString().trim());
}
public void testDemoWithOneOption() throws Exception {
CommandLine cmd = parseArgs(new String[]{"-l"});
assertNotNull(cmd);
assertEquals(1, cmd.getOptions().size());
Option longOption = cmd.getOption("-l");
assertNotNull(longOption);
assertEquals("[-l (--length)]", longOption.toString().trim());
}
public void testWithOneArgument() throws Exception {
CommandLine cmd = parseArgs(new String[]{"hell"});
assertNotNull(cmd);
assertEquals(1, cmd.getOptions().size());
Option widthOption = cmd.getOption("width");
assertNotNull(widthOption);
assertEquals("hell", widthOption.toString().trim());
}
private CommandLine parseArgs(String[] args) {
DefaultOptionBuilder optionBuilder = new DefaultOptionBuilder();
GroupBuilder groupBuilder = new GroupBuilder();
ArgumentBuilder argumentBuilder = new ArgumentBuilder();
Argument widthOption = argumentBuilder
.withMinimum(0)
.withMaximum(1)
.withName("width")
.create();
DefaultOption longOption = optionBuilder
.withShortName("l")
.withLongName("length")
.create();
Group group =
groupBuilder.withOption(longOption).withOption(widthOption).create();
Parser parser = new Parser();
parser.setGroup(group);
CommandLine cmdLine = null;
try {
cmdLine = parser.parse(args);
} catch (OptionException e) {
System.out.println(e.getMessage());
} finally {
}
return cmdLine;
}
}
=======================================
2008/6/3 Russel Winder <[EMAIL PROTECTED]>:
> I must be missing something very simple. . .
>
> The 2.x appears to have no way of not processing items on the command
> line: it seems that in order to parse a command line you have to
> specify every aspect of the line. This means that a command line such
> as:
>
> foo -q blah
>
> where blah is a variable cannot be described. With 1.x this is easy you
> just specify information about the -q parse the line and then call
> getArgList to get a list of all the items not recognized. This works
> well, but seems to have no equivalent in 2.x.
>
> --
> Russel.
> ====================================================
> Dr Russel Winder Partner
>
> Concertant LLP t: +44 20 7585 2200, +44 20 7193 9203
> 41 Buckmaster Road, f: +44 8700 516 084
> London SW11 1EN, UK. m: +44 7770 465 077
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]