5a729dceeb9b95716fa9c83bbc8f312dfc52420c
[rhynodge.git] / src / test / java / net / pterodactylus / util / envopt / ParserTest.java
1 package net.pterodactylus.util.envopt;
2
3 import java.util.Optional;
4
5 import net.pterodactylus.util.envopt.Parser.RequiredOptionIsMissing;
6
7 import org.hamcrest.MatcherAssert;
8 import org.hamcrest.Matchers;
9 import org.junit.Test;
10 import org.mockito.Mockito;
11
12 /**
13  * Unit test for {@link Parser}.
14  *
15  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
16  */
17 public class ParserTest {
18
19         private final Environment environment = Mockito.mock(Environment.class);
20         private final Parser parser = new Parser(environment);
21
22         @Test
23         public void parserCanParseEnvironmentIntoOptions() {
24                 Mockito.when(environment.getValue("foo")).thenReturn(Optional.of("test"));
25                 TestOptions testOptions = parser.parseEnvironment(TestOptions::new);
26                 MatcherAssert.assertThat(testOptions.getOptionOne(), Matchers.is("test"));
27         }
28
29         @Test
30         public void parserIgnoresOptionsWithoutAnnotations() {
31                 MoreTestOptions moreTestOptions = parser.parseEnvironment(MoreTestOptions::new);
32                 MatcherAssert.assertThat(moreTestOptions.getOptionOne(), Matchers.nullValue());
33         }
34
35         @Test
36         public void parserCanAssignToFinalValues() {
37                 Mockito.when(environment.getValue("foo")).thenReturn(Optional.of("test"));
38             FinalTestOptions finalTestOptions = parser.parseEnvironment(FinalTestOptions::new);
39                 MatcherAssert.assertThat(finalTestOptions.getOptionOne(), Matchers.is("test"));
40         }
41
42         @Test(expected = RequiredOptionIsMissing.class)
43         public void parserThrowsIfRequiredOptionIsMissing() {
44                 Mockito.when(environment.getValue("foo")).thenReturn(Optional.empty());
45             RequiredTestOptions requiredTestOptions = parser.parseEnvironment(RequiredTestOptions::new);
46                 requiredTestOptions.getOptionOne();
47         }
48
49         /**
50          * Test class with options used by {@link Parser}.
51          *
52          * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
53          */
54         private static class TestOptions {
55
56                 @Option(name = "foo")
57                 private String optionOne;
58
59                 public String getOptionOne() {
60                         return optionOne;
61                 }
62
63         }
64
65         /**
66          * Test class with options used by {@link Parser}.
67          *
68          * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
69          */
70         private static class MoreTestOptions {
71
72                 private String optionOne;
73
74                 public String getOptionOne() {
75                         return optionOne;
76                 }
77
78         }
79
80         /**
81          * Test class with options used by {@link Parser}.
82          *
83          * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
84          */
85         private static class FinalTestOptions {
86
87                 @Option(name = "foo")
88                 private final String optionOne = null;
89
90                 public String getOptionOne() {
91                         return optionOne;
92                 }
93
94         }
95
96         /**
97          * Test class with options used by {@link Parser}.
98          *
99          * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
100          */
101         private static class RequiredTestOptions {
102
103                 @Option(name = "foo", required = true)
104                 private final String optionOne = null;
105
106                 public String getOptionOne() {
107                         return optionOne;
108                 }
109
110         }
111
112 }