1.1 --- a/json-tck/src/main/java/net/java/html/json/tests/JSONTest.java Mon Dec 09 21:03:25 2013 +0100
1.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/JSONTest.java Wed Dec 11 20:29:36 2013 +0100
1.3 @@ -108,6 +108,26 @@
1.4 "Should be the same: " + p.getFirstName() + " != " + p2.getFirstName();
1.5 }
1.6
1.7 + @KOTest public void toJSONWithApostrophInABrowser() throws Throwable {
1.8 + Person p = Models.bind(new Person(), newContext());
1.9 + p.setSex(Sex.MALE);
1.10 + p.setFirstName("Jimmy 'Jim' Rambo");
1.11 +
1.12 +
1.13 + final String txt = p.toString();
1.14 + Object json;
1.15 + try {
1.16 + json = parseJSON(txt);
1.17 + } catch (Throwable ex) {
1.18 + throw new IllegalStateException("Can't parse " + txt).initCause(ex);
1.19 + }
1.20 +
1.21 + Person p2 = JSON.read(newContext(), Person.class, json);
1.22 +
1.23 + assert p2.getFirstName().equals(p.getFirstName()) :
1.24 + "Should be the same: " + p.getFirstName() + " != " + p2.getFirstName();
1.25 + }
1.26 +
1.27 @OnReceive(url="{url}")
1.28 static void fetch(Person p, JSONik model) {
1.29 model.setFetched(p);
1.30 @@ -431,6 +451,14 @@
1.31 assert 0 == v.getValue() : "Value is empty: " + v.getValue();
1.32 assert 0 == v.getSmall() : "Small value is empty: " + v.getSmall();
1.33 }
1.34 +
1.35 + @KOTest public void deserializeWrongEnum() throws Exception {
1.36 + String str = "{ \"sex\" : \"unknown\" }";
1.37 + ByteArrayInputStream is = new ByteArrayInputStream(str.getBytes("UTF-8"));
1.38 + Person p = Models.parse(newContext(), Person.class, is);
1.39 + assert p.getSex() == null : "Wrong sex means null, but was: " + p.getSex();
1.40 + }
1.41 +
1.42
1.43 private static BrwsrCtx newContext() {
1.44 return Utils.newContext(JSONTest.class);
2.1 --- a/json/src/main/java/org/apidesign/html/json/impl/JSON.java Mon Dec 09 21:03:25 2013 +0100
2.2 +++ b/json/src/main/java/org/apidesign/html/json/impl/JSON.java Wed Dec 11 20:29:36 2013 +0100
2.3 @@ -89,7 +89,6 @@
2.4 for (int i = 0; i < len; i++) {
2.5 char ch = s.charAt(i);
2.6 switch (ch) {
2.7 - case '\'': sb.append("\\\'"); break;
2.8 case '\"': sb.append("\\\""); break;
2.9 case '\n': sb.append("\\n"); break;
2.10 case '\r': sb.append("\\r"); break;
3.1 --- a/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java Mon Dec 09 21:03:25 2013 +0100
3.2 +++ b/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java Wed Dec 11 20:29:36 2013 +0100
3.3 @@ -374,9 +374,13 @@
3.4 w.append(" }\n");
3.5 } else {
3.6 if (isEnum[0]) {
3.7 + w.append(" try {\n");
3.8 w.append(" this.prop_").append(pn);
3.9 w.append(" = ret[" + cnt + "] == null ? null : ");
3.10 w.append(type).append(".valueOf(org.apidesign.html.json.impl.JSON.stringValue(ret[" + cnt + "]));\n");
3.11 + w.append(" } catch (IllegalArgumentException ex) {\n");
3.12 + w.append(" ex.printStackTrace();\n");
3.13 + w.append(" }\n");
3.14 } else if (isPrimitive(type)) {
3.15 w.append(" this.prop_").append(pn);
3.16 w.append(" = ret[" + cnt + "] == null ? ");