@Test
 public void testGetPropertyAsBooleanExists() {
   final Configuration configuration = TestConfiguration.create("foo", "false");
   final Optional<Boolean> value = configuration.getPropertyAsBoolean("foo");
   Assert.assertTrue(value.isPresent());
   Assert.assertFalse(value.get());
 }
 @Test
 public void testGetPropertyAsShortExists() {
   final Configuration configuration = TestConfiguration.create("foo", "1");
   final Optional<Short> value = configuration.getPropertyAsShort("foo");
   Assert.assertTrue(value.isPresent());
   Assert.assertEquals(1, value.get().shortValue());
 }
 @Test
 public void testGetPropertyAsDoubleExists() {
   final Configuration configuration = TestConfiguration.create("foo", "1.23");
   final Optional<Double> value = configuration.getPropertyAsDouble("foo");
   Assert.assertTrue(value.isPresent());
   Assert.assertEquals(1.23d, value.get(), 0.001);
 }
 @Test
 public void testGetPropertyAsLongExists() {
   final Configuration configuration = TestConfiguration.create("foo", "1");
   final Optional<Long> value = configuration.getPropertyAsLong("foo");
   Assert.assertTrue(value.isPresent());
   Assert.assertEquals(1L, value.get().longValue());
 }
 @Test
 public void testGetRequiredAsExists() {
   final Configuration configuration = TestConfiguration.create("foo", "bar");
   @SuppressWarnings("unchecked")
   final Map<String, String> value = (Map<String, String>) configuration.getRequiredAs(Map.class);
   Assert.assertEquals(1, value.size());
   Assert.assertEquals("bar", value.get("foo"));
 }
 @Test(expected = IllegalArgumentException.class)
 public void testGetAsInvalid() {
   final Configuration configuration = TestConfiguration.create();
   configuration.getAs(String.class, Collections.emptyMap());
 }
 @Test(expected = IllegalArgumentException.class)
 public void testGetRequiredPropertyAsInvalid() {
   final Configuration configuration = TestConfiguration.create("foo", "bar");
   configuration.getRequiredPropertyAs("foo", Map.class);
 }
 @Test(expected = NoSuchElementException.class)
 public void testGetRequiredPropertyAsMissing() {
   final Configuration configuration = TestConfiguration.create();
   configuration.getRequiredPropertyAs("foo", String.class);
 }
 @Test(expected = NumberFormatException.class)
 public void testGetPropertyAsIntegerInvalid() {
   final Configuration configuration = TestConfiguration.create("foo", "ABC");
   configuration.getPropertyAsInteger("foo");
 }
 @Test(expected = NoSuchElementException.class)
 public void testGetRequiredPropertyAsBooleanMissing() {
   TestConfiguration.create().getRequiredPropertyAsBoolean("foo");
 }
 @Test(expected = IllegalArgumentException.class)
 public void testGetRequiredAsInvalid() {
   final Configuration configuration = TestConfiguration.create();
   configuration.getRequiredAs(String.class);
 }
 @Test
 public void testGetPropertyAsDoubleWithDefaultMissing() {
   final Configuration configuration = TestConfiguration.create();
   final double value = configuration.getPropertyAsDouble("foo", 2.46d);
   Assert.assertEquals(2.46d, value, 0.001);
 }
 @Test
 public void testGetPropertyWithDefaultExists() {
   final Configuration configuration = TestConfiguration.create("foo", "bar");
   final String value = configuration.getProperty("foo", "default");
   Assert.assertEquals("bar", value);
 }
 @Test
 public void testGetPropertyAsFloatWithDefaultMissing() {
   final Configuration configuration = TestConfiguration.create();
   final float value = configuration.getPropertyAsFloat("foo", 2.46f);
   Assert.assertEquals(2.46f, value, 0.001);
 }
 @Test
 public void testGetPropertyAsFloatWithDefaultExists() {
   final Configuration configuration = TestConfiguration.create("foo", "1.23");
   final float value = configuration.getPropertyAsFloat("foo", 2.46f);
   Assert.assertEquals(1.23f, value, 0.001);
 }
 @Test
 public void testGetRequiredPropertyAsLongExists() {
   final Configuration configuration = TestConfiguration.create("foo", "1");
   final long value = configuration.getRequiredPropertyAsLong("foo");
   Assert.assertEquals(1, value);
 }
 @Test
 public void testGetPropertyAsLongWithDefaultMissing() {
   final Configuration configuration = TestConfiguration.create();
   final long value = configuration.getPropertyAsLong("foo", 2);
   Assert.assertEquals(2, value);
 }
 @Test
 public void testGetPropertyAsBooleanMissing() {
   final Configuration configuration = TestConfiguration.create();
   final Optional<Boolean> value = configuration.getPropertyAsBoolean("foo");
   Assert.assertFalse(value.isPresent());
 }
 @Test
 public void testGetRequiredPropertyExists() {
   final Configuration configuration = TestConfiguration.create("foo", "bar");
   final String value = configuration.getRequiredProperty("foo");
   Assert.assertEquals("bar", value);
 }
 @Test
 public void testGetPropertyAsBooleanWithDefaultMissing() {
   final Configuration configuration = TestConfiguration.create();
   final boolean value = configuration.getPropertyAsBoolean("foo", true);
   Assert.assertTrue(value);
 }
 @Test(expected = NumberFormatException.class)
 public void testGetPropertyAsDoubleWithDefaultInvalid() {
   final Configuration configuration = TestConfiguration.create("foo", "ABC");
   configuration.getPropertyAsDouble("foo", 2.46d);
 }
 @Test
 public void testGetPropertyAsIntegerWithDefaultExists() {
   final Configuration configuration = TestConfiguration.create("foo", "1");
   final int value = configuration.getPropertyAsInteger("foo", 2);
   Assert.assertEquals(1, value);
 }
 @Test
 public void testGetPropertyAsBooleanWithDefaultExists() {
   final Configuration configuration = TestConfiguration.create("foo", "false");
   final boolean value = configuration.getPropertyAsBoolean("foo", true);
   Assert.assertFalse(value);
 }
 @Test
 public void testGetRequiredPropertyAsDoubleExists() {
   final Configuration configuration = TestConfiguration.create("foo", "1.23");
   final double value = configuration.getRequiredPropertyAsDouble("foo");
   Assert.assertEquals(1.23d, value, 0.001);
 }
 @Test
 public void testGetRequiredPropertyAsBooleanExists() {
   final Configuration configuration = TestConfiguration.create("foo", "false");
   final boolean value = configuration.getRequiredPropertyAsBoolean("foo");
   Assert.assertFalse(value);
 }
 @Test(expected = NumberFormatException.class)
 public void testGetRequiredPropertyAsDoubleInvalid() {
   final Configuration configuration = TestConfiguration.create("foo", "ABC");
   configuration.getRequiredPropertyAsDouble("foo");
 }
 @Test
 public void testGetPropertyAsMissing() {
   final Configuration configuration = TestConfiguration.create();
   final String value = configuration.getPropertyAs("foo", String.class, "default");
   Assert.assertEquals("default", value);
 }
 @Test
 public void testGetPropertyAsShortWithDefaultMissing() {
   final Configuration configuration = TestConfiguration.create();
   final short value = configuration.getPropertyAsShort("foo", (short) 2);
   Assert.assertEquals(2, value);
 }