blob: 0be0cc15e1103f6598962b59a3cc522762afdee4 [file] [log] [blame]
/**
* 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 static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.Collection;
import org.junit.Test;
@SuppressWarnings("deprecation") // tests some deprecated classes
public class OptionsTest
{
@Test
public void testSimple()
{
Options opts = new Options();
opts.addOption("a", false, "toggle -a");
opts.addOption("b", true, "toggle -b");
assertTrue(opts.hasOption("a"));
assertTrue(opts.hasOption("b"));
}
@Test
public void testDuplicateSimple()
{
Options opts = new Options();
opts.addOption("a", false, "toggle -a");
opts.addOption("a", true, "toggle -a*");
assertEquals("last one in wins", "toggle -a*", opts.getOption("a").getDescription());
}
@Test
public void testLong()
{
Options opts = new Options();
opts.addOption("a", "--a", false, "toggle -a");
opts.addOption("b", "--b", true, "set -b");
assertTrue(opts.hasOption("a"));
assertTrue(opts.hasOption("b"));
}
@Test
public void testDuplicateLong()
{
Options opts = new Options();
opts.addOption("a", "--a", false, "toggle -a");
opts.addOption("a", "--a", false, "toggle -a*");
assertEquals("last one in wins", "toggle -a*", opts.getOption("a").getDescription());
}
@Test
public void testHelpOptions()
{
Option longOnly1 = OptionBuilder.withLongOpt("long-only1").create();
Option longOnly2 = OptionBuilder.withLongOpt("long-only2").create();
Option shortOnly1 = OptionBuilder.create("1");
Option shortOnly2 = OptionBuilder.create("2");
Option bothA = OptionBuilder.withLongOpt("bothA").create("a");
Option bothB = OptionBuilder.withLongOpt("bothB").create("b");
Options options = new Options();
options.addOption(longOnly1);
options.addOption(longOnly2);
options.addOption(shortOnly1);
options.addOption(shortOnly2);
options.addOption(bothA);
options.addOption(bothB);
Collection<Option> allOptions = new ArrayList<Option>();
allOptions.add(longOnly1);
allOptions.add(longOnly2);
allOptions.add(shortOnly1);
allOptions.add(shortOnly2);
allOptions.add(bothA);
allOptions.add(bothB);
Collection<Option> helpOptions = options.helpOptions();
assertTrue("Everything in all should be in help", helpOptions.containsAll(allOptions));
assertTrue("Everything in help should be in all", allOptions.containsAll(helpOptions));
}
@Test
public void testMissingOptionException() throws ParseException
{
Options options = new Options();
options.addOption(OptionBuilder.isRequired().create("f"));
try
{
new PosixParser().parse(options, new String[0]);
fail("Expected MissingOptionException to be thrown");
}
catch (MissingOptionException e)
{
assertEquals("Missing required option: f", e.getMessage());
}
}
@Test
public void testMissingOptionsException() throws ParseException
{
Options options = new Options();
options.addOption(OptionBuilder.isRequired().create("f"));
options.addOption(OptionBuilder.isRequired().create("x"));
try
{
new PosixParser().parse(options, new String[0]);
fail("Expected MissingOptionException to be thrown");
}
catch (MissingOptionException e)
{
assertEquals("Missing required options: f, x", e.getMessage());
}
}
@Test
public void testToString()
{
Options options = new Options();
options.addOption("f", "foo", true, "Foo");
options.addOption("b", "bar", false, "Bar");
String s = options.toString();
assertNotNull("null string returned", s);
assertTrue("foo option missing", s.toLowerCase().contains("foo"));
assertTrue("bar option missing", s.toLowerCase().contains("bar"));
}
@Test
public void testGetOptionsGroups()
{
Options options = new Options();
OptionGroup group1 = new OptionGroup();
group1.addOption(OptionBuilder.create('a'));
group1.addOption(OptionBuilder.create('b'));
OptionGroup group2 = new OptionGroup();
group2.addOption(OptionBuilder.create('x'));
group2.addOption(OptionBuilder.create('y'));
options.addOptionGroup(group1);
options.addOptionGroup(group2);
assertNotNull(options.getOptionGroups());
assertEquals(2, options.getOptionGroups().size());
}
@Test
public void testGetMatchingOpts()
{
Options options = new Options();
options.addOption(OptionBuilder.withLongOpt("version").create());
options.addOption(OptionBuilder.withLongOpt("verbose").create());
assertTrue(options.getMatchingOptions("foo").isEmpty());
assertEquals(1, options.getMatchingOptions("version").size());
assertEquals(2, options.getMatchingOptions("ver").size());
}
}