| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.commons.cli; |
| |
| import java.util.Arrays; |
| |
| import junit.framework.TestCase; |
| |
| public class ValuesTest extends TestCase |
| { |
| /** CommandLine instance */ |
| private CommandLine _cmdline = null; |
| |
| public void setUp() throws Exception |
| { |
| Options options = new Options(); |
| |
| options.addOption("a", false, "toggle -a"); |
| options.addOption("b", true, "set -b"); |
| options.addOption("c", "c", false, "toggle -c"); |
| options.addOption("d", "d", true, "set -d"); |
| |
| options.addOption(OptionBuilder.withLongOpt("e").hasArgs().withDescription("set -e ").create('e')); |
| options.addOption("f", "f", false, "jk"); |
| options.addOption(OptionBuilder.withLongOpt("g").hasArgs(2).withDescription("set -g").create('g')); |
| options.addOption(OptionBuilder.withLongOpt("h").hasArgs(2).withDescription("set -h").create('h')); |
| options.addOption(OptionBuilder.withLongOpt("i").withDescription("set -i").create('i')); |
| options.addOption(OptionBuilder.withLongOpt("j").hasArgs().withDescription("set -j").withValueSeparator('=').create('j')); |
| options.addOption(OptionBuilder.withLongOpt("k").hasArgs().withDescription("set -k").withValueSeparator('=').create('k')); |
| options.addOption(OptionBuilder.withLongOpt("m").hasArgs().withDescription("set -m").withValueSeparator().create('m')); |
| |
| String[] args = new String[] { "-a", |
| "-b", "foo", |
| "--c", |
| "--d", "bar", |
| "-e", "one", "two", |
| "-f", |
| "arg1", "arg2", |
| "-g", "val1", "val2" , "arg3", |
| "-h", "val1", "-i", |
| "-h", "val2", |
| "-jkey=value", |
| "-j", "key=value", |
| "-kkey1=value1", |
| "-kkey2=value2", |
| "-mkey=value"}; |
| |
| CommandLineParser parser = new PosixParser(); |
| |
| _cmdline = parser.parse(options,args); |
| } |
| |
| public void testShortArgs() |
| { |
| assertTrue( _cmdline.hasOption("a") ); |
| assertTrue( _cmdline.hasOption("c") ); |
| |
| assertNull( _cmdline.getOptionValues("a") ); |
| assertNull( _cmdline.getOptionValues("c") ); |
| } |
| |
| public void testShortArgsWithValue() |
| { |
| assertTrue( _cmdline.hasOption("b") ); |
| assertTrue( _cmdline.getOptionValue("b").equals("foo")); |
| assertEquals(1, _cmdline.getOptionValues("b").length); |
| |
| assertTrue( _cmdline.hasOption("d") ); |
| assertTrue( _cmdline.getOptionValue("d").equals("bar")); |
| assertEquals(1, _cmdline.getOptionValues("d").length); |
| } |
| |
| public void testMultipleArgValues() |
| { |
| String[] result = _cmdline.getOptionValues("e"); |
| String[] values = new String[] { "one", "two" }; |
| assertTrue( _cmdline.hasOption("e") ); |
| assertEquals(2, _cmdline.getOptionValues("e").length); |
| assertTrue( Arrays.equals( values, _cmdline.getOptionValues("e") ) ); |
| } |
| |
| public void testTwoArgValues() |
| { |
| String[] result = _cmdline.getOptionValues("g"); |
| String[] values = new String[] { "val1", "val2" }; |
| assertTrue( _cmdline.hasOption("g") ); |
| assertEquals(2, _cmdline.getOptionValues("g").length); |
| assertTrue( Arrays.equals( values, _cmdline.getOptionValues("g") ) ); |
| } |
| |
| public void testComplexValues() |
| { |
| String[] result = _cmdline.getOptionValues("h"); |
| String[] values = new String[] { "val1", "val2" }; |
| assertTrue( _cmdline.hasOption("i") ); |
| assertTrue( _cmdline.hasOption("h") ); |
| assertEquals(2, _cmdline.getOptionValues("h").length); |
| assertTrue( Arrays.equals( values, _cmdline.getOptionValues("h") ) ); |
| } |
| |
| public void testExtraArgs() |
| { |
| String[] args = new String[] { "arg1", "arg2", "arg3" }; |
| assertEquals(3, _cmdline.getArgs().length); |
| assertTrue( Arrays.equals( args, _cmdline.getArgs() ) ); |
| } |
| |
| public void testCharSeparator() |
| { |
| // tests the char methods of CommandLine that delegate to |
| // the String methods |
| String[] values = new String[] { "key", "value", "key", "value" }; |
| assertTrue( _cmdline.hasOption( "j" ) ); |
| assertTrue( _cmdline.hasOption( 'j' ) ); |
| assertEquals( 4, _cmdline.getOptionValues( "j" ).length ); |
| assertEquals( 4, _cmdline.getOptionValues( 'j' ).length ); |
| assertTrue( Arrays.equals( values, _cmdline.getOptionValues( "j" ) ) ); |
| assertTrue( Arrays.equals( values, _cmdline.getOptionValues( 'j' ) ) ); |
| |
| values = new String[] { "key1", "value1", "key2", "value2" }; |
| assertTrue( _cmdline.hasOption( "k" ) ); |
| assertTrue( _cmdline.hasOption( 'k' ) ); |
| assertEquals(4, _cmdline.getOptionValues( "k" ).length); |
| assertEquals(4, _cmdline.getOptionValues( 'k' ).length); |
| assertTrue( Arrays.equals( values, _cmdline.getOptionValues( "k" ) ) ); |
| assertTrue( Arrays.equals( values, _cmdline.getOptionValues( 'k' ) ) ); |
| |
| values = new String[] { "key", "value" }; |
| assertTrue( _cmdline.hasOption( "m" ) ); |
| assertTrue( _cmdline.hasOption( 'm' ) ); |
| assertEquals(2, _cmdline.getOptionValues( "m" ).length); |
| assertEquals(2, _cmdline.getOptionValues( 'm' ).length); |
| assertTrue( Arrays.equals( values, _cmdline.getOptionValues( "m" ) ) ); |
| assertTrue( Arrays.equals( values, _cmdline.getOptionValues( 'm' ) ) ); |
| } |
| |
| /** |
| * jkeyes - commented out this test as the new architecture |
| * breaks this type of functionality. I have left the test |
| * here in case I get a brainwave on how to resolve this. |
| */ |
| /* |
| public void testGetValue() |
| { |
| // the 'm' option |
| assertTrue( _option.getValues().length == 2 ); |
| assertEquals( _option.getValue(), "key" ); |
| assertEquals( _option.getValue( 0 ), "key" ); |
| assertEquals( _option.getValue( 1 ), "value" ); |
| |
| try { |
| assertEquals( _option.getValue( 2 ), "key" ); |
| fail( "IndexOutOfBounds not caught" ); |
| } |
| catch( IndexOutOfBoundsException exp ) { |
| |
| } |
| |
| try { |
| assertEquals( _option.getValue( -1 ), "key" ); |
| fail( "IndexOutOfBounds not caught" ); |
| } |
| catch( IndexOutOfBoundsException exp ) { |
| |
| } |
| } |
| */ |
| } |