1   package com.lexicalscope.jewel.cli.examples;
2   
3   import static com.lexicalscope.jewel.cli.CliFactory.parseArgumentsUsingInstance;
4   import static com.lexicalscope.jewel.cli.ArgumentValidationExceptionMatcher.hasValidationException;
5   import static org.junit.Assert.assertEquals;
6   
7   import org.junit.Rule;
8   import org.junit.Test;
9   import org.junit.rules.ExpectedException;
10  
11  import com.lexicalscope.jewel.cli.ArgumentValidationException;
12  import com.lexicalscope.jewel.cli.ValidationFailureType;
13  
14  public class TestClassOptionalOption {
15      @Rule public final ExpectedException exception = ExpectedException.none();
16  
17      @Test public void testOptionalOptionPresent() throws ArgumentValidationException {
18          final ClassOptionalOption result =
19                  parseArgumentsUsingInstance(new ClassOptionalOption(), new String[] {
20                      "--myMandatoryOption",
21                      "3",
22                      "--myOptionalOption",
23                  "7" });
24  
25          assertEquals(3, (int) result.getMyMandatoryOption());
26          assertEquals(7, (int) result.getMyOptionalOption());
27      }
28  
29      @Test public void testOptionalOptionMissing() throws ArgumentValidationException {
30          final ClassOptionalOption result =
31                  parseArgumentsUsingInstance(new ClassOptionalOption(), new String[] {
32                      "--myMandatoryOption",
33                  "3" });
34  
35          assertEquals(3, (int) result.getMyMandatoryOption());
36          assertEquals(null, result.getMyOptionalOption());
37      }
38  
39      @Test public void testMandatoryOptionMissing() throws ArgumentValidationException {
40          exception.expect(ArgumentValidationException.class);
41          exception.expect(hasValidationException(ValidationFailureType.MissingOption));
42  
43          parseArgumentsUsingInstance(new ClassOptionalOption(), new String[] { "--myOptionalOption", "3" });
44      }
45  }