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
