From 8c18caf5742a53791b036bf5dc78e41c00f82f7a Mon Sep 17 00:00:00 2001 From: Jesse Wilson Date: Sun, 16 Apr 2017 12:15:53 -0400 Subject: [PATCH] Add a test to confirm types are canonicalized. (#278) Obsoletes https://github.com/square/moshi/pull/129/files --- .../squareup/moshi/AdapterMethodsTest.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/moshi/src/test/java/com/squareup/moshi/AdapterMethodsTest.java b/moshi/src/test/java/com/squareup/moshi/AdapterMethodsTest.java index 527d44f..3da17d3 100644 --- a/moshi/src/test/java/com/squareup/moshi/AdapterMethodsTest.java +++ b/moshi/src/test/java/com/squareup/moshi/AdapterMethodsTest.java @@ -24,8 +24,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import okio.ByteString; import org.junit.Test; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -670,6 +672,57 @@ public final class AdapterMethodsTest { } } + @Test public void genericArrayTypes() throws Exception { + Moshi moshi = new Moshi.Builder() + .add(new ByteArrayJsonAdapter()) + .build(); + JsonAdapter jsonAdapter = moshi.adapter(MapOfByteArrays.class); + + MapOfByteArrays mapOfByteArrays = new MapOfByteArrays( + Collections.singletonMap("a", new byte[] { 0, -1})); + String json = "{\"map\":{\"a\":\"00ff\"}}"; + + assertThat(jsonAdapter.toJson(mapOfByteArrays)).isEqualTo(json); + assertThat(jsonAdapter.fromJson(json)).isEqualTo(mapOfByteArrays); + } + + static class ByteArrayJsonAdapter { + @ToJson String byteArrayToJson(byte[] b) { + return ByteString.of(b).hex(); + } + + @FromJson byte[] byteArrayFromJson(String s) throws Exception { + return ByteString.decodeHex(s).toByteArray(); + } + } + + static class MapOfByteArrays { + final Map map; + + public MapOfByteArrays(Map map) { + this.map = map; + } + + @Override public boolean equals(Object o) { + return o instanceof MapOfByteArrays && o.toString().equals(toString()); + } + + @Override public int hashCode() { + return toString().hashCode(); + } + + @Override public String toString() { + StringBuilder result = new StringBuilder(); + for (Map.Entry entry : map.entrySet()) { + if (result.length() > 0) result.append(", "); + result.append(entry.getKey()) + .append(":") + .append(Arrays.toString(entry.getValue())); + } + return result.toString(); + } + } + static class Point { final int x; final int y;