@Test public void toStringReflectsInner() { assertThat(buildMoshi(newFruitFactory()).adapter(Fruit.class).toString()) .isEqualTo("JsonAdapter(com.serjltt.moshi.adapters.DefaultOnDataMismatchAdapterTest$Fruit)" + ".nullSafe().defaultOnDatMisMatch(null)"); }
@Test public void factorySupportsType() throws Exception { Type parameterized = Types.newParameterizedType(List.class, String.class); List<String> fallback = Collections.singletonList("test"); // Build a moshi instance using the adapter under test and one that will throw on each read. Moshi moshi = buildMoshi(DefaultOnDataMismatchAdapter.newFactory(parameterized, fallback)) .newBuilder() .add(new JsonAdapter.Factory() { @Override public JsonAdapter<?> create(Type type, Set<? extends Annotation> annotations, Moshi moshi) { final JsonAdapter<Object> next = moshi.nextAdapter(this, type, annotations); return new JsonAdapter<Object>() { @Override public Object fromJson(JsonReader reader) throws IOException { throw new JsonDataException("Fail for all types"); } @Override public void toJson(JsonWriter writer, Object value) throws IOException { next.toJson(writer, value); } }; } }) .build(); JsonAdapter<List<String>> adapter = moshi.adapter(parameterized); List<String> fromJson = adapter.fromJson("[]"); assertThat(fromJson) .isEqualTo(fallback) .containsExactly("test"); String toJson = adapter.toJson(fromJson); assertThat(toJson).isEqualTo("[\"test\"]"); }
@Test public void serialize() { String fruit = buildMoshi(newFruitFactory()).adapter(Fruit.class).toJson(APPLE); assertThat(fruit).isEqualTo("\"apple\""); }
@Test public void deserializeMatch() throws IOException { Fruit fruit = buildMoshi(newFruitFactory()).adapter(Fruit.class).fromJson("\"banana\""); assertThat(fruit).isEqualTo(BANANA); }
@Test public void deserializeMismatch() throws IOException { Fruit fruit = buildMoshi(newFruitFactory()).adapter(Fruit.class).fromJson("\"mango\""); assertThat(fruit).isNull(); }