001package jargs.test.gnu;
002
003import jargs.gnu.CmdLineParser;
004import java.util.Locale;
005import junit.framework.TestCase;
006
007public class CmdLineParserTestCase extends TestCase {
008
009
010    public CmdLineParserTestCase(String name) {
011        super(name);
012    }
013
014    public void testStandardOptions() throws Exception {
015        CmdLineParser parser = new CmdLineParser();
016        CmdLineParser.Option verbose = parser.addBooleanOption('v', "verbose");
017        CmdLineParser.Option size = parser.addIntegerOption('s', "size");
018        CmdLineParser.Option name = parser.addStringOption('n', "name");
019        CmdLineParser.Option fraction = parser.addDoubleOption('f', "fraction");
020        CmdLineParser.Option missing = parser.addBooleanOption('m', "missing");
021        this.assertEquals(null, parser.getOptionValue(size));
022        parser.parse(new String[]{"-v", "--size=100", "-n", "foo", "-f",
023                                  "0.1", "rest"}, Locale.US);
024        this.assertEquals(null, parser.getOptionValue(missing));
025        this.assertEquals(Boolean.TRUE, parser.getOptionValue(verbose));
026        this.assertEquals(100, ((Integer)parser.getOptionValue(size)).intValue());
027        this.assertEquals("foo", parser.getOptionValue(name));
028        this.assertEquals(0.1, ((Double)parser.getOptionValue(fraction)).doubleValue(), 0.1e-6);
029        String[] otherArgs = parser.getRemainingArgs();
030        assertEquals(1, otherArgs.length);
031        assertEquals("rest", otherArgs[0]);
032    }
033
034    public void testBadFormat() throws Exception {
035        CmdLineParser parser = new CmdLineParser();
036        CmdLineParser.Option size = parser.addIntegerOption('s', "size");
037        try {
038            parser.parse(new String[]{"--size=blah"});
039            fail("Expected IllegalOptionValueException");
040        }
041        catch (CmdLineParser.IllegalOptionValueException e) {
042            // pass
043        }
044    }
045
046    public void testResetBetweenParse() throws Exception {
047        CmdLineParser parser = new CmdLineParser();
048        CmdLineParser.Option verbose = parser.addBooleanOption('v', "verbose");
049        parser.parse(new String[]{"-v"});
050        this.assertEquals(Boolean.TRUE, parser.getOptionValue(verbose));
051        parser.parse(new String[]{});
052        this.assertEquals(null, parser.getOptionValue(verbose));
053    }
054
055    public void testLocale() throws Exception {
056        CmdLineParser parser = new CmdLineParser();
057        CmdLineParser.Option fraction = parser.addDoubleOption('f', "fraction");
058        parser.parse(new String[]{"--fraction=0.2"}, Locale.US);
059        this.assertEquals(0.2, ((Double)parser.getOptionValue(fraction)).doubleValue(), 0.1e-6);
060        parser.parse(new String[]{"--fraction=0,2"}, Locale.GERMANY);
061        this.assertEquals(0.2, ((Double)parser.getOptionValue(fraction)).doubleValue(), 0.1e-6);
062    }
063
064    public void testDetachedOption() throws Exception {
065        CmdLineParser parser = new CmdLineParser();
066        CmdLineParser.Option detached = new CmdLineParser.Option.BooleanOption('v', "verbose");
067        this.assertEquals(null, parser.getOptionValue(detached));
068        try {
069            parser.parse(new String[] {"-v"});
070            this.fail("UnknownOptionException expected");
071        }
072        catch (CmdLineParser.UnknownOptionException e) {
073            // pass
074        }
075        this.assertEquals(null, parser.getOptionValue(detached));
076    }
077}