/** * Return whether this {@code PropertySource} contains the given name. * <p>This implementation simply checks for a {@code null} return value * from {@link #getProperty(String)}. Subclasses may wish to implement * a more efficient algorithm if possible. * @param name the property name to find */ public boolean containsProperty(String name) { return (getProperty(name) != null); }
@Override @Nullable public Object getProperty(String name) { for (PropertySource<?> propertySource : this.propertySources) { Object candidate = propertySource.getProperty(name); if (candidate != null) { return candidate; } } return null; }
@Test public void withBothPeriodAndUnderscore() { envMap.put("a_key", "a_value"); envMap.put("a.key", "a.value"); assertThat(ps.getProperty("a_key"), equalTo((Object)"a_value")); assertThat( ps.getProperty("a.key"), equalTo((Object)"a.value")); }
@Test public void withUnderscore() { envMap.put("a_key", "a_value"); assertThat(ps.containsProperty("a_key"), equalTo(true)); assertThat(ps.containsProperty("a.key"), equalTo(true)); assertThat(ps.getProperty("a_key"), equalTo((Object)"a_value")); assertThat( ps.getProperty("a.key"), equalTo((Object)"a_value")); }
@Test public void normalWithoutPeriod() { envMap.put("akey", "avalue"); assertThat(ps.containsProperty("akey"), equalTo(true)); assertThat(ps.getProperty("akey"), equalTo((Object)"avalue")); }
@Test public void normalWithPeriod() { envMap.put("a.key", "a.value"); assertThat(ps.containsProperty("a.key"), equalTo(true)); assertThat(ps.getProperty("a.key"), equalTo((Object)"a.value")); }
@Test public void none() { assertThat(ps.containsProperty("a.key"), equalTo(false)); assertThat(ps.getProperty("a.key"), equalTo(null)); }
@Test public void withLocationAndGeneratedNameAndExplicitClassLoader() throws IOException { PropertySource<?> ps = new ResourcePropertySource(PROPERTIES_LOCATION, getClass().getClassLoader()); assertEquals("bar", ps.getProperty("foo")); assertThat(ps.getName(), is(PROPERTIES_RESOURCE_DESCRIPTION)); }
@Test public void withLocationAndExplicitNameAndExplicitClassLoader() throws IOException { PropertySource<?> ps = new ResourcePropertySource("ps1", PROPERTIES_LOCATION, getClass().getClassLoader()); assertEquals("bar", ps.getProperty("foo")); assertThat(ps.getName(), is("ps1")); }
@Test public void withResourceAndGeneratedName() throws IOException { PropertySource<?> ps = new ResourcePropertySource(new ClassPathResource(PROPERTIES_PATH)); assertEquals("bar", ps.getProperty("foo")); assertThat(ps.getName(), is(PROPERTIES_RESOURCE_DESCRIPTION)); }
@Test public void withResourceAndExplicitName() throws IOException { PropertySource<?> ps = new ResourcePropertySource("ps1", new ClassPathResource(PROPERTIES_PATH)); assertEquals("bar", ps.getProperty("foo")); assertThat(ps.getName(), is("ps1")); }
@Test public void withNoArgs() { PropertySource<?> ps = new SimpleCommandLinePropertySource(); assertThat(ps.containsProperty("foo"), is(false)); assertThat(ps.getProperty("foo"), nullValue()); }
@Test public void withNoArg() { OptionParser parser = new OptionParser(); parser.accepts("o1"); parser.accepts("o2"); OptionSet options = parser.parse("--o1"); PropertySource<?> ps = new JOptCommandLinePropertySource(options); assertThat(ps.containsProperty("o1"), is(true)); assertThat(ps.containsProperty("o2"), is(false)); assertThat((String)ps.getProperty("o1"), equalTo("")); assertThat(ps.getProperty("o2"), nullValue()); }
@Test public void withLocationAndGeneratedName() throws IOException { PropertySource<?> ps = new ResourcePropertySource(PROPERTIES_LOCATION); assertEquals("bar", ps.getProperty("foo")); assertThat(ps.getName(), is(PROPERTIES_RESOURCE_DESCRIPTION)); }
@Test public void withLocationAndExplicitName() throws IOException { PropertySource<?> ps = new ResourcePropertySource("ps1", PROPERTIES_LOCATION); assertEquals("bar", ps.getProperty("foo")); assertThat(ps.getName(), is("ps1")); }
@Test public void withOptionalArg_andArgIsMissing() { OptionParser parser = new OptionParser(); parser.accepts("foo").withOptionalArg(); OptionSet options = parser.parse("--foo"); PropertySource<?> ps = new JOptCommandLinePropertySource(options); assertThat(ps.containsProperty("foo"), is(true)); assertThat((String)ps.getProperty("foo"), equalTo("")); }
@Test public void withResourceHavingNoDescription() throws IOException { PropertySource<?> ps = new ResourcePropertySource(new ByteArrayResource("foo=bar".getBytes(), "")); assertEquals("bar", ps.getProperty("foo")); assertEquals("Byte array resource []", ps.getName()); }
@Test public void withRequiredArg_andArgIsPresent() { OptionParser parser = new OptionParser(); parser.accepts("foo").withRequiredArg(); OptionSet options = parser.parse("--foo=bar"); PropertySource<?> ps = new JOptCommandLinePropertySource(options); assertThat((String)ps.getProperty("foo"), equalTo("bar")); }
@Test public void withMissingOption() { OptionParser parser = new OptionParser(); parser.accepts("foo").withRequiredArg().withValuesSeparatedBy(','); OptionSet options = parser.parse(); // <-- no options whatsoever PropertySource<?> ps = new JOptCommandLinePropertySource(options); assertThat(ps.getProperty("foo"), nullValue()); }
@Test public void withRequiredArg_ofTypeEnum() { OptionParser parser = new OptionParser(); parser.accepts("o1").withRequiredArg().ofType(OptionEnum.class); OptionSet options = parser.parse("--o1=VAL_1"); PropertySource<?> ps = new JOptCommandLinePropertySource(options); assertThat(ps.getProperty("o1"), equalTo("VAL_1")); }