Skip to content

Commit 0f52eff

Browse files
author
John Keyes
committed
some bug fixes submitted by Rob, removed duff println, add new OptionsTest submitted by Rob
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/cli/trunk@129847 13f79535-47bb-0310-9956-ffa450edef68
1 parent 347bbeb commit 0f52eff

4 files changed

Lines changed: 185 additions & 8 deletions

File tree

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -298,10 +298,6 @@ void addOption( Option opt ) {
298298
names.put( opt.getLongOpt(), key );
299299
}
300300

301-
if( opt.getValues() != null ) {
302-
System.out.println( opt.getKey() + "=" + opt.getValues().length );
303-
}
304-
305301
options.put( key, opt );
306302
}
307303

@@ -321,7 +317,7 @@ public Iterator iterator( ) {
321317
* @return an array of the processed {@link Option}s.
322318
*/
323319
public Option[] getOptions( ) {
324-
Collection processed = hashcodeMap.values();
320+
Collection processed = options.values();
325321

326322
// reinitialise array
327323
optionsArray = new Option[ processed.size() ];

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public class OptionGroup {
9090
public OptionGroup addOption(Option opt) {
9191
// key - option name
9292
// value - the option
93-
optionMap.put( "-" + opt.getOpt(), opt );
93+
optionMap.put( opt.getKey(), opt );
9494
return this;
9595
}
9696

@@ -168,8 +168,14 @@ public String toString() {
168168
while( iter.hasNext() ) {
169169
Option option = (Option)iter.next();
170170

171-
buff.append( "-" );
172-
buff.append( option.getOpt() );
171+
if( option.getOpt() != null ) {
172+
buff.append( "-" );
173+
buff.append( option.getOpt() );
174+
}
175+
else {
176+
buff.append( "--" );
177+
buff.append( option.getLongOpt() );
178+
}
173179
buff.append( " " );
174180
buff.append( option.getDescription( ) );
175181

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,14 @@ public void setUp()
5151
group2.addOption( chapter );
5252

5353
_options.addOptionGroup( group2 );
54+
55+
Option importOpt = new Option( null, "import", false, "section to process" );
56+
Option exportOpt = new Option( null, "export", false, "chapter to process" );
57+
OptionGroup group3 = new OptionGroup();
58+
group3.addOption( importOpt );
59+
group3.addOption( exportOpt );
60+
_options.addOptionGroup( group3 );
61+
5462
_options.addOption( "r", "revision", false, "revision number" );
5563
}
5664

@@ -240,5 +248,28 @@ public void testTwoOptionsFromDifferentGroup()
240248
}
241249
}
242250

251+
public void testValidLongOnlyOptions()
252+
{
253+
try
254+
{
255+
CommandLine cl = parser.parse( _options, new String[]{"--export"});
256+
assertTrue( "Confirm --export is set", cl.hasOption("export") );
257+
}
258+
catch (ParseException e)
259+
{
260+
fail( e.toString() );
261+
}
262+
263+
try
264+
{
265+
CommandLine cl = parser.parse( _options, new String[]{"--import"});
266+
assertTrue( "Confirm --import is set", cl.hasOption("import") );
267+
}
268+
catch (ParseException e)
269+
{
270+
fail( e.toString() );
271+
}
272+
}
273+
243274

244275
}
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
/*
2+
* $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//cli/src/test/org/apache/commons/cli/OptionsTest.java,v 1.1 2002/11/19 00:16:18 jkeyes Exp $
3+
* $Revision: 1.1 $
4+
* $Date: 2002/11/19 00:16:18 $
5+
*
6+
* ====================================================================
7+
*
8+
* The Apache Software License, Version 1.1
9+
*
10+
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights
11+
* reserved.
12+
*
13+
* Redistribution and use in source and binary forms, with or without
14+
* modification, are permitted provided that the following conditions
15+
* are met:
16+
*
17+
* 1. Redistributions of source code must retain the above copyright
18+
* notice, this list of conditions and the following disclaimer.
19+
*
20+
* 2. Redistributions in binary form must reproduce the above copyright
21+
* notice, this list of conditions and the following disclaimer in
22+
* the documentation and/or other materials provided with the
23+
* distribution.
24+
*
25+
* 3. The end-user documentation included with the redistribution, if
26+
* any, must include the following acknowlegement:
27+
* "This product includes software developed by the
28+
* Apache Software Foundation (http://www.apache.org/)."
29+
* Alternately, this acknowlegement may appear in the software itself,
30+
* if and wherever such third-party acknowlegements normally appear.
31+
*
32+
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
33+
* Foundation" must not be used to endorse or promote products derived
34+
* from this software without prior written permission. For written
35+
* permission, please contact apache@apache.org.
36+
*
37+
* 5. Products derived from this software may not be called "Apache"
38+
* nor may "Apache" appear in their names without prior written
39+
* permission of the Apache Group.
40+
*
41+
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
42+
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
43+
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
44+
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
45+
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
46+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
47+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
48+
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
49+
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
50+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
51+
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
52+
* SUCH DAMAGE.
53+
* ====================================================================
54+
*
55+
* This software consists of voluntary contributions made by many
56+
* individuals on behalf of the Apache Software Foundation. For more
57+
* information on the Apache Software Foundation, please see
58+
* <http://www.apache.org/>.
59+
*
60+
*/
61+
package org.apache.commons.cli;
62+
63+
import java.util.ArrayList;
64+
import java.util.Collection;
65+
66+
import junit.framework.Test;
67+
import junit.framework.TestCase;
68+
import junit.framework.TestSuite;
69+
70+
/**
71+
* @author Rob Oxspring roxspring@apache.org
72+
* @version $Revision: 1.1 $
73+
*/
74+
public class OptionsTest extends TestCase
75+
{
76+
77+
public static Test suite()
78+
{
79+
return new TestSuite ( OptionsTest.class );
80+
}
81+
82+
public OptionsTest( String name )
83+
{
84+
super( name );
85+
}
86+
87+
public void setUp()
88+
{
89+
}
90+
91+
public void tearDown()
92+
{
93+
}
94+
95+
public void testHelpOptions(){
96+
97+
Option longOnly1 = OptionBuilder
98+
.withLongOpt("long-only1")
99+
.create();
100+
101+
Option longOnly2 = OptionBuilder
102+
.withLongOpt("long-only2")
103+
.create();
104+
105+
Option shortOnly1 = OptionBuilder
106+
.create("1");
107+
108+
Option shortOnly2 = OptionBuilder
109+
.create("2");
110+
111+
Option bothA = OptionBuilder
112+
.withLongOpt("bothA")
113+
.create("a");
114+
115+
Option bothB = OptionBuilder
116+
.withLongOpt("bothB")
117+
.create("b");
118+
119+
Options options = new Options();
120+
options.addOption(longOnly1);
121+
options.addOption(longOnly2);
122+
options.addOption(shortOnly1);
123+
options.addOption(shortOnly2);
124+
options.addOption(bothA);
125+
options.addOption(bothB);
126+
127+
Collection allOptions = new ArrayList();
128+
allOptions.add(longOnly1);
129+
allOptions.add(longOnly2);
130+
allOptions.add(shortOnly1);
131+
allOptions.add(shortOnly2);
132+
allOptions.add(bothA);
133+
allOptions.add(bothB);
134+
135+
Collection helpOptions = options.helpOptions();
136+
137+
assertTrue("Everything in all should be in help",helpOptions.containsAll(allOptions));
138+
assertTrue("Everything in help should be in all",allOptions.containsAll(helpOptions));
139+
}
140+
141+
142+
143+
}
144+

0 commit comments

Comments
 (0)