1   package com.lexicalscope.jewel.cli.parser;
2   
3   import org.jmock.Expectations;
4   import org.jmock.auto.Mock;
5   import org.jmock.integration.junit4.JUnitRuleMockery;
6   import org.junit.Rule;
7   import org.junit.Test;
8   
9   public class TestArgumentParserImpl {
10      @Rule public final JUnitRuleMockery context = new JUnitRuleMockery();
11      @Mock public ParsedArguments parsedArguments;
12  
13      final ArgumentParser impl = new ArgumentParserImpl();
14  
15      @Test public void testParseArguments() {
16          parseArguments(new String[] {});
17      }
18  
19      @Test public void testParseArgumentsNotUparsed() {
20          context.checking(new Expectations() {{
21             oneOf(parsedArguments).addOption("a");
22             oneOf(parsedArguments).addValue("1");
23             oneOf(parsedArguments).addValue("2");
24             oneOf(parsedArguments).addOption("b");
25             oneOf(parsedArguments).addOption("c");
26             oneOf(parsedArguments).addValue("1");
27             oneOf(parsedArguments).addValue("2");
28          }});
29  
30          parseArguments(new String[] { "-a", "1", "2", "-b", "-c", "1", "2" });
31      }
32  
33      @Test public void testParseArgumentsUnparsed() {
34          context.checking(new Expectations() {{
35              oneOf(parsedArguments).addOption("a");
36              oneOf(parsedArguments).addValue("1");
37              oneOf(parsedArguments).addValue("2");
38              oneOf(parsedArguments).addOption("b");
39              oneOf(parsedArguments).addOption("c");
40              oneOf(parsedArguments).addValue("1");
41              oneOf(parsedArguments).addValue("2");
42              oneOf(parsedArguments).unparsedOptionsFollow();
43              oneOf(parsedArguments).addValue("3");
44              oneOf(parsedArguments).addValue("4");
45          }});
46  
47          parseArguments(new String[] { "-a", "1", "2", "-b", "-c", "1", "2", "--", "3", "4" });
48      }
49  
50      @Test public void testParseArgumentsOnlyUnparsed() {
51          context.checking(new Expectations() {{
52              oneOf(parsedArguments).unparsedOptionsFollow();
53              oneOf(parsedArguments).addValue("3");
54              oneOf(parsedArguments).addValue("4");
55          }});
56  
57          parseArguments(new String[] { "--", "3", "4" });
58      }
59  
60      @Test public void testParseArgumentsOnlyUnparsedSeperator() {
61          context.checking(new Expectations() {{
62              oneOf(parsedArguments).unparsedOptionsFollow();
63          }});
64  
65          parseArguments(new String[] { "--" });
66      }
67  
68      @Test public void testParseShortArguments() {
69          context.checking(new Expectations() {{
70              oneOf(parsedArguments).addOption("a");
71              oneOf(parsedArguments).addOption("b");
72              oneOf(parsedArguments).addOption("c");
73          }});
74  
75          parseArguments(new String[] { "-abc" });
76      }
77  
78      @Test public void testParseAssignedValue() {
79          context.checking(new Expectations() {{
80              oneOf(parsedArguments).addOption("option");
81              oneOf(parsedArguments).addValue("value");
82          }});
83  
84          parseArguments(new String[] { "--option=value" });
85      }
86  
87      private void parseArguments(final String[] arguments) {
88          impl.parseArguments(parsedArguments, arguments);
89      }
90  }