From c28f3efb027fabd21b5ccae209af03125dfe3cd3 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Mon, 22 Apr 2013 16:16:49 +0000
Subject: [PATCH] One liner + tests: GeneralizedTime does not account for daylight savings when converting Calendar to String.

---
 opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/GeneralizedTimeTest.java |  133 +++++++++++++++++++++++++++-----------------
 opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/GeneralizedTime.java     |    2 
 2 files changed, 82 insertions(+), 53 deletions(-)

diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/GeneralizedTime.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/GeneralizedTime.java
index aaa871d..8e01541 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/GeneralizedTime.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/GeneralizedTime.java
@@ -1342,7 +1342,7 @@
             }
 
             // Format the timezone.
-            n = tmpCalendar.get(Calendar.ZONE_OFFSET); /* ms */
+            n = tmpCalendar.get(Calendar.ZONE_OFFSET) + tmpCalendar.get(Calendar.DST_OFFSET);
             if (n == 0) {
                 sb.append('Z');
             } else {
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/GeneralizedTimeTest.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/GeneralizedTimeTest.java
index 19628a4..a08aeef 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/GeneralizedTimeTest.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/GeneralizedTimeTest.java
@@ -22,17 +22,20 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions copyright 2012 ForgeRock AS.
+ *      Portions copyright 2012-2013 ForgeRock AS.
  */
 package org.forgerock.opendj.ldap;
 
+import static org.fest.assertions.Assertions.assertThat;
+
 import java.util.Calendar;
 import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
 
 import org.forgerock.i18n.LocalizedIllegalArgumentException;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
-import static org.fest.assertions.Assertions.assertThat;
 
 /**
  * Generalized time tests.
@@ -41,10 +44,29 @@
 public class GeneralizedTimeTest extends SdkTestCase {
 
     @DataProvider
-    public Object[][] validStrings() {
-        return new Object[][] { { "2006090613Z" }, { "20060906135030+01" }, { "200609061350Z" },
-            { "20060906135030Z" }, { "20061116135030Z" }, { "20061126135030Z" },
-            { "20061231235959Z" }, { "20060906135030+0101" }, { "20060906135030+2359" }, };
+    public Object[][] calendars() {
+        // Test time zone.
+        final GregorianCalendar europeWinter = new GregorianCalendar();
+        europeWinter.setLenient(false);
+        europeWinter.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
+        europeWinter.set(2013, 0, 1, 13, 0, 0);
+        europeWinter.set(Calendar.MILLISECOND, 0);
+
+        // Test daylight savings.
+        final GregorianCalendar europeSummer = new GregorianCalendar();
+        europeSummer.setLenient(false);
+        europeSummer.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
+        europeSummer.set(2013, 5, 1, 13, 0, 0);
+        europeSummer.set(Calendar.MILLISECOND, 0);
+
+        return new Object[][] { { europeWinter }, { europeSummer } };
+    }
+
+    @Test(dataProvider = "calendars")
+    public void fromToCalendary(final Calendar calendar) {
+        final String s1 = GeneralizedTime.valueOf(calendar).toString();
+        final Calendar reparsed1 = GeneralizedTime.valueOf(s1).toCalendar();
+        assertThat(reparsed1.getTimeInMillis()).isEqualTo(calendar.getTimeInMillis());
     }
 
     @DataProvider
@@ -58,75 +80,82 @@
             { "20061231#35959Z" }, { "2006" }, };
     }
 
-    @Test(expectedExceptions = { LocalizedIllegalArgumentException.class },
-            dataProvider = "invalidStrings")
-    public void testValueOfInvalidString(String s) {
-        GeneralizedTime.valueOf(s);
-    }
-
-    @Test(dataProvider = "validStrings")
-    public void testValueOfValidString(String s) {
-        assertThat(GeneralizedTime.valueOf(s).toString()).isEqualTo(s);
+    @Test
+    public void testCompareEquals() {
+        final GeneralizedTime gt1 = GeneralizedTime.valueOf("20060906135030+01");
+        final GeneralizedTime gt2 = GeneralizedTime.valueOf("20060906125030Z");
+        assertThat(gt1.compareTo(gt2)).isEqualTo(0);
     }
 
     @Test
-    public void testValueOfLong() {
-        Date date = new Date();
-        GeneralizedTime time = GeneralizedTime.valueOf(date.getTime());
-        assertThat(time.getTimeInMillis()).isEqualTo(date.getTime());
-        assertThat(time.toDate()).isEqualTo(date);
+    public void testCompareGreaterThan() {
+        final GeneralizedTime gt1 = GeneralizedTime.valueOf("20060906135030Z");
+        final GeneralizedTime gt2 = GeneralizedTime.valueOf("20060906135030+01");
+        assertThat(gt1.compareTo(gt2) > 0).isTrue();
     }
 
     @Test
-    public void testValueOfDate() {
-        Date date = new Date();
-        GeneralizedTime time = GeneralizedTime.valueOf(date);
-        assertThat(time.getTimeInMillis()).isEqualTo(date.getTime());
-        assertThat(time.toDate()).isEqualTo(date);
+    public void testCompareLessThan() {
+        final GeneralizedTime gt1 = GeneralizedTime.valueOf("20060906135030+01");
+        final GeneralizedTime gt2 = GeneralizedTime.valueOf("20060906135030Z");
+        assertThat(gt1.compareTo(gt2) < 0).isTrue();
+    }
+
+    @Test
+    public void testEqualsFalse() {
+        final GeneralizedTime gt1 = GeneralizedTime.valueOf("20060906135030Z");
+        final GeneralizedTime gt2 = GeneralizedTime.valueOf("20060906135030+01");
+        assertThat(gt1).isNotEqualTo(gt2);
+    }
+
+    @Test
+    public void testEqualsTrue() {
+        final GeneralizedTime gt1 = GeneralizedTime.valueOf("20060906135030+01");
+        final GeneralizedTime gt2 = GeneralizedTime.valueOf("20060906125030Z");
+        assertThat(gt1).isEqualTo(gt2);
     }
 
     @Test
     public void testValueOfCalendar() {
-        Calendar calendar = Calendar.getInstance();
-        GeneralizedTime time = GeneralizedTime.valueOf(calendar);
+        final Calendar calendar = Calendar.getInstance();
+        final GeneralizedTime time = GeneralizedTime.valueOf(calendar);
         assertThat(time.getTimeInMillis()).isEqualTo(calendar.getTimeInMillis());
         assertThat(time.toCalendar()).isEqualTo(calendar);
         assertThat(time.toDate()).isEqualTo(calendar.getTime());
     }
 
     @Test
-    public void testEqualsTrue() {
-        GeneralizedTime gt1 = GeneralizedTime.valueOf("20060906135030+01");
-        GeneralizedTime gt2 = GeneralizedTime.valueOf("20060906125030Z");
-        assertThat(gt1).isEqualTo(gt2);
+    public void testValueOfDate() {
+        final Date date = new Date();
+        final GeneralizedTime time = GeneralizedTime.valueOf(date);
+        assertThat(time.getTimeInMillis()).isEqualTo(date.getTime());
+        assertThat(time.toDate()).isEqualTo(date);
+    }
+
+    @Test(expectedExceptions = { LocalizedIllegalArgumentException.class },
+            dataProvider = "invalidStrings")
+    public void testValueOfInvalidString(final String s) {
+        GeneralizedTime.valueOf(s);
     }
 
     @Test
-    public void testEqualsFalse() {
-        GeneralizedTime gt1 = GeneralizedTime.valueOf("20060906135030Z");
-        GeneralizedTime gt2 = GeneralizedTime.valueOf("20060906135030+01");
-        assertThat(gt1).isNotEqualTo(gt2);
+    public void testValueOfLong() {
+        final Date date = new Date();
+        final GeneralizedTime time = GeneralizedTime.valueOf(date.getTime());
+        assertThat(time.getTimeInMillis()).isEqualTo(date.getTime());
+        assertThat(time.toDate()).isEqualTo(date);
     }
 
-    @Test
-    public void testCompareEquals() {
-        GeneralizedTime gt1 = GeneralizedTime.valueOf("20060906135030+01");
-        GeneralizedTime gt2 = GeneralizedTime.valueOf("20060906125030Z");
-        assertThat(gt1.compareTo(gt2)).isEqualTo(0);
+    @Test(dataProvider = "validStrings")
+    public void testValueOfValidString(final String s) {
+        assertThat(GeneralizedTime.valueOf(s).toString()).isEqualTo(s);
     }
 
-    @Test
-    public void testCompareLessThan() {
-        GeneralizedTime gt1 = GeneralizedTime.valueOf("20060906135030+01");
-        GeneralizedTime gt2 = GeneralizedTime.valueOf("20060906135030Z");
-        assertThat(gt1.compareTo(gt2) < 0).isTrue();
-    }
-
-    @Test
-    public void testCompareGreaterThan() {
-        GeneralizedTime gt1 = GeneralizedTime.valueOf("20060906135030Z");
-        GeneralizedTime gt2 = GeneralizedTime.valueOf("20060906135030+01");
-        assertThat(gt1.compareTo(gt2) > 0).isTrue();
+    @DataProvider
+    public Object[][] validStrings() {
+        return new Object[][] { { "2006090613Z" }, { "20060906135030+01" }, { "200609061350Z" },
+            { "20060906135030Z" }, { "20061116135030Z" }, { "20061126135030Z" },
+            { "20061231235959Z" }, { "20060906135030+0101" }, { "20060906135030+2359" }, };
     }
 
 }

--
Gitblit v1.10.0