Skip to content

Commit

Permalink
Respects lenient flag
Browse files Browse the repository at this point in the history
Fixes #35
  • Loading branch information
julman99 committed Aug 31, 2017
1 parent 89423bd commit 9b9de6a
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 4 deletions.
11 changes: 7 additions & 4 deletions src/main/java/io/gsonfire/gson/FireTypeAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.TypeAdapter;
import com.google.gson.internal.bind.JsonTreeReader;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import io.gsonfire.ClassConfig;
Expand Down Expand Up @@ -49,7 +50,7 @@ public T read(JsonReader in) throws IOException {
JsonElement json = new JsonParser().parse(in);

runPreDeserialize(json);
T result = deserialize(json);
T result = deserialize(json, in.isLenient());

//Run all the post deserializers
if (classConfig.isHooksEnabled()) {
Expand Down Expand Up @@ -78,9 +79,11 @@ private void runPreDeserialize(JsonElement json){
}
}

private T deserialize(JsonElement json){
T result = originalTypeAdapter.fromJsonTree(json);
return result;
private T deserialize(JsonElement json, boolean lenient) throws IOException{
JsonReader jsonReader = new JsonTreeReader(json);
jsonReader.setLenient(lenient);
T deserialized = originalTypeAdapter.read(jsonReader);
return deserialized;
}

}
58 changes: 58 additions & 0 deletions src/test/java/io/gsonfire/gson/LenientPersistTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package io.gsonfire.gson;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonSyntaxException;
import io.gsonfire.GsonFireBuilder;
import io.gsonfire.PreProcessor;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;

public class LenientPersistTest {

@Test
public void testLeninentPersist() {
Gson gson = new GsonFireBuilder()
.registerPreProcessor(SimpleThing.class, new PreProcessor<SimpleThing>() {
@Override
public void preDeserialize(Class<? extends SimpleThing> clazz, JsonElement src, Gson gson) {

}
})
.createGsonBuilder()
.setLenient()
.create();

String json = "{\"name\":\"bob\",\"value\":\"NaN\"} /*comment*/";
SimpleThing result = gson.fromJson(json, SimpleThing.class);

assertEquals(result.value, Double.NaN, 0);
}

@Test(expected = JsonSyntaxException.class)
public void testNonLeninentPersist() {
Gson gson = new GsonFireBuilder()
.registerPreProcessor(SimpleThing.class, new PreProcessor<SimpleThing>() {
@Override
public void preDeserialize(Class<? extends SimpleThing> clazz, JsonElement src, Gson gson) {

}
})
.createGsonBuilder()
.create();

String json = "{\"name\":\"bob\",\"value\":\"NaN\"} /*comment*/";
SimpleThing result = gson.fromJson(json, SimpleThing.class);

fail();
}


public static class SimpleThing {
public String name;
public double value;
}

}

0 comments on commit 9b9de6a

Please sign in to comment.