1.1 --- a/json/src/test/java/net/java/html/json/DeepChangeTest.java Fri Aug 01 14:08:55 2014 +0200
1.2 +++ b/json/src/test/java/net/java/html/json/DeepChangeTest.java Fri Aug 01 14:16:19 2014 +0200
1.3 @@ -42,6 +42,7 @@
1.4 */
1.5 package net.java.html.json;
1.6
1.7 +import java.util.List;
1.8 import java.util.Map;
1.9 import net.java.html.BrwsrCtx;
1.10 import net.java.html.json.MapModelTest.MapTechnology;
1.11 @@ -88,6 +89,23 @@
1.12 static String thrdName(MyY one) {
1.13 return "X" + one.getCount();
1.14 }
1.15 +
1.16 + @ComputedProperty(deep = true)
1.17 + static String allNames(List<MyY> all) {
1.18 + StringBuilder sb = new StringBuilder();
1.19 + for (MyY y : all) {
1.20 + sb.append(y.getValue());
1.21 + }
1.22 + return sb.toString();
1.23 + }
1.24 +
1.25 + @ComputedProperty(deep = true)
1.26 + static String firstFromNames(List<MyY> all) {
1.27 + if (all.size() > 0) {
1.28 + return all.get(0).getValue();
1.29 + }
1.30 + return null;
1.31 + }
1.32 }
1.33 @Model(className = "MyY", properties = {
1.34 @Property(name = "value", type = String.class),
1.35 @@ -116,6 +134,85 @@
1.36 assertEquals(o.changes, 1, "One change so far");
1.37 }
1.38
1.39 + @Test public void isTransitiveChangeInArrayNotifiedProperly() throws Exception {
1.40 + MyX p = Models.bind(
1.41 + new MyX(new MyY("Ahoj", 0), new MyY("Hi", 333), new MyY("Hello", 999)
1.42 + ), c).applyBindings();
1.43 +
1.44 + Map m = (Map)Models.toRaw(p);
1.45 + Object v = m.get("allNames");
1.46 + assertNotNull(v, "Value should be in the map");
1.47 + assertEquals(v.getClass(), One.class, "It is instance of One");
1.48 + One o = (One)v;
1.49 + assertEquals(o.changes, 0, "No changes so far");
1.50 + assertTrue(o.pb.isReadOnly(), "Derived property");
1.51 + assertEquals(o.get(), "HiHello");
1.52 +
1.53 + p.getAll().get(0).setValue("Nazdar");
1.54 +
1.55 + assertEquals(o.get(), "NazdarHello");
1.56 + assertEquals(o.changes, 1, "One change so far");
1.57 + }
1.58 +
1.59 + @Test public void firstChangeInArrayNotifiedProperly() throws Exception {
1.60 + MyX p = Models.bind(
1.61 + new MyX(new MyY("Ahoj", 0), new MyY("Hi", 333), new MyY("Hello", 999)
1.62 + ), c).applyBindings();
1.63 +
1.64 + Map m = (Map)Models.toRaw(p);
1.65 + Object v = m.get("firstFromNames");
1.66 + assertNotNull(v, "Value should be in the map");
1.67 + assertEquals(v.getClass(), One.class, "It is instance of One");
1.68 + One o = (One)v;
1.69 + assertEquals(o.changes, 0, "No changes so far");
1.70 + assertTrue(o.pb.isReadOnly(), "Derived property");
1.71 + assertEquals(o.get(), "Hi");
1.72 +
1.73 + p.getAll().get(0).setValue("Nazdar");
1.74 +
1.75 + assertEquals(o.get(), "Nazdar");
1.76 + assertEquals(o.changes, 1, "One change so far");
1.77 + }
1.78 + @Test public void secondChangeInArrayIgnored() throws Exception {
1.79 + MyX p = Models.bind(
1.80 + new MyX(new MyY("Ahoj", 0), new MyY("Hi", 333), new MyY("Hello", 999)
1.81 + ), c).applyBindings();
1.82 +
1.83 + Map m = (Map)Models.toRaw(p);
1.84 + Object v = m.get("firstFromNames");
1.85 + assertNotNull(v, "Value should be in the map");
1.86 + assertEquals(v.getClass(), One.class, "It is instance of One");
1.87 + One o = (One)v;
1.88 + assertEquals(o.changes, 0, "No changes so far");
1.89 + assertTrue(o.pb.isReadOnly(), "Derived property");
1.90 + assertEquals(o.get(), "Hi");
1.91 +
1.92 + p.getAll().get(1).setValue("Nazdar");
1.93 +
1.94 + assertEquals(o.get(), "Hi");
1.95 + assertEquals(o.changes, 0, "No change so far");
1.96 + }
1.97 +
1.98 + @Test public void changeInArraySizeNeedsToBeRecomputed() throws Exception {
1.99 + MyX p = Models.bind(
1.100 + new MyX(new MyY("Ahoj", 0), new MyY("Hi", 333), new MyY("Hello", 999)
1.101 + ), c).applyBindings();
1.102 +
1.103 + Map m = (Map)Models.toRaw(p);
1.104 + Object v = m.get("firstFromNames");
1.105 + assertNotNull(v, "Value should be in the map");
1.106 + assertEquals(v.getClass(), One.class, "It is instance of One");
1.107 + One o = (One)v;
1.108 + assertEquals(o.changes, 0, "No changes so far");
1.109 + assertTrue(o.pb.isReadOnly(), "Derived property");
1.110 + assertEquals(o.get(), "Hi");
1.111 +
1.112 + p.getAll().remove(1);
1.113 +
1.114 + assertEquals(o.get(), "Hi");
1.115 + assertEquals(o.changes, 1, "This required a change");
1.116 + }
1.117 +
1.118 @Test public void doublePropertyChangeNotified() throws Exception {
1.119 MyX p = Models.bind(
1.120 new MyX(new MyY("Ahoj", 0), new MyY("Hi", 333), new MyY("Hello", 999)