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}