Skip to content

Commit b1efd86

Browse files
author
John Keyes
committed
support for Options with optional argument values
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/cli/trunk@129815 13f79535-47bb-0310-9956-ffa450edef68
1 parent 5177adf commit b1efd86

3 files changed

Lines changed: 226 additions & 36 deletions

File tree

src/java/org/apache/commons/cli/Option.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -314,9 +314,6 @@ public void setLongOpt( String longOpt ) {
314314
* an optional argument.
315315
*/
316316
public void setOptionalArg( boolean optionalArg ) {
317-
if( optionalArg ) {
318-
this.numberOfArgs = 1;
319-
}
320317
this.optionalArg = optionalArg;
321318
}
322319

src/java/org/apache/commons/cli/OptionBuilder.java

Lines changed: 48 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
2-
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//cli/src/java/org/apache/commons/cli/OptionBuilder.java,v 1.8 2002/09/09 19:48:13 jkeyes Exp $
3-
* $Revision: 1.8 $
4-
* $Date: 2002/09/09 19:48:13 $
2+
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//cli/src/java/org/apache/commons/cli/OptionBuilder.java,v 1.9 2002/09/10 21:35:57 jkeyes Exp $
3+
* $Revision: 1.9 $
4+
* $Date: 2002/09/10 21:35:57 $
55
*
66
* ====================================================================
77
*
@@ -234,6 +234,33 @@ public static OptionBuilder hasArgs( int num ) {
234234
* @return the OptionBuilder instance
235235
*/
236236
public static OptionBuilder hasOptionalArg( ) {
237+
instance.numberOfArgs = 1;
238+
instance.optionalArg = true;
239+
return instance;
240+
}
241+
242+
/**
243+
* <p>The next Option can have an unlimited number of
244+
* optional arguments.</p>
245+
*
246+
* @return the OptionBuilder instance
247+
*/
248+
public static OptionBuilder hasOptionalArgs( ) {
249+
instance.numberOfArgs = Option.UNLIMITED_VALUES;
250+
instance.optionalArg = true;
251+
return instance;
252+
}
253+
254+
/**
255+
* <p>The next Option can have the specified number of
256+
* optional arguments.</p>
257+
*
258+
* @param numArgs - the maximum number of optional arguments
259+
* the next Option created can have.
260+
* @return the OptionBuilder instance
261+
*/
262+
public static OptionBuilder hasOptionalArgs( int numArgs ) {
263+
instance.numberOfArgs = numArgs;
237264
instance.optionalArg = true;
238265
return instance;
239266
}
@@ -276,6 +303,24 @@ public static Option create( char opt )
276303
return create( String.valueOf( opt ) );
277304
}
278305

306+
/**
307+
* <p>Create an Option using the current settings</p>
308+
*
309+
* @return the Option instance
310+
* @throws IllegalArgumentException if <code>longOpt</code> has
311+
* not been set.
312+
* @see Option.
313+
*/
314+
public static Option create()
315+
throws IllegalArgumentException
316+
{
317+
if( longopt == null ) {
318+
throw new IllegalArgumentException( "must specify longopt" );
319+
}
320+
321+
return create( " " );
322+
}
323+
279324
/**
280325
* <p>Create an Option using the current settings and with
281326
* the specified Option <code>char</code>.</p>
@@ -305,22 +350,4 @@ public static Option create( String opt )
305350
// return the Option instance
306351
return option;
307352
}
308-
309-
/**
310-
* <p>Create an Option using the current settings</p>
311-
*
312-
* @return the Option instance
313-
* @throws IllegalArgumentException if <code>longOpt</code> has
314-
* not been set.
315-
* @see Option.
316-
*/
317-
public static Option create()
318-
throws IllegalArgumentException
319-
{
320-
if( longopt == null ) {
321-
throw new IllegalArgumentException( "must specify longopt" );
322-
}
323-
324-
return create( " " );
325-
}
326353
}

src/test/org/apache/commons/cli/ValueTest.java

Lines changed: 178 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,11 @@ public class ValueTest extends TestCase
1919

2020
public static Test suite() {
2121
return new TestSuite(ValueTest.class);
22-
/*
23-
TestSuite suite = new TestSuite();
24-
25-
suite.addTest( new ValueTest("testLongNoArg") );
26-
27-
return suite;
28-
*/
2922
}
3023

3124
private CommandLine _cl = null;
32-
25+
private CommandLine _clOptional = null;
26+
private Options opts = new Options();
3327

3428
public ValueTest(String name)
3529
{
@@ -38,7 +32,6 @@ public ValueTest(String name)
3832

3933
public void setUp()
4034
{
41-
Options opts = new Options();
4235
opts.addOption("a",
4336
false,
4437
"toggle -a");
@@ -57,10 +50,32 @@ public void setUp()
5750
true,
5851
"set -d");
5952

53+
opts.addOption( OptionBuilder.hasOptionalArg()
54+
.create( 'e') );
55+
56+
opts.addOption( OptionBuilder.hasOptionalArg()
57+
.withLongOpt( "fish" )
58+
.create( ) );
59+
60+
opts.addOption( OptionBuilder.hasOptionalArgs()
61+
.withLongOpt( "gravy" )
62+
.create( ) );
63+
64+
opts.addOption( OptionBuilder.hasOptionalArgs( 2 )
65+
.withLongOpt( "hide" )
66+
.create( ) );
67+
68+
opts.addOption( OptionBuilder.hasOptionalArgs( 2 )
69+
.create( 'i' ) );
70+
71+
opts.addOption( OptionBuilder.hasOptionalArgs( )
72+
.create( 'j' ) );
73+
6074
String[] args = new String[] { "-a",
61-
"-b", "foo",
62-
"--c",
63-
"--d", "bar" };
75+
"-b", "foo",
76+
"--c",
77+
"--d", "bar"
78+
};
6479

6580
try
6681
{
@@ -103,4 +118,155 @@ public void testLongWithArg()
103118
assertNotNull( _cl.getOptionValue("d") );
104119
assertEquals( _cl.getOptionValue("d"), "bar");
105120
}
121+
122+
public void testShortOptionalArgNoValue()
123+
{
124+
String[] args = new String[] { "-e"
125+
};
126+
try
127+
{
128+
CommandLineParser parser = CommandLineParserFactory.newParser();
129+
CommandLine cmd = parser.parse(opts,args);
130+
assertTrue( cmd.hasOption("e") );
131+
assertNull( cmd.getOptionValue("e") );
132+
}
133+
catch (ParseException e)
134+
{
135+
fail("Cannot setUp() CommandLine: " + e.toString());
136+
}
137+
}
138+
139+
public void testShortOptionalArgValue()
140+
{
141+
String[] args = new String[] { "-e", "everything"
142+
};
143+
try
144+
{
145+
CommandLineParser parser = CommandLineParserFactory.newParser();
146+
CommandLine cmd = parser.parse(opts,args);
147+
assertTrue( cmd.hasOption("e") );
148+
assertEquals( "everything", cmd.getOptionValue("e") );
149+
}
150+
catch (ParseException e)
151+
{
152+
fail("Cannot setUp() CommandLine: " + e.toString());
153+
}
154+
}
155+
156+
public void testLongOptionalNoValue()
157+
{
158+
String[] args = new String[] { "--fish"
159+
};
160+
try
161+
{
162+
CommandLineParser parser = CommandLineParserFactory.newParser();
163+
CommandLine cmd = parser.parse(opts,args);
164+
assertTrue( cmd.hasOption("fish") );
165+
assertNull( cmd.getOptionValue("fish") );
166+
}
167+
catch (ParseException e)
168+
{
169+
fail("Cannot setUp() CommandLine: " + e.toString());
170+
}
171+
}
172+
173+
public void testLongOptionalArgValue()
174+
{
175+
String[] args = new String[] { "--fish", "face"
176+
};
177+
try
178+
{
179+
CommandLineParser parser = CommandLineParserFactory.newParser();
180+
CommandLine cmd = parser.parse(opts,args);
181+
assertTrue( cmd.hasOption("fish") );
182+
assertEquals( "face", cmd.getOptionValue("fish") );
183+
}
184+
catch (ParseException e)
185+
{
186+
fail("Cannot setUp() CommandLine: " + e.toString());
187+
}
188+
}
189+
190+
public void testShortOptionalArgValues()
191+
{
192+
String[] args = new String[] { "-j", "ink", "idea"
193+
};
194+
try
195+
{
196+
CommandLineParser parser = CommandLineParserFactory.newParser();
197+
CommandLine cmd = parser.parse(opts,args);
198+
assertTrue( cmd.hasOption("j") );
199+
assertEquals( "ink", cmd.getOptionValue("j") );
200+
assertEquals( "ink", cmd.getOptionValues("j")[0] );
201+
assertEquals( "idea", cmd.getOptionValues("j")[1] );
202+
assertEquals( cmd.getArgs().length, 0 );
203+
}
204+
catch (ParseException e)
205+
{
206+
fail("Cannot setUp() CommandLine: " + e.toString());
207+
}
208+
}
209+
210+
public void testLongOptionalArgValues()
211+
{
212+
String[] args = new String[] { "--gravy", "gold", "garden"
213+
};
214+
try
215+
{
216+
CommandLineParser parser = CommandLineParserFactory.newParser();
217+
CommandLine cmd = parser.parse(opts,args);
218+
assertTrue( cmd.hasOption("gravy") );
219+
assertEquals( "gold", cmd.getOptionValue("gravy") );
220+
assertEquals( "gold", cmd.getOptionValues("gravy")[0] );
221+
assertEquals( "garden", cmd.getOptionValues("gravy")[1] );
222+
assertEquals( cmd.getArgs().length, 0 );
223+
}
224+
catch (ParseException e)
225+
{
226+
fail("Cannot setUp() CommandLine: " + e.toString());
227+
}
228+
}
229+
230+
public void testShortOptionalNArgValues()
231+
{
232+
String[] args = new String[] { "-i", "ink", "idea", "isotope", "ice"
233+
};
234+
try
235+
{
236+
CommandLineParser parser = CommandLineParserFactory.newParser();
237+
CommandLine cmd = parser.parse(opts,args);
238+
assertTrue( cmd.hasOption("i") );
239+
assertEquals( "ink", cmd.getOptionValue("i") );
240+
assertEquals( "ink", cmd.getOptionValues("i")[0] );
241+
assertEquals( "idea", cmd.getOptionValues("i")[1] );
242+
assertEquals( cmd.getArgs().length, 2 );
243+
assertEquals( "isotope", cmd.getArgs()[0] );
244+
assertEquals( "ice", cmd.getArgs()[1] );
245+
}
246+
catch (ParseException e)
247+
{
248+
fail("Cannot setUp() CommandLine: " + e.toString());
249+
}
250+
}
251+
252+
public void testLongOptionalNArgValues()
253+
{
254+
String[] args = new String[] { "--hide", "house", "hair", "head"
255+
};
256+
try
257+
{
258+
CommandLineParser parser = CommandLineParserFactory.newParser();
259+
CommandLine cmd = parser.parse(opts,args);
260+
assertTrue( cmd.hasOption("hide") );
261+
assertEquals( "house", cmd.getOptionValue("hide") );
262+
assertEquals( "house", cmd.getOptionValues("hide")[0] );
263+
assertEquals( "hair", cmd.getOptionValues("hide")[1] );
264+
assertEquals( cmd.getArgs().length, 1 );
265+
assertEquals( "head", cmd.getArgs()[0] );
266+
}
267+
catch (ParseException e)
268+
{
269+
fail("Cannot setUp() CommandLine: " + e.toString());
270+
}
271+
}
106272
}

0 commit comments

Comments
 (0)