# HG changeset patch # User Jaroslav Tulach # Date 1366282045 -7200 # Node ID 80c46ea076d3e92df4066c94fa99b5e237aca1a7 # Parent ad7b9ae807a1a3c09f89ef8427f50c4c3f9cb966 Test to ensure the generated JSON can really be parse by a browser diff -r ad7b9ae807a1 -r 80c46ea076d3 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java Thu Apr 18 12:31:31 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java Thu Apr 18 12:47:25 2013 +0200 @@ -54,6 +54,9 @@ if (value == null) { return "null"; } + if (value instanceof Enum) { + value = value.toString(); + } if (value instanceof String) { return '"' + ((String)value). diff -r ad7b9ae807a1 -r 80c46ea076d3 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Thu Apr 18 12:31:31 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Thu Apr 18 12:47:25 2013 +0200 @@ -1140,7 +1140,8 @@ String sep = ""; for (Prprt p : props) { w.write(sep); - w.append(" sb.append(\"" + p.name() + ": \");\n"); + w.append(" sb.append('\"').append(\"" + p.name() + "\")"); + w.append(".append('\"').append(\":\");\n"); w.append(" sb.append(org.apidesign.bck2brwsr.htmlpage.ConvertTypes.toJSON(prop_"); w.append(p.name()).append("));\n"); sep = " sb.append(',');\n"; diff -r ad7b9ae807a1 -r 80c46ea076d3 javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Thu Apr 18 12:31:31 2013 +0200 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Thu Apr 18 12:47:25 2013 +0200 @@ -70,6 +70,25 @@ assertEquals(o.getString("sex"), "MALE"); } + @BrwsrTest public void toJSONInABrowser() throws Throwable { + Person p = new Person(); + p.setSex(Sex.MALE); + p.setFirstName("Jarda"); + p.setLastName("Tulach"); + + Object json; + try { + json = parseJSON(p.toString()); + } catch (Throwable ex) { + throw new IllegalStateException("Can't parse " + p).initCause(ex); + } + + Person p2 = new Person(json); + + assert p2.getFirstName().equals(p.getFirstName()) : + "Should be the same: " + p.getFirstName() + " != " + p2.getFirstName(); + } + @Test public void personWithWildCharactersAndNulls() throws JSONException { Person p = new Person(); p.setFirstName("'\"\n"); @@ -213,6 +232,9 @@ @JavaScriptBody(args = { }, body = "return window.document.getElementsByTagName('script').length;") private static native int scriptElements(); + @JavaScriptBody(args = { "s" }, body = "return window.JSON.parse(s);") + private static native Object parseJSON(String s); + @Http(@Http.Resource( content = "{'firstName': 'Sitar', 'sex': 'MALE'}", path="/person.json",