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 * Test class with options used by {@link Parser}.
52 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
54 private static class TestOptions {
57 private String optionOne;
59 public String getOptionOne() {
66 * Test class with options used by {@link Parser}.
68 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
70 private static class MoreTestOptions {
72 private String optionOne;
74 public String getOptionOne() {
81 * Test class with options used by {@link Parser}.
83 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
85 private static class FinalTestOptions {
88 private final String optionOne = null;
90 public String getOptionOne() {
97 * Test class with options used by {@link Parser}.
99 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
101 private static class RequiredTestOptions {
103 @Option(name = "foo", required = true)
104 private final String optionOne = null;
106 public String getOptionOne() {