001: /*
002: Copyright 2004-2007 Paul R. Holser, Jr. All rights reserved.
003: Licensed under the Academic Free License version 3.0
004: */
005:
006: package joptsimple;
007:
008: import java.util.Arrays;
009: import java.util.Collections;
010:
011: /**
012: * @author <a href="mailto:pholser@alumni.rice.edu">Paul Holser</a>
013: * @version $Id: OptionParserTest.java,v 1.18 2007/04/10 20:06:26 pholser Exp $
014: */
015: public class OptionParserTest extends AbstractOptionParserFixture {
016: public void testArgumentOfWhenMultiples() {
017: parser.accepts("e").withRequiredArg();
018:
019: OptionSet options = parser.parse(new String[] { "-e", "foo",
020: "-e", "bar" });
021:
022: try {
023: options.argumentOf("e");
024: fail();
025: } catch (MultipleArgumentsForOptionException expected) {
026: assertEquals("e", expected.option());
027: }
028: }
029:
030: public void testOptionsAndNonOptionsInterspersed() {
031: parser.accepts("i").withOptionalArg();
032: parser.accepts("j").withOptionalArg();
033: parser.accepts("k");
034:
035: OptionSet options = parser.parse(new String[] { "-ibar", "-i",
036: "junk", "xyz", "-jixnay", "foo", "-k", "blah", "--",
037: "yermom" });
038:
039: assertOptionDetected(options, "i");
040: assertOptionDetected(options, "j");
041: assertOptionDetected(options, "k");
042: assertEquals(Arrays.asList(new String[] { "bar", "junk" }),
043: options.argumentsOf("i"));
044: assertEquals(Collections.singletonList("ixnay"), options
045: .argumentsOf("j"));
046: assertEquals(Collections.EMPTY_LIST, options.argumentsOf("k"));
047: assertEquals(Arrays.asList(new String[] { "xyz", "foo", "blah",
048: "yermom" }), options.nonOptionArguments());
049: }
050:
051: public void testShortOptionSpecifiedAsLongOptionWithoutArgument() {
052: parser.accepts("x");
053:
054: OptionSet options = parser.parse(new String[] { "--x" });
055: assertOptionDetected(options, "x");
056: assertEquals(Collections.EMPTY_LIST, options.argumentsOf("x"));
057: assertEquals(Collections.EMPTY_LIST, options
058: .nonOptionArguments());
059: }
060:
061: public void testLongOptionLeadsWithSingleDash() {
062: parser.accepts("quiet");
063: parser.accepts("queen");
064:
065: OptionSet options = parser.parse(new String[] { "-quiet" });
066: assertOptionDetected(options, "quiet");
067: assertEquals(Collections.EMPTY_LIST, options
068: .argumentsOf("quiet"));
069: assertEquals(Collections.EMPTY_LIST, options
070: .nonOptionArguments());
071: }
072:
073: public void testLongOptionLeadsWithSingleDashAmbiguous() {
074: parser.accepts("quiet");
075: parser.accepts("queen");
076:
077: try {
078: parser.parse(new String[] { "-q" });
079: fail();
080: } catch (UnrecognizedOptionException expected) {
081: assertEquals("q", expected.option());
082: }
083: }
084:
085: public void testLongOptionLeadsWithSingleDashAmbiguousButShortsAreLegal() {
086: parser.accepts("quiet");
087: parser.accepts("queen");
088: parser.accepts("q");
089: parser.accepts("u");
090:
091: OptionSet options = parser.parse(new String[] { "-qu" });
092: assertOptionDetected(options, "q");
093: assertOptionDetected(options, "u");
094: assertOptionNotDetected(options, "quiet");
095: assertOptionNotDetected(options, "queen");
096: assertEquals(Collections.EMPTY_LIST, options.argumentsOf("q"));
097: assertEquals(Collections.EMPTY_LIST, options.argumentsOf("u"));
098: assertEquals(Collections.EMPTY_LIST, options
099: .nonOptionArguments());
100: }
101:
102: public void testLongOptionLeadsWithSingleDashAmbiguousButAShortIsIllegal() {
103: parser.accepts("quiet");
104: parser.accepts("queen");
105: parser.accepts("q");
106:
107: try {
108: parser.parse(new String[] { "-qu" });
109: fail();
110: } catch (UnrecognizedOptionException expected) {
111: assertEquals("u", expected.option());
112: }
113: }
114:
115: public void testLongOptionLeadsWithSingleDashAmbiguousButAShortAcceptsAnArgument() {
116: parser.accepts("quiet");
117: parser.accepts("queen");
118: parser.accepts("q").withOptionalArg();
119:
120: OptionSet options = parser.parse(new String[] { "-qu" });
121: assertOptionDetected(options, "q");
122: assertOptionNotDetected(options, "quiet");
123: assertOptionNotDetected(options, "queen");
124: assertEquals(Collections.singletonList("u"), options
125: .argumentsOf("q"));
126: assertEquals(Collections.EMPTY_LIST, options
127: .nonOptionArguments());
128: }
129:
130: public void testResetHappensAfterParsing() {
131: parser.accepts("i").withOptionalArg();
132: parser.accepts("j").withOptionalArg();
133: parser.accepts("k");
134:
135: String[] args = new String[] { "-ibar", "-i", "junk", "xyz",
136: "-jixnay", "foo", "-k", "blah", "--", "yermom" };
137:
138: OptionSet options = parser.parse(args);
139: assertEquals(options, parser.parse(args));
140: }
141:
142: public void testTypedArguments() {
143: parser.accepts("a").withRequiredArg().ofType(Boolean.class);
144: parser.accepts("b").withOptionalArg().ofType(Integer.class);
145:
146: OptionSet options = parser.parse(new String[] { "-a", "false",
147: "-b", "3", "extra" });
148:
149: assertOptionDetected(options, "a");
150: assertOptionDetected(options, "b");
151: assertEquals(Boolean.FALSE, options.valueOf("a"));
152: assertEquals(Collections.singletonList(Boolean.FALSE), options
153: .valuesOf("a"));
154: assertEquals(Integer.valueOf("3"), options.valueOf("b"));
155: assertEquals(Collections.singletonList(Integer.valueOf("3")),
156: options.valuesOf("b"));
157: assertEquals(Collections.singletonList("extra"), options
158: .nonOptionArguments());
159: }
160: }
|