Test to ensure the generated JSON can really be parse by a browser
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 18 Apr 2013 12:47:25 +0200
changeset 100980c46ea076d3
parent 1008 ad7b9ae807a1
child 1010 e2d1dc505c24
Test to ensure the generated JSON can really be parse by a browser
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java
javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java
     1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java	Thu Apr 18 12:31:31 2013 +0200
     1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java	Thu Apr 18 12:47:25 2013 +0200
     1.3 @@ -54,6 +54,9 @@
     1.4          if (value == null) {
     1.5              return "null";
     1.6          }
     1.7 +        if (value instanceof Enum) {
     1.8 +            value = value.toString();
     1.9 +        }
    1.10          if (value instanceof String) {
    1.11              return '"' + 
    1.12                  ((String)value).
     2.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Thu Apr 18 12:31:31 2013 +0200
     2.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Thu Apr 18 12:47:25 2013 +0200
     2.3 @@ -1140,7 +1140,8 @@
     2.4          String sep = "";
     2.5          for (Prprt p : props) {
     2.6              w.write(sep);
     2.7 -            w.append("    sb.append(\"" + p.name() + ": \");\n");
     2.8 +            w.append("    sb.append('\"').append(\"" + p.name() + "\")");
     2.9 +                w.append(".append('\"').append(\":\");\n");
    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";
     3.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java	Thu Apr 18 12:31:31 2013 +0200
     3.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java	Thu Apr 18 12:47:25 2013 +0200
     3.3 @@ -70,6 +70,25 @@
     3.4          assertEquals(o.getString("sex"), "MALE");
     3.5      }
     3.6      
     3.7 +    @BrwsrTest public void toJSONInABrowser() throws Throwable {
     3.8 +        Person p = new Person();
     3.9 +        p.setSex(Sex.MALE);
    3.10 +        p.setFirstName("Jarda");
    3.11 +        p.setLastName("Tulach");
    3.12 +
    3.13 +        Object json;
    3.14 +        try {
    3.15 +            json = parseJSON(p.toString());
    3.16 +        } catch (Throwable ex) {
    3.17 +            throw new IllegalStateException("Can't parse " + p).initCause(ex);
    3.18 +        }
    3.19 +        
    3.20 +        Person p2 = new Person(json);
    3.21 +        
    3.22 +        assert p2.getFirstName().equals(p.getFirstName()) : 
    3.23 +            "Should be the same: " + p.getFirstName() + " != " + p2.getFirstName();
    3.24 +    }
    3.25 +    
    3.26      @Test public void personWithWildCharactersAndNulls() throws JSONException {
    3.27          Person p = new Person();
    3.28          p.setFirstName("'\"\n");
    3.29 @@ -213,6 +232,9 @@
    3.30      @JavaScriptBody(args = {  }, body = "return window.document.getElementsByTagName('script').length;")
    3.31      private static native int scriptElements();
    3.32  
    3.33 +    @JavaScriptBody(args = { "s" }, body = "return window.JSON.parse(s);")
    3.34 +    private static native Object parseJSON(String s);
    3.35 +    
    3.36      @Http(@Http.Resource(
    3.37          content = "{'firstName': 'Sitar', 'sex': 'MALE'}", 
    3.38          path="/person.json",