001package jargs.test.gnu;
002
003import jargs.gnu.CmdLineParser;
004import java.util.Locale;
005import java.util.Date;
006import java.text.DateFormat;
007import java.text.ParseException;
008import junit.framework.TestCase;
009
010public class CustomOptionTestCase extends TestCase {
011
012    public CustomOptionTestCase(String name) {
013        super(name);
014    }
015
016    public void testCustomOption() throws Exception {
017        CmdLineParser parser = new CmdLineParser();
018        CmdLineParser.Option date =
019            parser.addOption(new ShortDateOption('d', "date"));
020        parser.parse(new String[]{"-d", "11/03/2003"}, Locale.UK);
021        Date d = (Date)parser.getOptionValue(date);
022        assertEquals(11, d.getDay());
023        assertEquals(3, d.getMonth());
024        assertEquals(2003, d.getYear());
025
026        parser.parse(new String[]{"-d", "11/03/2003"}, Locale.US);
027        d = (Date)parser.getOptionValue(date);
028        assertEquals(3, d.getDay());
029        assertEquals(11, d.getMonth());
030        assertEquals(2003, d.getYear());
031    }
032
033    public void testIllegalCustomOption() throws Exception {
034        CmdLineParser parser = new CmdLineParser();
035        CmdLineParser.Option date =
036            parser.addOption(new ShortDateOption('d', "date"));
037        try {
038            parser.parse(new String[]{"-d", "foobar"}, Locale.US);
039            fail("Expected IllegalOptionValueException");
040        }
041        catch (CmdLineParser.IllegalOptionValueException e) {
042            //pass
043        }
044    }
045
046    public static class ShortDateOption extends CmdLineParser.Option {
047        public ShortDateOption( char shortForm, String longForm ) {
048            super(shortForm, longForm, true);
049        }
050        protected Object parseValue( String arg, Locale locale )
051            throws CmdLineParser.IllegalOptionValueException {
052            try {
053                DateFormat dateFormat =
054                    DateFormat.getDateInstance(DateFormat.SHORT, locale);
055                return dateFormat.parse(arg);
056            }
057            catch (ParseException e) {
058                throw new CmdLineParser.IllegalOptionValueException(this, arg);
059            }
060        }
061    }
062
063
064}