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}