Skip to content

Commit 47f994e

Browse files
author
Mohamed Bilal
committed
Updates to calendar serializer and added corresponding unit tests
1 parent 3847f9b commit 47f994e

File tree

2 files changed

+169
-3
lines changed

2 files changed

+169
-3
lines changed

src/main/java/com/microsoft/graph/serializer/CalendarSerializer.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ public static Calendar deserialize(final String strVal) throws ParseException {
5555
// that can be parsed in Java
5656
final boolean hasZ = strVal.indexOf('Z') != -1;
5757
final boolean hasDot = strVal.indexOf('.') != -1;
58-
58+
59+
5960
String modifiedStrVal;
6061
final String zSuffix;
6162
if (hasZ && hasDot) {
@@ -69,12 +70,16 @@ public static Calendar deserialize(final String strVal) throws ParseException {
6970
modifiedStrVal = strVal;
7071
}
7172

73+
final boolean hasOffset = modifiedStrVal.contains("T")
74+
? (modifiedStrVal.substring(modifiedStrVal.indexOf('T') + 1).contains("+"))
75+
|| (modifiedStrVal.substring(modifiedStrVal.indexOf('T') + 1).contains("-"))
76+
: false;
77+
7278
// Parse the well-formatted date string with and without offsets (eg: 2019-06-21T17:12:35.138, 2019-06-21T17:12:35.138+0000, 2019-06-21T17:12:35.138-07:00)
7379
final String datePattern;
7480
if (modifiedStrVal.contains(".")) {
7581

7682
String offsetSuffix = modifiedStrVal.substring(modifiedStrVal.indexOf(".") + 1);
77-
final boolean hasOffset = offsetSuffix.contains("+") || offsetSuffix.contains("-");
7883

7984
// Find index of offset
8085
int offsetIndex = -1;
@@ -104,8 +109,12 @@ public static Calendar deserialize(final String strVal) throws ParseException {
104109
datePattern = "yyyy-MM-dd'T'HH:mm:ss.SSS" + zSuffix;
105110
}
106111

112+
} else if (zSuffix != "") {
113+
datePattern = "yyyy-MM-dd'T'HH:mm:ss" + zSuffix;
114+
} else if (hasOffset){
115+
datePattern = "yyyy-MM-dd'T'HH:mm:ssX";
107116
} else {
108-
datePattern = "yyyy-MM-dd'T'HH:mm:ss" + zSuffix;
117+
datePattern = "yyyy-MM-dd'T'HH:mm:ss";
109118
}
110119

111120

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
package com.microsoft.graph.serializer;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNotNull;
5+
6+
import java.util.Calendar;
7+
import java.util.TimeZone;
8+
9+
import org.junit.Test;
10+
11+
/**
12+
* Test cases for calendar serialization and deserialization
13+
*
14+
* @author mobilal
15+
*
16+
*/
17+
public class CalendarSerializerTests {
18+
19+
@Test
20+
public void testDateSerialization() throws Exception {
21+
Calendar calendar = Calendar.getInstance();
22+
calendar.setTimeInMillis(1561162355000L);
23+
String expected = "2019-06-22T00:12:35.000Z";
24+
String actual = CalendarSerializer.serialize(calendar);
25+
assertNotNull(actual);
26+
assertEquals(expected, actual);
27+
}
28+
29+
@Test
30+
public void testSimpleDateTimeDeserialization() throws Exception {
31+
32+
String datetime = "2019-06-21T17:12:35";
33+
TimeZone defaultTimeZone = TimeZone.getDefault();
34+
35+
// Set timezone to UTC for testing
36+
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
37+
Calendar expected = java.util.Calendar.getInstance();
38+
expected.setTimeInMillis(1561137155000L);
39+
Calendar actual = CalendarSerializer.deserialize(datetime);
40+
assertNotNull(actual);
41+
assertEquals(expected.getTimeInMillis(), actual.getTimeInMillis());
42+
43+
// Reset timezone after testing
44+
TimeZone.setDefault(defaultTimeZone);
45+
}
46+
47+
@Test
48+
public void testUTCSimpleDateTimeDeserialization() throws Exception {
49+
String datetime = "2019-06-21T17:12:35Z";
50+
Calendar expected = java.util.Calendar.getInstance();
51+
expected.setTimeInMillis(1561137155000L);
52+
Calendar actual = CalendarSerializer.deserialize(datetime);
53+
assertNotNull(actual);
54+
assertEquals(expected.getTimeInMillis(), actual.getTimeInMillis());
55+
}
56+
57+
@Test
58+
public void testUTCDateTimeWithMillisDeserialization() throws Exception {
59+
String datetime = "2019-06-21T17:12:35.1385912Z";
60+
Calendar expected = java.util.Calendar.getInstance();
61+
expected.setTimeInMillis(1561137155138L);
62+
Calendar actual = CalendarSerializer.deserialize(datetime);
63+
assertNotNull(actual);
64+
assertEquals(expected.getTimeInMillis(), actual.getTimeInMillis());
65+
}
66+
67+
@Test
68+
public void testUTCDateTimeInOffsetFormatDeserialization() throws Exception {
69+
String datetime = "2019-06-21T17:12:35+00:00";
70+
Calendar expected = java.util.Calendar.getInstance();
71+
expected.setTimeInMillis(1561137155000L);
72+
Calendar actual = CalendarSerializer.deserialize(datetime);
73+
assertNotNull(actual);
74+
assertEquals(expected.getTimeInMillis(), actual.getTimeInMillis());
75+
}
76+
77+
@Test
78+
public void testUTCDateTimeWithMillisAndOffsetDeserialization() throws Exception {
79+
String datetime = "2019-06-21T17:12:35.1385912+00:00";
80+
Calendar expected = java.util.Calendar.getInstance();
81+
expected.setTimeInMillis(1561137155138L);
82+
Calendar actual = CalendarSerializer.deserialize(datetime);
83+
assertNotNull(actual);
84+
assertEquals(expected.getTimeInMillis(), actual.getTimeInMillis());
85+
}
86+
87+
@Test
88+
public void testUTCDateTimeInNonstandardOffsetFormatDeserialization() throws Exception {
89+
String datetime = "2019-06-21T17:12:35+0000";
90+
Calendar expected = java.util.Calendar.getInstance();
91+
expected.setTimeInMillis(1561137155000L);
92+
Calendar actual = CalendarSerializer.deserialize(datetime);
93+
assertNotNull(actual);
94+
assertEquals(expected.getTimeInMillis(), actual.getTimeInMillis());
95+
}
96+
97+
@Test
98+
public void testDateTimePositiveOffsetFormatDeserialization() throws Exception {
99+
String datetime = "2019-06-21T17:12:35+07:00";
100+
Calendar expected = java.util.Calendar.getInstance();
101+
expected.setTimeInMillis(1561111955000L);
102+
Calendar actual = CalendarSerializer.deserialize(datetime);
103+
assertNotNull(actual);
104+
assertEquals(expected.getTimeInMillis(), actual.getTimeInMillis());
105+
}
106+
107+
@Test
108+
public void testDateTimeWithMillisAndPositiveOffsetDeserialization() throws Exception {
109+
String datetime = "2019-06-21T17:12:35.1385912+07:00";
110+
Calendar expected = java.util.Calendar.getInstance();
111+
expected.setTimeInMillis(1561111955138L);
112+
Calendar actual = CalendarSerializer.deserialize(datetime);
113+
assertNotNull(actual);
114+
assertEquals(expected.getTimeInMillis(), actual.getTimeInMillis());
115+
}
116+
117+
@Test
118+
public void testUTCDateTimeInNonstandardPositiveOffsetFormatDeserialization() throws Exception {
119+
String datetime = "2019-06-21T17:12:35+0700";
120+
Calendar expected = java.util.Calendar.getInstance();
121+
expected.setTimeInMillis(1561111955000L);
122+
Calendar actual = CalendarSerializer.deserialize(datetime);
123+
assertNotNull(actual);
124+
assertEquals(expected.getTimeInMillis(), actual.getTimeInMillis());
125+
}
126+
127+
@Test
128+
public void testDateTimeNegativeOffsetFormatDeserialization() throws Exception {
129+
String datetime = "2019-06-21T17:12:35-07:00";
130+
Calendar expected = java.util.Calendar.getInstance();
131+
expected.setTimeInMillis(1561162355000L);
132+
Calendar actual = CalendarSerializer.deserialize(datetime);
133+
assertNotNull(actual);
134+
assertEquals(expected.getTimeInMillis(), actual.getTimeInMillis());
135+
}
136+
137+
@Test
138+
public void testDateTimeWithMillisAndNegativeOffsetDeserialization() throws Exception {
139+
String datetime = "2019-06-21T17:12:35.1385912-07:00";
140+
Calendar expected = java.util.Calendar.getInstance();
141+
expected.setTimeInMillis(1561162355138L);
142+
Calendar actual = CalendarSerializer.deserialize(datetime);
143+
assertNotNull(actual);
144+
assertEquals(expected.getTimeInMillis(), actual.getTimeInMillis());
145+
}
146+
147+
@Test
148+
public void testUTCDateTimeInNonstandardNegativeOffsetFormatDeserialization() throws Exception {
149+
String datetime = "2019-06-21T17:12:35-0700";
150+
Calendar expected = java.util.Calendar.getInstance();
151+
expected.setTimeInMillis(1561162355000L);
152+
Calendar actual = CalendarSerializer.deserialize(datetime);
153+
assertNotNull(actual);
154+
assertEquals(expected.getTimeInMillis(), actual.getTimeInMillis());
155+
}
156+
157+
}

0 commit comments

Comments
 (0)