1 package net.pterodactylus.util.envopt;
3 import java.util.Optional;
5 import net.pterodactylus.util.envopt.Parser.RequiredOptionIsMissing;
7 import org.hamcrest.MatcherAssert;
8 import org.hamcrest.Matchers;
10 import org.mockito.Mockito;
13 * Unit test for {@link Parser}.
15 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
17 public class ParserTest {
19 private final Environment environment = Mockito.mock(Environment.class);
20 private final Parser parser = new Parser(environment);
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"));
30 public void parserIgnoresOptionsWithoutAnnotations() {
31 MoreTestOptions moreTestOptions = parser.parseEnvironment(MoreTestOptions::new);
32 MatcherAssert.assertThat(moreTestOptions.getOptionOne(), Matchers.nullValue());
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"));
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();
50 public void parserSetsDefaultValueIfValueIsMissing() {
51 Mockito.when(environment.getValue("foo")).thenReturn(Optional.empty());
52 DefaultTestOptions options = parser.parseEnvironment(DefaultTestOptions::new);
53 MatcherAssert.assertThat(options.optionOne, Matchers.is("something"));
57 * Test class with options used by {@link Parser}.
59 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
61 private static class TestOptions {
64 private String optionOne;
66 public String getOptionOne() {
73 * Test class with options used by {@link Parser}.
75 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
77 private static class MoreTestOptions {
79 private String optionOne;
81 public String getOptionOne() {
88 * Test class with options used by {@link Parser}.
90 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
92 private static class FinalTestOptions {
95 private final String optionOne = null;
97 public String getOptionOne() {
104 * Test class with options used by {@link Parser}.
106 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
108 private static class RequiredTestOptions {
110 @Option(name = "foo", required = true)
111 private final String optionOne = null;
113 public String getOptionOne() {
120 * Test class with options used by {@link Parser}.
122 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
124 private static class DefaultTestOptions {
126 @Option(name = "foo", defaultValue = "something")
127 public final String optionOne = null;