Skip to content

Commit 0388732

Browse files
committed
Expand ZonedDateTime and OffsetDateTime deserialization tests
1 parent fa6a27a commit 0388732

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/deser/OffsetDateTimeDeserTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.time.temporal.ChronoField;
66
import java.time.temporal.ChronoUnit;
77
import java.time.temporal.Temporal;
8+
import java.util.Arrays;
89
import java.util.Map;
910
import java.util.TimeZone;
1011

@@ -811,6 +812,34 @@ public void testOffsetDateTimeMinOrMax() throws Exception
811812
_testOffsetDateTimeMinOrMax(OffsetDateTime.MAX);
812813
}
813814

815+
@Test
816+
public void OffsetDateTime_with_offset_can_be_deserialized() throws Exception {
817+
ObjectReader r = MAPPER.readerFor(OffsetDateTime.class)
818+
.without(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
819+
820+
String base = "2015-07-24T12:23:34.184";
821+
for (String offset : Arrays.asList("+00", "-00")) {
822+
String time = base + offset;
823+
assertIsEqual(OffsetDateTime.parse(time), r.readValue('"' + time + '"'));
824+
assertIsEqual(OffsetDateTime.parse("2015-07-24T12:23:34.184Z"), r.readValue('"' + time + '"'));
825+
assertIsEqual(OffsetDateTime.parse("2015-07-24T12:23:34.184Z"), r.readValue('"' + time + "00" + '"'));
826+
assertIsEqual(OffsetDateTime.parse("2015-07-24T12:23:34.184Z"), r.readValue('"' + time + ":00" + '"'));
827+
assertIsEqual(OffsetDateTime.parse("2015-07-24T12:23:34.184" + offset + ":30"), r.readValue('"' + time + "30" + '"'));
828+
assertIsEqual(OffsetDateTime.parse("2015-07-24T12:23:34.184" + offset + ":30"), r.readValue('"' + time + ":30" + '"'));
829+
}
830+
831+
for (String prefix : Arrays.asList("-", "+")) {
832+
for (String hours : Arrays.asList("00", "01", "02", "03", "11", "12")) {
833+
String time = base + prefix + hours;
834+
assertIsEqual(OffsetDateTime.parse(time), r.readValue('"' + time + '"'));
835+
assertIsEqual(OffsetDateTime.parse(time), r.readValue('"' + time + "00" + '"'));
836+
assertIsEqual(OffsetDateTime.parse(time), r.readValue('"' + time + ":00" + '"'));
837+
assertIsEqual(OffsetDateTime.parse(time + ":30"), r.readValue('"' + time + "30" + '"'));
838+
assertIsEqual(OffsetDateTime.parse(time + ":30"), r.readValue('"' + time + ":30" + '"'));
839+
}
840+
}
841+
}
842+
814843
private void _testOffsetDateTimeMinOrMax(OffsetDateTime offsetDateTime)
815844
throws Exception
816845
{

datetime/src/test/java/com/fasterxml/jackson/datatype/jsr310/deser/ZonedDateTimeDeserTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818

1919
import java.io.IOException;
2020
import java.time.LocalDateTime;
21+
import java.time.OffsetDateTime;
2122
import java.time.ZoneId;
2223
import java.time.ZoneOffset;
2324
import java.time.ZonedDateTime;
2425
import java.time.format.DateTimeFormatter;
2526
import java.time.format.DateTimeParseException;
27+
import java.util.Arrays;
2628
import java.util.Map;
2729
import java.util.TimeZone;
2830

@@ -282,6 +284,33 @@ public void testDeserializationWithoutColonInTimeZoneWithTZDB() throws Throwable
282284
wrapper.value);
283285
}
284286

287+
@Test
288+
public void ZonedDateTime_with_offset_can_be_deserialized() throws Exception {
289+
ObjectReader r = newMapper().readerFor(ZonedDateTime.class)
290+
.without(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
291+
292+
String base = "2015-07-24T12:23:34.184";
293+
for (String offset : Arrays.asList("+00", "-00")) {
294+
String time = base + offset;
295+
assertEquals(ZonedDateTime.parse(time), r.readValue('"' + time + '"'));
296+
assertEquals(ZonedDateTime.parse("2015-07-24T12:23:34.184Z"), r.readValue('"' + time + '"'));
297+
assertEquals(ZonedDateTime.parse("2015-07-24T12:23:34.184Z"), r.readValue('"' + time + "00" + '"'));
298+
assertEquals(ZonedDateTime.parse("2015-07-24T12:23:34.184Z"), r.readValue('"' + time + ":00" + '"'));
299+
assertEquals(ZonedDateTime.parse("2015-07-24T12:23:34.184" + offset + ":30" ), r.readValue('"' + time + "30" + '"'));
300+
assertEquals(ZonedDateTime.parse("2015-07-24T12:23:34.184" + offset + ":30" ), r.readValue('"' + time + ":30" + '"'));
301+
}
302+
303+
for (String prefix : Arrays.asList("-", "+")) {
304+
for (String hours : Arrays.asList("00", "01", "02", "03", "11", "12")) {
305+
String time = base + prefix + hours;
306+
assertEquals(ZonedDateTime.parse(time), r.readValue('"' + time + '"'));
307+
assertEquals(ZonedDateTime.parse(time), r.readValue('"' + time + "00" + '"'));
308+
assertEquals(ZonedDateTime.parse(time), r.readValue('"' + time + ":00" + '"'));
309+
assertEquals(ZonedDateTime.parse(time + ":30"), r.readValue('"' + time + "30" + '"'));
310+
assertEquals(ZonedDateTime.parse(time + ":30"), r.readValue('"' + time + ":30" + '"'));
311+
}
312+
}
313+
}
285314

286315
private void expectFailure(String json) throws Throwable {
287316
try {

0 commit comments

Comments
 (0)