1 /***
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.cli;
18
19 import junit.framework.Test;
20 import junit.framework.TestCase;
21 import junit.framework.TestSuite;
22
23 /***
24 * @author John Keyes (john at integralsource.com)
25 * @version $Revision: 542144 $
26 */
27 public class ParseRequiredTest extends TestCase
28 {
29
30 private Options _options = null;
31 private CommandLineParser parser = new PosixParser();
32
33 public static Test suite() {
34 return new TestSuite(ParseRequiredTest.class);
35 }
36
37 public ParseRequiredTest(String name)
38 {
39 super(name);
40 }
41
42 public void setUp()
43 {
44 _options = new Options()
45 .addOption("a",
46 "enable-a",
47 false,
48 "turn [a] on or off")
49 .addOption( OptionBuilder.withLongOpt( "bfile" )
50 .hasArg()
51 .isRequired()
52 .withDescription( "set the value of [b]" )
53 .create( 'b' ) );
54 }
55
56 public void tearDown()
57 {
58
59 }
60
61 public void testWithRequiredOption()
62 {
63 String[] args = new String[] { "-b", "file" };
64
65 try
66 {
67 CommandLine cl = parser.parse(_options,args);
68
69 assertTrue( "Confirm -a is NOT set", !cl.hasOption("a") );
70 assertTrue( "Confirm -b is set", cl.hasOption("b") );
71 assertTrue( "Confirm arg of -b", cl.getOptionValue("b").equals("file") );
72 assertTrue( "Confirm NO of extra args", cl.getArgList().size() == 0);
73 }
74 catch (ParseException e)
75 {
76 fail( e.toString() );
77 }
78 }
79
80 public void testOptionAndRequiredOption()
81 {
82 String[] args = new String[] { "-a", "-b", "file" };
83
84 try
85 {
86 CommandLine cl = parser.parse(_options,args);
87
88 assertTrue( "Confirm -a is set", cl.hasOption("a") );
89 assertTrue( "Confirm -b is set", cl.hasOption("b") );
90 assertTrue( "Confirm arg of -b", cl.getOptionValue("b").equals("file") );
91 assertTrue( "Confirm NO of extra args", cl.getArgList().size() == 0);
92 }
93 catch (ParseException e)
94 {
95 fail( e.toString() );
96 }
97 }
98
99 public void testMissingRequiredOption()
100 {
101 String[] args = new String[] { "-a" };
102
103 try
104 {
105 CommandLine cl = parser.parse(_options,args);
106 fail( "exception should have been thrown" );
107 }
108 catch (ParseException e)
109 {
110 if( !( e instanceof MissingOptionException ) )
111 {
112 fail( "expected to catch MissingOptionException" );
113 }
114 }
115 }
116
117 }