/** * 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 junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import java.util.Arrays; import java.util.Properties; public class ValueTest extends TestCase { public static Test suite() { return new TestSuite(ValueTest.class); } private CommandLine _cl = null; private CommandLine _clOptional = null; private Options opts = new Options(); public ValueTest(String name) { super(name); } public void setUp() { opts.addOption("a", false, "toggle -a"); opts.addOption("b", true, "set -b"); opts.addOption("c", "c", false, "toggle -c"); opts.addOption("d", "d", true, "set -d"); opts.addOption( OptionBuilder.hasOptionalArg() .create( 'e') ); opts.addOption( OptionBuilder.hasOptionalArg() .withLongOpt( "fish" ) .create( ) ); opts.addOption( OptionBuilder.hasOptionalArgs() .withLongOpt( "gravy" ) .create( ) ); opts.addOption( OptionBuilder.hasOptionalArgs( 2 ) .withLongOpt( "hide" ) .create( ) ); opts.addOption( OptionBuilder.hasOptionalArgs( 2 ) .create( 'i' ) ); opts.addOption( OptionBuilder.hasOptionalArgs( ) .create( 'j' ) ); opts.addOption( OptionBuilder.hasArgs( ).withValueSeparator( ',' ) .create( 'k' ) ); String[] args = new String[] { "-a", "-b", "foo", "--c", "--d", "bar" }; try { Parser parser = new PosixParser(); _cl = parser.parse(opts,args); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } public void tearDown() { } public void testShortNoArg() { assertTrue( _cl.hasOption("a") ); assertNull( _cl.getOptionValue("a") ); } public void testShortWithArg() { assertTrue( _cl.hasOption("b") ); assertNotNull( _cl.getOptionValue("b") ); assertEquals( _cl.getOptionValue("b"), "foo"); } public void testLongNoArg() { assertTrue( _cl.hasOption("c") ); assertNull( _cl.getOptionValue("c") ); } public void testLongWithArg() { assertTrue( _cl.hasOption("d") ); assertNotNull( _cl.getOptionValue("d") ); assertEquals( _cl.getOptionValue("d"), "bar"); } public void testShortOptionalArgNoValue() { String[] args = new String[] { "-e" }; try { Parser parser = new PosixParser(); CommandLine cmd = parser.parse(opts,args); assertTrue( cmd.hasOption("e") ); assertNull( cmd.getOptionValue("e") ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } public void testShortOptionalArgValue() { String[] args = new String[] { "-e", "everything" }; try { Parser parser = new PosixParser(); CommandLine cmd = parser.parse(opts,args); assertTrue( cmd.hasOption("e") ); assertEquals( "everything", cmd.getOptionValue("e") ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } public void testLongOptionalNoValue() { String[] args = new String[] { "--fish" }; try { Parser parser = new PosixParser(); CommandLine cmd = parser.parse(opts,args); assertTrue( cmd.hasOption("fish") ); assertNull( cmd.getOptionValue("fish") ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } public void testLongOptionalArgValue() { String[] args = new String[] { "--fish", "face" }; try { Parser parser = new PosixParser(); CommandLine cmd = parser.parse(opts,args); assertTrue( cmd.hasOption("fish") ); assertEquals( "face", cmd.getOptionValue("fish") ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } public void testShortOptionalArgValues() { String[] args = new String[] { "-j", "ink", "idea" }; try { Parser parser = new PosixParser(); CommandLine cmd = parser.parse(opts,args); assertTrue( cmd.hasOption("j") ); assertEquals( "ink", cmd.getOptionValue("j") ); assertEquals( "ink", cmd.getOptionValues("j")[0] ); assertEquals( "idea", cmd.getOptionValues("j")[1] ); assertEquals( cmd.getArgs().length, 0 ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } public void testLongOptionalArgValues() { String[] args = new String[] { "--gravy", "gold", "garden" }; try { Parser parser = new PosixParser(); CommandLine cmd = parser.parse(opts,args); assertTrue( cmd.hasOption("gravy") ); assertEquals( "gold", cmd.getOptionValue("gravy") ); assertEquals( "gold", cmd.getOptionValues("gravy")[0] ); assertEquals( "garden", cmd.getOptionValues("gravy")[1] ); assertEquals( cmd.getArgs().length, 0 ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } public void testShortOptionalNArgValues() { String[] args = new String[] { "-i", "ink", "idea", "isotope", "ice" }; try { Parser parser = new PosixParser(); CommandLine cmd = parser.parse(opts,args); assertTrue( cmd.hasOption("i") ); assertEquals( "ink", cmd.getOptionValue("i") ); assertEquals( "ink", cmd.getOptionValues("i")[0] ); assertEquals( "idea", cmd.getOptionValues("i")[1] ); assertEquals( cmd.getArgs().length, 2 ); assertEquals( "isotope", cmd.getArgs()[0] ); assertEquals( "ice", cmd.getArgs()[1] ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } public void testLongOptionalNArgValues() { String[] args = new String[] { "--hide", "house", "hair", "head" }; Parser parser = new PosixParser(); try { CommandLine cmd = parser.parse(opts,args); assertTrue( cmd.hasOption("hide") ); assertEquals( "house", cmd.getOptionValue("hide") ); assertEquals( "house", cmd.getOptionValues("hide")[0] ); assertEquals( "hair", cmd.getOptionValues("hide")[1] ); assertEquals( cmd.getArgs().length, 1 ); assertEquals( "head", cmd.getArgs()[0] ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } public void testPropertyOptionSingularValue() { Properties properties = new Properties(); properties.setProperty( "hide", "seek" ); Parser parser = new PosixParser(); try { CommandLine cmd = parser.parse(opts, null, properties); assertTrue( cmd.hasOption("hide") ); assertEquals( "seek", cmd.getOptionValue("hide") ); assertTrue( !cmd.hasOption("fake") ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } public void testPropertyOptionFlags() { Properties properties = new Properties(); properties.setProperty( "a", "true" ); properties.setProperty( "c", "yes" ); properties.setProperty( "e", "1" ); Parser parser = new PosixParser(); try { CommandLine cmd = parser.parse(opts, null, properties); assertTrue( cmd.hasOption("a") ); assertTrue( cmd.hasOption("c") ); assertTrue( cmd.hasOption("e") ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } properties = new Properties(); properties.setProperty( "a", "false" ); properties.setProperty( "c", "no" ); properties.setProperty( "e", "0" ); try { CommandLine cmd = parser.parse(opts, null, properties); assertTrue( !cmd.hasOption("a") ); assertTrue( !cmd.hasOption("c") ); assertTrue( !cmd.hasOption("e") ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } properties = new Properties(); properties.setProperty( "a", "TRUE" ); properties.setProperty( "c", "nO" ); properties.setProperty( "e", "TrUe" ); try { CommandLine cmd = parser.parse(opts, null, properties); assertTrue( cmd.hasOption("a") ); assertTrue( !cmd.hasOption("c") ); assertTrue( cmd.hasOption("e") ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } properties = new Properties(); properties.setProperty( "a", "just a string" ); properties.setProperty( "e", "" ); try { CommandLine cmd = parser.parse(opts, null, properties); assertTrue( !cmd.hasOption("a") ); assertTrue( !cmd.hasOption("c") ); assertTrue( !cmd.hasOption("e") ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } public void testPropertyOptionMultipleValues() { Properties properties = new Properties(); properties.setProperty( "k", "one,two" ); Parser parser = new PosixParser(); String[] values = new String[] { "one", "two" }; try { CommandLine cmd = parser.parse(opts, null, properties); assertTrue( cmd.hasOption("k") ); assertTrue( Arrays.equals( values, cmd.getOptionValues('k') ) ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } public void testPropertyOverrideValues() { String[] args = new String[] { "-j", "found", "-i", "ink" }; Properties properties = new Properties(); properties.setProperty( "j", "seek" ); try { Parser parser = new PosixParser(); CommandLine cmd = parser.parse(opts, args, properties); assertTrue( cmd.hasOption("j") ); assertEquals( "found", cmd.getOptionValue("j") ); assertTrue( cmd.hasOption("i") ); assertEquals( "ink", cmd.getOptionValue("i") ); assertTrue( !cmd.hasOption("fake") ); } catch (ParseException e) { fail("Cannot setUp() CommandLine: " + e.toString()); } } }