Merge from default preprocess
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 11 Dec 2013 20:29:36 +0100
branchpreprocess
changeset 347d70b10e97a68
parent 346 61a0d1cbb590
parent 340 eda32ccb6882
child 350 25abd193f145
Merge from default
     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 ? ");