# HG changeset patch # User Jaroslav Tulach # Date 1366298914 -7200 # Node ID 7a7686e6f875dbada2eaa82611d42272c91641a6 # Parent 32502264b896e12695c1e8e79ebab9b6843babd2 Support for null enums diff -r 32502264b896 -r 7a7686e6f875 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 17:18:10 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java Thu Apr 18 17:28:34 2013 +0200 @@ -18,7 +18,6 @@ package org.apidesign.bck2brwsr.htmlpage; import java.io.IOException; -import java.io.InputStream; import java.io.InputStreamReader; import java.io.PushbackInputStream; import java.io.Reader; diff -r 32502264b896 -r 7a7686e6f875 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 17:18:10 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Thu Apr 18 17:28:34 2013 +0200 @@ -246,7 +246,7 @@ w.append(type).append("(e));\n"); } else if (isEnum[0]) { w.append(" this.prop_").append(pn); - w.append(".add("); + w.append(".add(e == null ? null : "); w.append(type).append(".valueOf((String)e));\n"); } else { if (isPrimitive(type)) { @@ -262,7 +262,7 @@ } else { if (isEnum[0]) { w.append(" this.prop_").append(pn); - w.append(" = "); + w.append(" = ret[" + cnt + "] == null ? null : "); w.append(type).append(".valueOf((String)ret[" + cnt + "]);\n"); } else if (isPrimitive(type)) { w.append(" this.prop_").append(pn); diff -r 32502264b896 -r 7a7686e6f875 javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypesTest.java --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypesTest.java Thu Apr 18 17:18:10 2013 +0200 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypesTest.java Thu Apr 18 17:28:34 2013 +0200 @@ -20,6 +20,8 @@ import org.apidesign.bck2brwsr.core.JavaScriptBody; import org.apidesign.bck2brwsr.vmtest.BrwsrTest; import org.apidesign.bck2brwsr.vmtest.VMTest; +import org.json.JSONException; +import org.json.JSONObject; import org.testng.annotations.Factory; /** @@ -27,17 +29,25 @@ * @author Jaroslav Tulach */ public class ConvertTypesTest { - @JavaScriptBody(args = { }, body = "var json = new Object();" + @JavaScriptBody(args = { "includeSex" }, body = "var json = new Object();" + "json.firstName = 'son';\n" + "json.lastName = 'dj';\n" + "json.sex = 'MALE';\n" + "return json;" ) - private static native Object createJSON(); + private static Object createJSON(boolean includeSex) throws JSONException { + JSONObject o = new JSONObject(); + o.put("firstName", "son"); + o.put("lastName", "dj"); + if (includeSex) { + o.put("sex", "MALE"); + } + return o; + } @BrwsrTest - public void testConvertToPeople() { - final Object o = createJSON(); + public void testConvertToPeople() throws JSONException { + final Object o = createJSON(true); Person p = new Person(o); @@ -45,6 +55,17 @@ assert "dj".equals(p.getLastName()) : "Last name: " + p.getLastName(); assert Sex.MALE.equals(p.getSex()) : "Sex: " + p.getSex(); } + + @BrwsrTest + public void testConvertToPeopleWithoutSex() throws JSONException { + final Object o = createJSON(false); + + Person p = new Person(o); + + assert "son".equals(p.getFirstName()) : "First name: " + p.getFirstName(); + assert "dj".equals(p.getLastName()) : "Last name: " + p.getLastName(); + assert p.getSex() == null : "No sex: " + p.getSex(); + } @Factory public static Object[] create() { return VMTest.create(ConvertTypesTest.class);