1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java Wed Apr 03 10:04:24 2013 +0200
1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java Wed Apr 03 10:20:17 2013 +0200
1.3 @@ -50,6 +50,22 @@
1.4 throw new IllegalStateException("Value " + ret + " is not of type " + modelClass);
1.5 }
1.6
1.7 + public static String toJSON(Object value) {
1.8 + if (value == null) {
1.9 + return "null";
1.10 + }
1.11 + if (value instanceof String) {
1.12 + return '"' +
1.13 + ((String)value).
1.14 + replace("\"", "\\\"").
1.15 + replace("\n", "\\n").
1.16 + replace("\r", "\\r").
1.17 + replace("\t", "\\t")
1.18 + + '"';
1.19 + }
1.20 + return value.toString();
1.21 + }
1.22 +
1.23 @JavaScriptBody(args = { "object", "property" },
1.24 body = "if (property === null) return object;\n"
1.25 + "var p = object[property]; return p ? p : null;"
2.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Wed Apr 03 10:04:24 2013 +0200
2.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Wed Apr 03 10:20:17 2013 +0200
2.3 @@ -777,9 +777,8 @@
2.4 for (Property p : props) {
2.5 w.write(sep);
2.6 w.append(" sb.append(\"" + p.name() + ": \");\n");
2.7 - w.append(" sb.append('\"');");
2.8 - w.append(" sb.append(prop_").append(p.name()).append(");\n");
2.9 - w.append(" sb.append('\"');");
2.10 + w.append(" sb.append(org.apidesign.bck2brwsr.htmlpage.ConvertTypes.toJSON(prop_");
2.11 + w.append(p.name()).append("));\n");
2.12 sep = " sb.append(',');\n";
2.13 }
2.14 w.write(" sb.append('}');\n");
3.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Wed Apr 03 10:04:24 2013 +0200
3.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Wed Apr 03 10:20:17 2013 +0200
3.3 @@ -54,5 +54,28 @@
3.4 assertEquals(o.getString("sex"), "MALE");
3.5 }
3.6
3.7 + @Test public void personWithWildCharactersAndNulls() throws JSONException {
3.8 + Person p = new Person();
3.9 + p.setFirstName("'\"\n");
3.10 + p.setLastName("\t\r\u0002");
3.11 +
3.12 + JSONTokener t = new JSONTokener(p.toString());
3.13 + JSONObject o;
3.14 + try {
3.15 + o = new JSONObject(t);
3.16 + } catch (JSONException ex) {
3.17 + throw new AssertionError("Can't parse " + p.toString(), ex);
3.18 + }
3.19 +
3.20 + Iterator it = o.sortedKeys();
3.21 + assertEquals(it.next(), "firstName");
3.22 + assertEquals(it.next(), "lastName");
3.23 + assertEquals(it.next(), "sex");
3.24 +
3.25 + assertEquals(o.getString("firstName"), p.getFirstName());
3.26 + assertEquals(o.getString("lastName"), p.getLastName());
3.27 + assertEquals(o.get("sex"), JSONObject.NULL);
3.28 + }
3.29 +
3.30
3.31 }