commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "andrew ox." <andrew.oxenbu...@gmail.com>
Subject Re: [cli] 2.x command line
Date Wed, 04 Jun 2008 09:37:40 GMT
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 <russel.winder@concertant.com>:
> 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: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Mime
View raw message