You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by gk...@apache.org on 2017/07/19 13:44:44 UTC

svn commit: r1802394 - /turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java

Author: gk
Date: Wed Jul 19 13:44:44 2017
New Revision: 1802394

URL: http://svn.apache.org/viewvc?rev=1802394&view=rev
Log:
- check robustness of test
- show more date/time/zone use cases/pitfalls in test

Modified:
    turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java

Modified: turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java?rev=1802394&r1=1802393&r2=1802394&view=diff
==============================================================================
--- turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java (original)
+++ turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/JacksonMapperEnabledDefaultTyping_OBJECT_AND_NON_CONCRETE_Test.java Wed Jul 19 13:44:44 2017
@@ -22,6 +22,7 @@ package org.apache.fulcrum.json.jackson;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
@@ -90,64 +91,98 @@ public class JacksonMapperEnabledDefault
                 "Serialize with Adapater failed ",
                 serJson.matches(".*\"java.util.Date\",\"\\d\\d/\\d\\d/\\d{4}\".*"));
     }
-    //  no day time
     @Test
-    public void testDeSerializeDate() throws Exception {
+    public void testSerializeDeSerializeDate() throws Exception {
         Map<String, Date> map = new HashMap<String, Date>();
         Calendar sourceDate = Calendar.getInstance();
         sourceDate.set(1999, 3, 10);
-        sourceDate.set(Calendar.HOUR, 0);
-        sourceDate.set(Calendar.MINUTE, 0);
-        sourceDate.set(Calendar.SECOND, 0);
-        sourceDate.set(Calendar.MILLISECOND, 0);
-        sourceDate.set(Calendar.HOUR_OF_DAY, 0);
-        logger.debug("sourceDate TZ:"+ sourceDate.getTimeZone().getID());
+        
 //        logger.debug("sourceDate calendar:"+ sourceDate);
         logger.debug("sourceDate date:"+ sourceDate.getTime());
         logger.debug("sourceDate millisec:"+ sourceDate.getTime().getTime());
         map.put("mydate",sourceDate.getTime());
-        // default dateformat dd/mm/yy -> day time will be cut off !(hh, mm,)
+        map.put("mydate2",Calendar.getInstance().getTime());
+        // default dateformat dd/mm/yy -> day time will be cut off !(hh, mm)
+        // first serialize
         String serJson0 =  sc.ser(map, false);
         String serJson =  sc.ser(map, Map.class, false);
         
         logger.debug("serJson:"+ serJson0);
         assertEquals(serJson0, serJson);
-        
+         //second deserialize 
         DateKeyMixin serObject =sc.deSer(serJson0, DateKeyMixin.class);
         assertTrue(serObject.mydate instanceof Date);
         
-        logger.debug("resultDate millisec: " + ((Date)serObject.mydate).getTime() +" source:"+ sourceDate.getTime().getTime() );        
-        assertTrue("resultDate not equal not sourceDate millisec: ",((Date)serObject.mydate).getTime() == sourceDate.getTime().getTime() );
+        logger.debug("resultDate millisec: " + ((Date)serObject.mydate).getTime() +" source:"+ sourceDate.getTime().getTime() );
+        // cleanup all values the mapper dateformat, which is MM/dd/yyyy, does not contain.
+        sourceDate.set(Calendar.HOUR, 0);
+        sourceDate.set(Calendar.MINUTE, 0);
+        sourceDate.set(Calendar.SECOND, 0);
+        sourceDate.set(Calendar.MILLISECOND, 0);
+        sourceDate.set(Calendar.HOUR_OF_DAY, 0);
+        assertEquals("millisec of result and source date should be equal, after zeroing not used formatter values:: ",
+                ((Date)serObject.mydate).getTime(),sourceDate.getTime().getTime() );
     }
-    // timezone
+    // all values represented in format of the object, which would be serialized are conserved, while the others are nulled   
     @Test
-    public void testDeSerializeTZDate() throws Exception {
+    public void testSerializeDeSerializeTZDate() throws Exception {
         Map<String, Date> map = new HashMap<String, Date>();
         Calendar sourceDate = Calendar.getInstance(TimeZone.getTimeZone("America/Montreal"));// UTC -5
         sourceDate.set(1999, 3, 10, 11, 10); // set in Montreal Time this date and time
-        sourceDate.set(Calendar.SECOND, 0);
-        sourceDate.set(Calendar.MILLISECOND, 0);
         
+        //this may be in "any" locale timezone, eg. 1999-04-10 17:10 PM MESZ
+        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm a Z");
         // shows date and time in locale time
-        //logger.debug("sourceDate millisec:"+ sourceDate.getTime().getTime());
+        logger.debug("sourceDate string:"+ sourceDate.getTime());
+        logger.debug("sourceDate format:"+df.format(sourceDate.getTime()));
         
         // any "timezone" information is lost from the Calendar when converting it  into a java.util.Date by calling getTime()
         map.put("mydate",sourceDate.getTime());
         
-        sc.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm a z"));
+        sc.setDateFormat(df);
         
         String serJson0 =  sc.ser(map, false);
         String serJson =  sc.ser(map, Map.class, false);
         
-        //this may be in "any" locale timezone, eg. 1999-04-10 17:10 PM MESZ
         logger.debug("serJson:"+ serJson0);
         assertEquals(serJson0, serJson);
         
-        DateKeyMixin serObject =sc.deSer(serJson0, DateKeyMixin.class);
+        DateKeyMixin serObject =sc.deSer(serJson0
+                , DateKeyMixin.class);
+        logger.debug("resultDate (serialized) millisec: " +
+                ((Date)serObject.mydate).getTime() +" source:"+ sourceDate.getTime().getTime() );
+
+        logger.debug("may not be equal: millisec(resultDate(string)):" + ((Date)serObject.mydate).getTime() + 
+                " millisec(sourceDate):"+ sourceDate.getTime().getTime() );
+        // cleanup all values the mapper dateformat does not contain.
+        sourceDate.set(Calendar.SECOND, 0);
+        sourceDate.set(Calendar.MILLISECOND, 0);
+        assertEquals("milliseconds of resultDate (serialized) should be equal, if properly set the: ",
+                ((Date)serObject.mydate).getTime(),sourceDate.getTime().getTime() );
+        
+    }
+    // timezone handling example
+    @Test
+    public void testDeSerializeTZDate() throws Exception { 
+        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm a Z");
+        sc.setDateFormat(df);
+        DateKeyMixin serObject =sc.deSer(  "{\"mydate\":[\"java.util.Date\",\"1999-04-10 10:10 PM -0500\"]}"
+                , DateKeyMixin.class);
         assertTrue(serObject.mydate instanceof Date);
-
-        logger.debug("resultDate millisec: " + ((Date)serObject.mydate).getTime() +" source:"+ sourceDate.getTime().getTime() );        
-        assertTrue("resultDate not equal not sourceDate millisec: ",((Date)serObject.mydate).getTime() == sourceDate.getTime().getTime() );
+        
+        // compare object
+        Calendar compareDate = Calendar.getInstance(TimeZone.getTimeZone("America/Montreal"));// UTC -5
+        compareDate.set(1999, 3, 10, 11, 10);
+        
+        String compareDateFormatted =  df.format(compareDate.getTime());
+        logger.debug("compareDate format: " + compareDateFormatted );
+        logger.debug("may not be equal: millisec(resultDate(string)):" + ((Date)serObject.mydate).getTime() + 
+                " millisec(sourceDate):"+ compareDate.getTime().getTime() );
+        
+        assertEquals("format should be equal",  compareDateFormatted,
+                        df.format(((Date)serObject.mydate).getTime())
+                        );
+        logger.debug("format in locale timezone (resultDate(string)):" + df.format(((Date)serObject.mydate).getTime()));
     }
     @Test
     public void testSerializeWithCustomFilter() throws Exception {