fromRaw(toRaw(...)) should yield object with same values
authorJaroslav Tulach <jtulach@netbeans.org>
Sun, 22 Nov 2015 21:18:35 +0100
changeset 1020b5d5cbb44ce0
parent 1019 e66e962fed13
child 1021 c918924ad3c5
fromRaw(toRaw(...)) should yield object with same values
json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java
ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java
ko4j/src/main/java/org/netbeans/html/ko4j/Knockout.java
ko4j/src/main/java/org/netbeans/html/ko4j/LoadJSON.java
     1.1 --- a/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java	Sat Nov 21 18:05:03 2015 +0100
     1.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java	Sun Nov 22 21:18:35 2015 +0100
     1.3 @@ -167,6 +167,18 @@
     1.4              Utils.exposeHTML(KnockoutTest.class, "");
     1.5          }
     1.6      }
     1.7 +    
     1.8 +    @KOTest public void rawObject() {
     1.9 +        final BrwsrCtx ctx = newContext();
    1.10 +        Person p1 = Models.bind(new Person(), ctx);
    1.11 +        p1.setFirstName("Jarda");
    1.12 +        p1.setLastName("Tulach");
    1.13 +        Object raw = Models.toRaw(p1);
    1.14 +        Person p2 = Models.fromRaw(ctx, Person.class, raw);
    1.15 +        
    1.16 +        assertEquals(p2.getFirstName(), "Jarda", "First name");
    1.17 +        assertEquals(p2.getLastName(), "Tulach", "Last name");
    1.18 +    }
    1.19  
    1.20      @KOTest public void modifyComputedProperty() throws Throwable {
    1.21          Object exp = Utils.exposeHTML(KnockoutTest.class,
     2.1 --- a/ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java	Sat Nov 21 18:05:03 2015 +0100
     2.2 +++ b/ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java	Sun Nov 22 21:18:35 2015 +0100
     2.3 @@ -275,11 +275,12 @@
     2.4          }
     2.5      }
     2.6  
     2.7 -    @JavaScriptBody(args = {"object", "property"},
     2.8 -            body
     2.9 -            = "if (property === null) return object;\n"
    2.10 -            + "if (object === null) return null;\n"
    2.11 -            + "var p = object[property]; return p ? p : null;"
    2.12 +    @JavaScriptBody(args = {"object", "property"}, body =
    2.13 +        "var ret;\n" + 
    2.14 +        "if (property === null) ret = object;\n" + 
    2.15 +        "else if (object === null) ret = null;\n" + 
    2.16 +        "else ret = object[property];\n" + 
    2.17 +        "return ret ? (typeof ko === 'undefined' ? ret : ko.utils.unwrapObservable(ret)) : null;"
    2.18      )
    2.19      private static Object getProperty(Object object, String property) {
    2.20          return null;
     3.1 --- a/ko4j/src/main/java/org/netbeans/html/ko4j/Knockout.java	Sat Nov 21 18:05:03 2015 +0100
     3.2 +++ b/ko4j/src/main/java/org/netbeans/html/ko4j/Knockout.java	Sun Nov 22 21:18:35 2015 +0100
     3.3 @@ -66,6 +66,17 @@
     3.4  final class Knockout extends WeakReference<Object> {
     3.5      private static final ReferenceQueue<Object> QUEUE = new ReferenceQueue();
     3.6      private static final Set<Knockout> active = Collections.synchronizedSet(new HashSet<Knockout>());
     3.7 +
     3.8 +    @JavaScriptBody(args = {"object", "property"}, body = 
     3.9 +        "var ret;\n" + 
    3.10 +        "if (property === null) ret = object;\n" + 
    3.11 +        "else if (object === null) ret = null;\n" + 
    3.12 +        "else ret = object[property];\n" + 
    3.13 +        "return ret ? ko.utils.unwrapObservable(ret) : null;"
    3.14 +    )
    3.15 +    static Object getProperty(Object object, String property) {
    3.16 +        return null;
    3.17 +    }
    3.18      
    3.19      private PropertyBinding[] props;
    3.20      private FunctionBinding[] funcs;
     4.1 --- a/ko4j/src/main/java/org/netbeans/html/ko4j/LoadJSON.java	Sat Nov 21 18:05:03 2015 +0100
     4.2 +++ b/ko4j/src/main/java/org/netbeans/html/ko4j/LoadJSON.java	Sun Nov 22 21:18:35 2015 +0100
     4.3 @@ -52,16 +52,6 @@
     4.4  final class LoadJSON {
     4.5      private LoadJSON() {}
     4.6  
     4.7 -    @JavaScriptBody(args = {"object", "property"},
     4.8 -        body
     4.9 -        = "if (property === null) return object;\n"
    4.10 -        + "if (object === null) return null;\n"
    4.11 -        + "var p = object[property]; return p ? p : null;"
    4.12 -    )
    4.13 -    private static Object getProperty(Object object, String property) {
    4.14 -        return null;
    4.15 -    }
    4.16 -
    4.17      static String createJSONP(JSONCall whenDone) {
    4.18          int h = whenDone.hashCode();
    4.19          String name;
    4.20 @@ -141,7 +131,7 @@
    4.21  
    4.22      static void extractJSON(Object jsonObject, String[] props, Object[] values) {
    4.23          for (int i = 0; i < props.length; i++) {
    4.24 -            values[i] = getProperty(jsonObject, props[i]);
    4.25 +            values[i] = Knockout.getProperty(jsonObject, props[i]);
    4.26          }
    4.27      }
    4.28