This is an automated email from the ASF dual-hosted git repository.

jtulach pushed a commit to annotated tag release-1.6
in repository https://gitbox.apache.org/repos/asf/incubator-netbeans-html4j.git

commit 382b5f8c8727aec7a482fb1435d1a4255c8090ee
Author: Jaroslav Tulach <[email protected]>
AuthorDate: Tue Nov 6 06:57:13 2018 +0100

    Make sure the created sub-model objects are connected to the appropriate 
context
---
 .../net/java/html/json/tests/KnockoutTest.java     | 13 +++--
 .../net/java/html/json/tests/PairModelTest.java    | 67 ++++++++++++++++++++++
 .../netbeans/html/json/impl/ModelProcessor.java    |  4 +-
 .../netbeans/html/json/impl/DeepChangeTest.java    |  2 -
 4 files changed, 77 insertions(+), 9 deletions(-)

diff --git a/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java 
b/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java
index e4cd463..f0bdcc3 100644
--- a/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java
+++ b/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java
@@ -300,10 +300,13 @@ public final class KnockoutTest {
 ""
             );
 
-            js = Models.bind(new KnockoutModel(), newContext());
-            js.getArchetypes().add(new ArchetypeData("ko4j", 
"org.netbeans.html", "0.8.3", "ko4j", "ko4j", null));
-            js.getArchetypes().add(new ArchetypeData("crud", 
"org.netbeans.html", "0.8.3", "crud", "crud", null));
-            js.getArchetypes().add(new ArchetypeData("3rd", 
"org.netbeans.html", "0.8.3", "3rd", "3rd", null));
+            {
+                KnockoutModel km = new KnockoutModel();
+                km.getArchetypes().add(new ArchetypeData("ko4j", 
"org.netbeans.html", "0.8.3", "ko4j", "ko4j", null));
+                km.getArchetypes().add(new ArchetypeData("crud", 
"org.netbeans.html", "0.8.3", "crud", "crud", null));
+                km.getArchetypes().add(new ArchetypeData("3rd", 
"org.netbeans.html", "0.8.3", "3rd", "3rd", null));
+                js = Models.bind(km, newContext());
+            }
             js.setArchetype(js.getArchetypes().get(1));
             js.applyBindings();
 
@@ -339,7 +342,7 @@ public final class KnockoutTest {
         if (preApply) {
             js.applyBindings();
         }
-        js.setArchetype(new ArchetypeData());
+        js.setArchetype(Models.bind(new ArchetypeData(), newContext()));
         js.getArchetype().setGroupId("org.netbeans.html");
         js.applyBindings();
 
diff --git a/json-tck/src/test/java/net/java/html/json/tests/PairModelTest.java 
b/json-tck/src/test/java/net/java/html/json/tests/PairModelTest.java
new file mode 100644
index 0000000..b0e0da8
--- /dev/null
+++ b/json-tck/src/test/java/net/java/html/json/tests/PairModelTest.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package net.java.html.json.tests;
+
+import java.lang.reflect.Field;
+import net.java.html.BrwsrCtx;
+import net.java.html.json.Models;
+import org.netbeans.html.context.spi.Contexts;
+import org.netbeans.html.json.spi.Proto;
+import org.testng.Assert;
+import static org.testng.Assert.assertEquals;
+import org.testng.annotations.Test;
+
+public class PairModelTest {
+
+    public PairModelTest() {
+    }
+
+    @Test
+    public void testClonePairs() throws Exception {
+        BrwsrCtx ctx = Contexts.newBuilder().build();
+        Pair p = new Pair(null, null, new Pair("First", "Last", null));
+
+        assertCtx(p, p.getNext());
+
+        Pair c = Models.bind(p, ctx);
+
+        assertCtx(c, c.getNext());
+    }
+
+    @Test
+    public void testCloneDefaultPair() throws Exception {
+        BrwsrCtx ctx = Contexts.newBuilder().build();
+        Pair p = new Pair();
+        Pair c = Models.bind(p, ctx);
+
+        Assert.assertNotNull(p.getNext(), "Default value of p.next is 
created");
+        Assert.assertNotNull(c.getNext(), "Default value of c.next is 
created");
+
+        assertCtx(p, p.getNext());
+        assertCtx(c, c.getNext());
+    }
+
+    private static void assertCtx(Pair first, Pair second) throws Exception {
+        Field field = first.getClass().getDeclaredField("proto");
+        field.setAccessible(true);
+        Proto proto1 = (Proto) field.get(first);
+        Proto proto2 = (Proto) field.get(second);
+        assertEquals(proto1.getContext(), proto2.getContext());
+    }
+}
diff --git a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java 
b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
index c8babca..25c4378 100644
--- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
+++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
@@ -671,7 +671,7 @@ public final class ModelProcessor extends AbstractProcessor 
{
                 w.write("  public " + tn + " " + gs[0] + "() {\n");
                 w.write("    proto.accessProperty(\"" + p.name() + "\");\n");
                 if (isModel[0]) {
-                    w.write("    if (prop_" + p.name() + " == TYPE) prop_" + 
p.name() + " = new " + tn +"();\n");
+                    w.write("    if (prop_" + p.name() + " == TYPE) prop_" + 
p.name() + " = net.java.html.json.Models.bind(new " + tn +"(), 
proto.getContext());\n");
                 }
                 w.write("    return (" + tn + ")prop_" + p.name() + ";\n");
                 w.write("  }\n");
@@ -1808,7 +1808,7 @@ public final class ModelProcessor extends 
AbstractProcessor {
                     w.write("    ret.prop_" + p.name() + " = " + gs[0] + 
"();\n");
                     continue;
                 }
-                w.write("    ret.prop_" + p.name() + " =  prop_" + p.name() + 
" == null ? null : prop_" + p.name() + " == TYPE ? TYPE : " + gs[0] + 
"().clone();\n");
+                w.write("    ret.prop_" + p.name() + " =  prop_" + p.name() + 
" == null ? null : prop_" + p.name() + " == TYPE ? TYPE : 
net.java.html.json.Models.bind(" + gs[0] + "(), ctx);\n");
             } else {
                 w.write("    proto.cloneList(ret." + gs[0] + "(), ctx, prop_" 
+ p.name() + ");\n");
             }
diff --git a/json/src/test/java/org/netbeans/html/json/impl/DeepChangeTest.java 
b/json/src/test/java/org/netbeans/html/json/impl/DeepChangeTest.java
index 4e3427a..ed3f3c2 100644
--- a/json/src/test/java/org/netbeans/html/json/impl/DeepChangeTest.java
+++ b/json/src/test/java/org/netbeans/html/json/impl/DeepChangeTest.java
@@ -179,8 +179,6 @@ public class DeepChangeTest {
         One o = (One)v;
         assertEquals(o.changes, 0, "No changes so far");
         assertFalse(o.pb.isReadOnly(), "Normal property");
-        assertEquals(o.get(), myY);
-        assertSame(o.get(), realY);
 
         final MyY newY = new MyY("Hi", 1);
         p.setOne(newY);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to