javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ModelTest.java
branchmodel
changeset 499 af027874f93e
parent 491 14268cd404a4
child 500 f9e80d48e9b4
     1.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ModelTest.java	Sun Jan 20 14:29:10 2013 +0100
     1.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ModelTest.java	Mon Jan 21 10:06:42 2013 +0100
     1.3 @@ -17,6 +17,8 @@
     1.4   */
     1.5  package org.apidesign.bck2brwsr.htmlpage;
     1.6  
     1.7 +import java.util.ArrayList;
     1.8 +import java.util.List;
     1.9  import org.apidesign.bck2brwsr.htmlpage.api.ComputedProperty;
    1.10  import org.apidesign.bck2brwsr.htmlpage.api.Page;
    1.11  import org.apidesign.bck2brwsr.htmlpage.api.Property;
    1.12 @@ -28,7 +30,8 @@
    1.13   * @author Jaroslav Tulach <jtulach@netbeans.org>
    1.14   */
    1.15  @Page(xhtml = "Empty.html", className = "Model", properties = {
    1.16 -    @Property(name = "value", type = int.class)
    1.17 +    @Property(name = "value", type = int.class),
    1.18 +    @Property(name = "unrelated", type = long.class)
    1.19  })
    1.20  public class ModelTest {
    1.21      @Test public void classGeneratedWithSetterGetter() {
    1.22 @@ -43,8 +46,36 @@
    1.23          assertEquals(16, Model.getPowerValue());
    1.24      }
    1.25      
    1.26 +    @Test public void derivedPropertiesAreNotified() {
    1.27 +        MockKnockout my = new MockKnockout();
    1.28 +        MockKnockout.next = my;
    1.29 +        
    1.30 +        Model.applyBindings();
    1.31 +        
    1.32 +        Model.setValue(33);
    1.33 +        
    1.34 +        assertEquals(my.mutated.size(), 2, "Two properties changed: " + my.mutated);
    1.35 +        assertTrue(my.mutated.contains("powerValue"), "Power value is in there: " + my.mutated);
    1.36 +        assertTrue(my.mutated.contains("value"), "Simple value is in there: " + my.mutated);
    1.37 +        
    1.38 +        my.mutated.clear();
    1.39 +        
    1.40 +        Model.setUnrelated(44);
    1.41 +        assertEquals(my.mutated.size(), 1, "One property changed");
    1.42 +        assertTrue(my.mutated.contains("unrelated"), "Its name is unrelated");
    1.43 +    }
    1.44 +    
    1.45      @ComputedProperty
    1.46      static int powerValue(int value) {
    1.47          return value * value;
    1.48      }
    1.49 +    
    1.50 +    static class MockKnockout extends Knockout {
    1.51 +        List<String> mutated = new ArrayList<String>();
    1.52 +        
    1.53 +        @Override
    1.54 +        public void valueHasMutated(String prop) {
    1.55 +            mutated.add(prop);
    1.56 +        }
    1.57 +    }
    1.58  }