# HG changeset patch # User Jaroslav Tulach # Date 1364977217 -7200 # Node ID e2977ec1ef6e0c5c43a308fe8fab9523cb91dc77 # Parent 166924de64549fa8055bbc8fcf259bb492b1955d Convert wild characters to something more sane diff -r 166924de6454 -r e2977ec1ef6e javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java Wed Apr 03 10:04:24 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java Wed Apr 03 10:20:17 2013 +0200 @@ -50,6 +50,22 @@ throw new IllegalStateException("Value " + ret + " is not of type " + modelClass); } + public static String toJSON(Object value) { + if (value == null) { + return "null"; + } + if (value instanceof String) { + return '"' + + ((String)value). + replace("\"", "\\\""). + replace("\n", "\\n"). + replace("\r", "\\r"). + replace("\t", "\\t") + + '"'; + } + return value.toString(); + } + @JavaScriptBody(args = { "object", "property" }, body = "if (property === null) return object;\n" + "var p = object[property]; return p ? p : null;" diff -r 166924de6454 -r e2977ec1ef6e javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Wed Apr 03 10:04:24 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Wed Apr 03 10:20:17 2013 +0200 @@ -777,9 +777,8 @@ for (Property p : props) { w.write(sep); w.append(" sb.append(\"" + p.name() + ": \");\n"); - w.append(" sb.append('\"');"); - w.append(" sb.append(prop_").append(p.name()).append(");\n"); - w.append(" sb.append('\"');"); + w.append(" sb.append(org.apidesign.bck2brwsr.htmlpage.ConvertTypes.toJSON(prop_"); + w.append(p.name()).append("));\n"); sep = " sb.append(',');\n"; } w.write(" sb.append('}');\n"); diff -r 166924de6454 -r e2977ec1ef6e javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Wed Apr 03 10:04:24 2013 +0200 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Wed Apr 03 10:20:17 2013 +0200 @@ -54,5 +54,28 @@ assertEquals(o.getString("sex"), "MALE"); } + @Test public void personWithWildCharactersAndNulls() throws JSONException { + Person p = new Person(); + p.setFirstName("'\"\n"); + p.setLastName("\t\r\u0002"); + + JSONTokener t = new JSONTokener(p.toString()); + JSONObject o; + try { + o = new JSONObject(t); + } catch (JSONException ex) { + throw new AssertionError("Can't parse " + p.toString(), ex); + } + + Iterator it = o.sortedKeys(); + assertEquals(it.next(), "firstName"); + assertEquals(it.next(), "lastName"); + assertEquals(it.next(), "sex"); + + assertEquals(o.getString("firstName"), p.getFirstName()); + assertEquals(o.getString("lastName"), p.getLastName()); + assertEquals(o.get("sex"), JSONObject.NULL); + } + }