diff options
Diffstat (limited to 'extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java')
-rw-r--r-- | extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java b/extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java new file mode 100644 index 00000000..902dc477 --- /dev/null +++ b/extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.gson.typeadapters; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; + +import junit.framework.TestCase; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +public final class UtcDateTypeAdapterTest extends TestCase { + private final Gson gson = new GsonBuilder() + .registerTypeAdapter(Date.class, new UtcDateTypeAdapter()) + .create(); + + public void testLocalTimeZone() { + Date expected = new Date(); + String json = gson.toJson(expected); + Date actual = gson.fromJson(json, Date.class); + assertEquals(expected.getTime(), actual.getTime()); + } + + public void testDifferentTimeZones() { + for (String timeZone : TimeZone.getAvailableIDs()) { + Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(timeZone)); + Date expected = cal.getTime(); + String json = gson.toJson(expected); + // System.out.println(json + ": " + timeZone); + Date actual = gson.fromJson(json, Date.class); + assertEquals(expected.getTime(), actual.getTime()); + } + } + + /** + * JDK 1.7 introduced support for XXX format to indicate UTC date. But Android is older JDK. + * We want to make sure that this date is parseable in Android. + */ + public void testUtcDatesOnJdkBefore1_7() { + Gson gson = new GsonBuilder() + .registerTypeAdapter(Date.class, new UtcDateTypeAdapter()) + .create(); + gson.fromJson("'2014-12-05T04:00:00.000Z'", Date.class); + } + + public void testUtcWithJdk7Default() { + Date expected = new Date(); + SimpleDateFormat iso8601Format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.US); + iso8601Format.setTimeZone(TimeZone.getTimeZone("UTC")); + String expectedJson = "\"" + iso8601Format.format(expected) + "\""; + String actualJson = gson.toJson(expected); + assertEquals(expectedJson, actualJson); + Date actual = gson.fromJson(expectedJson, Date.class); + assertEquals(expected.getTime(), actual.getTime()); + } + + public void testNullDateSerialization() { + String json = gson.toJson(null, Date.class); + assertEquals("null", json); + } +} |