#255026: When comparing whether value of a Model property changed, one needs to compare against the previous value of the object, not the just assigned one.
authorJaroslav Tulach <jtulach@netbeans.org>
Sat, 05 Sep 2015 22:34:50 +0200
changeset 97534eed9763f59
parent 972 843a0db837af
child 976 38f9f7ab523a
#255026: When comparing whether value of a Model property changed, one needs to compare against the previous value of the object, not the just assigned one.
json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
json/src/test/java/org/netbeans/html/json/impl/DeepChangeTest.java
     1.1 --- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java	Mon Aug 31 22:55:01 2015 +0200
     1.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java	Sat Sep 05 22:34:50 2015 +0200
     1.3 @@ -590,7 +590,7 @@
     1.4                  w.write("    Object o = prop_" + p.name() + ";\n");
     1.5                  if (isModel[0]) {
     1.6                      w.write("    prop_" + p.name() + " = v;\n");
     1.7 -                    w.write("    if (TYPE.isSame(prop_" + p.name() + ", v)) return;\n");
     1.8 +                    w.write("    if (TYPE.isSame(o , v)) return;\n");
     1.9                  } else {
    1.10                      w.write("    if (TYPE.isSame(prop_" + p.name() + ", v)) return;\n");
    1.11                      w.write("    prop_" + p.name() + " = v;\n");
     2.1 --- a/json/src/test/java/org/netbeans/html/json/impl/DeepChangeTest.java	Mon Aug 31 22:55:01 2015 +0200
     2.2 +++ b/json/src/test/java/org/netbeans/html/json/impl/DeepChangeTest.java	Sat Sep 05 22:34:50 2015 +0200
     2.3 @@ -178,6 +178,31 @@
     2.4          assertEquals(o.changes, 1, "One change so far");
     2.5      }
     2.6  
     2.7 +    @Test public void changingModelClass() throws Exception {
     2.8 +        final MyY myY = new MyY("Ahoj", 0);
     2.9 +        MyX p = Models.bind(
    2.10 +            new MyX(myY, new MyY("Hi", 333), new MyY("Hello", 999)),
    2.11 +            c)
    2.12 +        .applyBindings();
    2.13 +        MyY realY = p.getOne();
    2.14 +
    2.15 +        Map m = (Map)Models.toRaw(p);
    2.16 +        Object v = m.get("one");
    2.17 +        assertNotNull(v, "Value should be in the map");
    2.18 +        assertEquals(v.getClass(), One.class, "It is instance of One");
    2.19 +        One o = (One)v;
    2.20 +        assertEquals(o.changes, 0, "No changes so far");
    2.21 +        assertFalse(o.pb.isReadOnly(), "Normal property");
    2.22 +        assertEquals(o.get(), myY);
    2.23 +        assertSame(o.get(), realY);
    2.24 +
    2.25 +        final MyY newY = new MyY("Hi", 1);
    2.26 +        p.setOne(newY);
    2.27 +
    2.28 +        assertSame(p.getOne(), newY);
    2.29 +        assertEquals(o.changes, 1, "One change");
    2.30 +    }
    2.31 +
    2.32      @Test public void addingIntoArray() throws Exception {
    2.33          MyX p = Models.bind(
    2.34              new MyX(new MyY("Ahoj", 0), new MyY("Hi", 333), new MyY("Hello", 999)
    2.35 @@ -417,10 +442,10 @@
    2.36      public void rebindReplacesTheInstance() throws Exception {
    2.37          BrwsrCtx ctx = Contexts.newBuilder().build();
    2.38          MyX x = new MyX();
    2.39 -        
    2.40 +
    2.41          MyY y = Models.bind(new MyY(), ctx);
    2.42          x.setOne(y);
    2.43 -        
    2.44 +
    2.45          assertSame(x.getOne(), y);
    2.46      }
    2.47