You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streams.apache.org by mf...@apache.org on 2014/04/01 05:31:08 UTC

[2/3] git commit: Added unit tests and fixed bugs

Added unit tests and fixed bugs


Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/41a04f9c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/41a04f9c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/41a04f9c

Branch: refs/heads/springcleaning
Commit: 41a04f9c1e07ab83fe79a84b78e05a638d34ee03
Parents: 361fea9
Author: mfranklin <mf...@apache.org>
Authored: Mon Mar 31 23:24:51 2014 -0400
Committer: mfranklin <mf...@apache.org>
Committed: Mon Mar 31 23:24:51 2014 -0400

----------------------------------------------------------------------
 .../apache/streams/data/util/RFC3339Utils.java  | 33 +++++++++++++-------
 .../data/data/util/RFC3339UtilsTest.java        | 29 ++++++++++++++++-
 2 files changed, 50 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/41a04f9c/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java b/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
index 9b8339e..daf73a6 100644
--- a/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
+++ b/streams-pojo/src/main/java/org/apache/streams/data/util/RFC3339Utils.java
@@ -23,6 +23,7 @@ import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 
 import java.util.Locale;
+import java.util.TimeZone;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -43,14 +44,16 @@ public class RFC3339Utils {
 
     private static final String BASE_FMT = "yyyy-MM-dd'T'HH:mm:ss";
     private static final DateTimeFormatter UTC_STANDARD_FMT = DateTimeFormat.forPattern(BASE_FMT + "'Z'").withZoneUTC();
+    private static final DateTimeFormatter UTC_SUB_SECOND_FMT = DateTimeFormat.forPattern(BASE_FMT + ".SSS'Z'").withZoneUTC();
     private static final DateTimeFormatter LOCAL_STANDARD_FMT = DateTimeFormat.forPattern(BASE_FMT + "Z").withZoneUTC();
+    private static final DateTimeFormatter LOCAL_SUB_SECOND_FMT = DateTimeFormat.forPattern(BASE_FMT + ".SSSZ").withZoneUTC();
 
 
     private RFC3339Utils() {}
 
     public static DateTime parseUTC(String toParse) {
         if(MILLIS.matcher(toParse).matches()) {
-            return new DateTime(Long.valueOf(toParse));
+            return new DateTime(Long.valueOf(toParse), DateTimeZone.UTC);
         }
         if(UTC_STANDARD.matcher(toParse).matches()) {
             return parseUTC(UTC_STANDARD_FMT, toParse);
@@ -70,11 +73,11 @@ public class RFC3339Utils {
     }
 
     public static String format(DateTime toFormat) {
-        return UTC_STANDARD_FMT.print(toFormat.getMillis());
+        return UTC_SUB_SECOND_FMT.print(toFormat.getMillis());
     }
 
-    public static String format(DateTime toFormat, Locale locale) {
-        return LOCAL_STANDARD_FMT.withLocale(locale).print(toFormat.getMillis());
+    public static String format(DateTime toFormat, TimeZone tz) {
+        return LOCAL_SUB_SECOND_FMT.withZone(DateTimeZone.forTimeZone(tz)).print(toFormat.getMillis());
     }
 
     private static DateTime parseUTC(DateTimeFormatter formatter, String toParse) {
@@ -82,13 +85,21 @@ public class RFC3339Utils {
     }
 
     private static DateTimeFormatter getSubSecondFormat(String sub, String suffix) {
-        StringBuilder pattern = new StringBuilder();
-        pattern.append(BASE_FMT);
-        pattern.append(".");
-        for(int i=0; i<sub.length(); i++) {
-            pattern.append("S");
+        DateTimeFormatter result;
+        //Since RFC3339 allows for any number of sub-second notations, we need to flexibly support more or less than 3
+        //digits; however, if it is exactly 3, just use the standards.
+        if(sub.length() == 3) {
+            result = suffix.equals("Z") ? LOCAL_SUB_SECOND_FMT : UTC_SUB_SECOND_FMT;
+        } else {
+            StringBuilder pattern = new StringBuilder();
+            pattern.append(BASE_FMT);
+            pattern.append(".");
+            for (int i = 0; i < sub.length(); i++) {
+                pattern.append("S");
+            }
+            pattern.append(suffix);
+            result = DateTimeFormat.forPattern(pattern.toString()).withZoneUTC();
         }
-        pattern.append(suffix);
-        return DateTimeFormat.forPattern(pattern.toString()).withZoneUTC();
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/41a04f9c/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java b/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java
index 0471d2b..1cf790a 100644
--- a/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java
+++ b/streams-pojo/src/test/java/org/apache/streams/data/data/util/RFC3339UtilsTest.java
@@ -19,8 +19,13 @@ package org.apache.streams.data.data.util;
 
 
 import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
 import org.junit.Test;
 
+import java.util.Locale;
+import java.util.TimeZone;
+
+import static org.apache.streams.data.util.RFC3339Utils.format;
 import static org.apache.streams.data.util.RFC3339Utils.parseUTC;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
@@ -142,6 +147,28 @@ public class RFC3339UtilsTest {
         assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
         assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
         assertThat(parsed.millisOfSecond().get(), is(equalTo(734)));
-        System.out.println(parsed.getMillis());
+    }
+
+    @Test
+    public void validLong() {
+        DateTime parsed = parseUTC("1419505200734");
+        assertThat(parsed.minuteOfHour().get(), is(equalTo(0)));
+        assertThat(parsed.hourOfDay().get(), is(equalTo(11)));
+        assertThat(parsed.dayOfMonth().get(), is(equalTo(25)));
+        assertThat(parsed.monthOfYear().get(), is(equalTo(12)));
+        assertThat(parsed.millisOfSecond().get(), is(equalTo(734)));
+    }
+
+    @Test
+    public void validFormatUTC() {
+        DateTime parsed = new DateTime(1419505200734L);
+        assertThat(format(parsed), is(equalTo("2014-12-25T11:00:00.734Z")));
+    }
+
+    @Test
+    public void validFormat() {
+        TimeZone cet = TimeZone.getTimeZone("CET");
+        DateTime parsed = new DateTime(1419505200734L);
+        assertThat(format(parsed, cet), is(equalTo("2014-12-25T12:00:00.734+0100")));
     }
 }