Repository: incubator-tamaya-sandbox
Updated Branches:
  refs/heads/master 041f59985 -> 6fa2b34a7


TAMAYA-72; Added converter for jodatime Duration.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/6fa2b34a
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/6fa2b34a
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/6fa2b34a

Branch: refs/heads/master
Commit: 6fa2b34a79143942757d89fe731f059c79a6a72f
Parents: 041f599
Author: anatole <anat...@apache.org>
Authored: Mon Oct 31 00:21:55 2016 +0100
Committer: anatole <anat...@apache.org>
Committed: Mon Oct 31 00:21:55 2016 +0100

----------------------------------------------------------------------
 .../apache/tamaya/jodatime/PeriodConverter.java |  4 +
 .../org.apache.tamaya.spi.PropertyConverter     |  1 +
 .../tamaya/jodatime/DurationConverterTest.java  | 81 ++++++++++++++++++++
 3 files changed, 86 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/6fa2b34a/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
----------------------------------------------------------------------
diff --git 
a/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java 
b/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
index a350d58..2b946e2 100644
--- a/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
+++ b/jodatime/src/main/java/org/apache/tamaya/jodatime/PeriodConverter.java
@@ -84,6 +84,10 @@ public class PeriodConverter implements 
PropertyConverter<org.joda.time.Period>
     }
 
     private void addSupportedFormats(ConversionContext context) {
+        if(context==null){
+            // use case when called internally from DurationConverter.
+            return;
+        }
         context.addSupportedFormats(PeriodConverter.class, "PyYmMwWdDThHmMsS");
         context.addSupportedFormats(PeriodConverter.class, 
"Pyyyy-mm-ddThh:mm:ss");
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/6fa2b34a/jodatime/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
----------------------------------------------------------------------
diff --git 
a/jodatime/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
 
b/jodatime/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
index f312e9d..13c48c5 100644
--- 
a/jodatime/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
+++ 
b/jodatime/src/main/resources/META-INF/services/org.apache.tamaya.spi.PropertyConverter
@@ -19,3 +19,4 @@
 org.apache.tamaya.jodatime.DateTimeConverter
 org.apache.tamaya.jodatime.DateTimeZoneConverter
 org.apache.tamaya.jodatime.PeriodConverter
+org.apache.tamaya.jodatime.DurationConverter

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/6fa2b34a/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
----------------------------------------------------------------------
diff --git 
a/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java 
b/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
index f1141a6..39cf41b 100644
--- 
a/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
+++ 
b/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
@@ -18,5 +18,86 @@
  */
 package org.apache.tamaya.jodatime;
 
+import org.apache.tamaya.TypeLiteral;
+import org.apache.tamaya.spi.ConversionContext;
+import org.joda.time.Duration;
+import org.joda.time.format.ISOPeriodFormat;
+import org.joda.time.format.PeriodFormatter;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.hasSize;
+
 public class DurationConverterTest {
+
+    /*
+     * I am aware of the 'Parameterized tests' feature of JUnit but
+     * decided not to use it. Oliver B. Fischer, 3th April 2015
+     */
+
+    private static DurationConverter converter = new DurationConverter();
+
+    private static PeriodFormatter FORMATTER = ISOPeriodFormat.standard();
+
+    @Test
+    public void canConvertPropertiesInAllSupportedFormats() {
+        Object[][] inputResultPairs = {
+                // Duration format
+                {"PT72.345S", Duration.parse("PT72.345S")},
+                // ISO format
+                {"P1D", 
FORMATTER.parsePeriod("P1DT0H0M0S").toStandardDuration()},
+                {"PT1S", 
FORMATTER.parsePeriod("P0DT0H0M1S").toStandardDuration()},
+
+                // Alternative format
+                {"00T00:00:05", 
FORMATTER.parsePeriod("P0DT0H0M5S").toStandardDuration()},
+
+        };
+
+        ConversionContext context = Mockito.mock(ConversionContext.class);
+
+        for (Object[] pair : inputResultPairs) {
+            Duration duration = converter.convert((String) pair[0], context);
+
+            assertThat("Converter failed to convert input value " + pair[0], 
duration, notNullValue());
+            assertThat(duration, equalTo((Duration) pair[1]));
+        }
+    }
+
+    @Test
+    public void invalidInputValuesResultInReturningNull() {
+        String[] inputValues = {
+                "01-03T00:00:05",
+                "00:00:05",
+                "000011215",
+                "-",
+                "fooBar",
+        };
+
+        ConversionContext context = Mockito.mock(ConversionContext.class);
+
+        for (String input : inputValues) {
+            Duration duration = converter.convert(input, context);
+
+            assertThat(duration, nullValue());
+        }
+    }
+
+    @Test
+    public void allSupportedFormatsAreAddedToTheConversionContext() {
+        String name = DurationConverter.class.getSimpleName();
+
+        ConversionContext context = new 
ConversionContext.Builder(TypeLiteral.of(Duration.class)).build();
+
+        converter.convert("P0DT0H0M0S", context);
+
+        assertThat(context.getSupportedFormats(), hasSize(3));
+        assertThat(context.getSupportedFormats(), hasItem("PdDThHmMsS (" + 
name + ")"));
+        assertThat(context.getSupportedFormats(), hasItem("ddThh:mm:ss (" + 
name + ")"));
+        assertThat(context.getSupportedFormats(), hasItem("PTa.bS 
("+name+")"));
+    }
 }

Reply via email to