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 public class GnuParseTest extends TestCase 24 { 25 private Options _options = null; 26 private Parser _parser = null; 27 28 public static Test suite() { 29 return new TestSuite( GnuParseTest.class ); 30 } 31 32 public GnuParseTest( String name ) 33 { 34 super( name ); 35 } 36 37 public void setUp() 38 { 39 _options = new Options() 40 .addOption("a", 41 "enable-a", 42 false, 43 "turn [a] on or off") 44 .addOption("b", 45 "bfile", 46 true, 47 "set the value of [b]") 48 .addOption("c", 49 "copt", 50 false, 51 "turn [c] on or off"); 52 53 _parser = new GnuParser( ); 54 } 55 56 public void tearDown() 57 { 58 59 } 60 61 public void testSimpleShort() 62 { 63 String[] args = new String[] { "-a", 64 "-b", "toast", 65 "foo", "bar" }; 66 67 try 68 { 69 CommandLine cl = _parser.parse(_options, args); 70 71 assertTrue( "Confirm -a is set", cl.hasOption("a") ); 72 assertTrue( "Confirm -b is set", cl.hasOption("b") ); 73 assertTrue( "Confirm arg of -b", cl.getOptionValue("b").equals("toast") ); 74 assertTrue( "Confirm size of extra args", cl.getArgList().size() == 2); 75 } 76 catch (ParseException e) 77 { 78 fail( e.toString() ); 79 } 80 } 81 82 public void testSimpleLong() 83 { 84 String[] args = new String[] { "--enable-a", 85 "--bfile", "toast", 86 "foo", "bar" }; 87 88 try 89 { 90 CommandLine cl = _parser.parse(_options, args); 91 92 assertTrue( "Confirm -a is set", cl.hasOption("a") ); 93 assertTrue( "Confirm -b is set", cl.hasOption("b") ); 94 assertTrue( "Confirm arg of -b", cl.getOptionValue("b").equals("toast") ); 95 assertTrue( "Confirm size of extra args", cl.getArgList().size() == 2); 96 } 97 catch (ParseException e) 98 { 99 fail( e.toString() ); 100 } 101 } 102 103 public void testExtraOption() 104 { 105 String[] args = new String[] { "-a", "-d", "-b", "toast", 106 "foo", "bar" }; 107 108 boolean caught = false; 109 110 try 111 { 112 CommandLine cl = _parser.parse(_options, args); 113 114 assertTrue( "Confirm -a is set", cl.hasOption("a") ); 115 assertTrue( "Confirm -b is set", cl.hasOption("b") ); 116 assertTrue( "confirm arg of -b", cl.getOptionValue("b").equals("toast") ); 117 assertTrue( "Confirm size of extra args", cl.getArgList().size() == 3); 118 } 119 catch (UnrecognizedOptionException e) 120 { 121 caught = true; 122 } 123 catch (ParseException e) 124 { 125 fail( e.toString() ); 126 } 127 assertTrue( "Confirm UnrecognizedOptionException caught", caught ); 128 } 129 130 public void testMissingArg() 131 { 132 133 String[] args = new String[] { "-b" }; 134 135 boolean caught = false; 136 137 try 138 { 139 CommandLine cl = _parser.parse(_options, args); 140 } 141 catch (MissingArgumentException e) 142 { 143 caught = true; 144 } 145 catch (ParseException e) 146 { 147 fail( e.toString() ); 148 } 149 150 assertTrue( "Confirm MissingArgumentException caught", caught ); 151 } 152 153 public void testStop() 154 { 155 String[] args = new String[] { "-c", 156 "foober", 157 "-b", 158 "toast" }; 159 160 try 161 { 162 CommandLine cl = _parser.parse(_options, args, true); 163 assertTrue( "Confirm -c is set", cl.hasOption("c") ); 164 assertTrue( "Confirm 3 extra args: " + cl.getArgList().size(), cl.getArgList().size() == 3); 165 } 166 catch (ParseException e) 167 { 168 fail( e.toString() ); 169 } 170 } 171 172 public void testMultiple() 173 { 174 String[] args = new String[] { "-c", 175 "foobar", 176 "-b", 177 "toast" }; 178 179 try 180 { 181 CommandLine cl = _parser.parse(_options, args, true); 182 assertTrue( "Confirm -c is set", cl.hasOption("c") ); 183 assertTrue( "Confirm 3 extra args: " + cl.getArgList().size(), cl.getArgList().size() == 3); 184 185 cl = _parser.parse(_options, cl.getArgs() ); 186 187 assertTrue( "Confirm -c is not set", ! cl.hasOption("c") ); 188 assertTrue( "Confirm -b is set", cl.hasOption("b") ); 189 assertTrue( "Confirm arg of -b", cl.getOptionValue("b").equals("toast") ); 190 assertTrue( "Confirm 1 extra arg: " + cl.getArgList().size(), cl.getArgList().size() == 1); 191 assertTrue( "Confirm value of extra arg: " + cl.getArgList().get(0), cl.getArgList().get(0).equals("foobar") ); 192 } 193 catch (ParseException e) 194 { 195 fail( e.toString() ); 196 } 197 } 198 199 public void testMultipleWithLong() 200 { 201 String[] args = new String[] { "--copt", 202 "foobar", 203 "--bfile", "toast" }; 204 205 try 206 { 207 CommandLine cl = _parser.parse(_options,args, 208 true); 209 assertTrue( "Confirm -c is set", cl.hasOption("c") ); 210 assertTrue( "Confirm 3 extra args: " + cl.getArgList().size(), cl.getArgList().size() == 3); 211 212 cl = _parser.parse(_options, cl.getArgs() ); 213 214 assertTrue( "Confirm -c is not set", ! cl.hasOption("c") ); 215 assertTrue( "Confirm -b is set", cl.hasOption("b") ); 216 assertTrue( "Confirm arg of -b", cl.getOptionValue("b").equals("toast") ); 217 assertTrue( "Confirm 1 extra arg: " + cl.getArgList().size(), cl.getArgList().size() == 1); 218 assertTrue( "Confirm value of extra arg: " + cl.getArgList().get(0), cl.getArgList().get(0).equals("foobar") ); 219 } 220 catch (ParseException e) 221 { 222 fail( e.toString() ); 223 } 224 } 225 226 public void testDoubleDash() 227 { 228 String[] args = new String[] { "--copt", 229 "--", 230 "-b", "toast" }; 231 232 try 233 { 234 CommandLine cl = _parser.parse(_options, args); 235 236 assertTrue( "Confirm -c is set", cl.hasOption("c") ); 237 assertTrue( "Confirm -b is not set", ! cl.hasOption("b") ); 238 assertTrue( "Confirm 2 extra args: " + cl.getArgList().size(), cl.getArgList().size() == 2); 239 240 } 241 catch (ParseException e) 242 { 243 fail( e.toString() ); 244 } 245 } 246 247 public void testSingleDash() 248 { 249 String[] args = new String[] { "--copt", 250 "-b", "-", 251 "-a", 252 "-" }; 253 254 try 255 { 256 CommandLine cl = _parser.parse(_options, args); 257 258 assertTrue( "Confirm -a is set", cl.hasOption("a") ); 259 assertTrue( "Confirm -b is set", cl.hasOption("b") ); 260 assertTrue( "Confirm arg of -b", cl.getOptionValue("b").equals("-") ); 261 assertTrue( "Confirm 1 extra arg: " + cl.getArgList().size(), cl.getArgList().size() == 1); 262 assertTrue( "Confirm value of extra arg: " + cl.getArgList().get(0), cl.getArgList().get(0).equals("-") ); 263 } 264 catch (ParseException e) 265 { 266 fail( e.toString() ); 267 } 268 269 } 270 }