1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.cli;
19
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertFalse;
22 import static org.junit.jupiter.api.Assertions.assertNull;
23 import static org.junit.jupiter.api.Assertions.assertThrows;
24 import static org.junit.jupiter.api.Assertions.assertTrue;
25
26 import org.junit.jupiter.api.Test;
27 import org.junit.jupiter.api.function.Executable;
28
29 @SuppressWarnings("deprecation")
30 class OptionBuilderTest {
31
32 @Test
33 void testBaseOptionCharOpt() {
34 OptionBuilder.withDescription("option description");
35 final Option base = OptionBuilder.create('o');
36 assertEquals("o", base.getOpt());
37 assertEquals("option description", base.getDescription());
38 assertFalse(base.hasArg());
39 }
40
41 @Test
42 void testBaseOptionStringOpt() {
43 OptionBuilder.withDescription("option description");
44 final Option base = OptionBuilder.create("o");
45 assertEquals("o", base.getOpt());
46 assertEquals("option description", base.getDescription());
47 assertFalse(base.hasArg());
48 }
49
50 @Test
51 void testBuilderIsResettedAlways() {
52 OptionBuilder.withDescription("JUnit");
53 assertThrows(IllegalArgumentException.class, () -> OptionBuilder.create('"'));
54 assertNull(OptionBuilder.create('x').getDescription(), "we inherited a description");
55 assertThrows(IllegalStateException.class, (Executable) OptionBuilder::create);
56 assertNull(OptionBuilder.create('x').getDescription(), "we inherited a description");
57 }
58
59 @Test
60 void testCompleteOption() {
61 OptionBuilder.withLongOpt("simple option");
62 OptionBuilder.hasArg();
63 OptionBuilder.isRequired();
64 OptionBuilder.hasArgs();
65 OptionBuilder.withType(Float.class);
66 OptionBuilder.withDescription("this is a simple option");
67 final Option simple = OptionBuilder.create('s');
68 assertEquals("s", simple.getOpt());
69 assertEquals("simple option", simple.getLongOpt());
70 assertEquals("this is a simple option", simple.getDescription());
71 assertEquals(simple.getType(), Float.class);
72 assertTrue(simple.hasArg());
73 assertTrue(simple.isRequired());
74 assertTrue(simple.hasArgs());
75 }
76
77 @Test
78 void testCreateIncompleteOption() {
79 assertThrows(IllegalStateException.class, (Executable) OptionBuilder::create);
80
81 OptionBuilder.create("opt");
82 }
83
84 @Test
85 void testIllegalOptions() {
86 OptionBuilder.withDescription("option description");
87
88 assertThrows(IllegalArgumentException.class, () -> OptionBuilder.create('"'));
89
90 assertThrows(IllegalArgumentException.class, () -> OptionBuilder.create("opt`"));
91
92 OptionBuilder.create("opt");
93 }
94
95 @Test
96 void testOptionArgNumbers() {
97 OptionBuilder.withDescription("option description");
98 OptionBuilder.hasArgs(2);
99 final Option opt = OptionBuilder.create('o');
100 assertEquals(2, opt.getArgs());
101 }
102
103 @Test
104 void testSpecialOptChars() throws Exception {
105 OptionBuilder.withDescription("help options");
106
107 final Option opt1 = OptionBuilder.create('?');
108 assertEquals("?", opt1.getOpt());
109 OptionBuilder.withDescription("read from stdin");
110
111 final Option opt2 = OptionBuilder.create('@');
112 assertEquals("@", opt2.getOpt());
113
114 assertThrows(IllegalArgumentException.class, () -> OptionBuilder.create(' '));
115 }
116
117 @Test
118 void testTwoCompleteOptions() {
119 OptionBuilder.withLongOpt("simple option");
120 OptionBuilder.hasArg();
121 OptionBuilder.isRequired();
122 OptionBuilder.hasArgs();
123 OptionBuilder.withType(Float.class);
124 OptionBuilder.withDescription("this is a simple option");
125 Option simple = OptionBuilder.create('s');
126 assertEquals("s", simple.getOpt());
127 assertEquals("simple option", simple.getLongOpt());
128 assertEquals("this is a simple option", simple.getDescription());
129 assertEquals(simple.getType(), Float.class);
130 assertTrue(simple.hasArg());
131 assertTrue(simple.isRequired());
132 assertTrue(simple.hasArgs());
133 OptionBuilder.withLongOpt("dimple option");
134 OptionBuilder.hasArg();
135 OptionBuilder.withDescription("this is a dimple option");
136 simple = OptionBuilder.create('d');
137 assertEquals("d", simple.getOpt());
138 assertEquals("dimple option", simple.getLongOpt());
139 assertEquals("this is a dimple option", simple.getDescription());
140 assertEquals(String.class, simple.getType());
141 assertTrue(simple.hasArg());
142 assertFalse(simple.isRequired());
143 assertFalse(simple.hasArgs());
144 }
145 }