Verify that derived properties are also updated when an array is modified from inside of knockout binding MutableArrays
authorJaroslav Tulach <jtulach@netbeans.org>
Tue, 26 Aug 2014 17:35:10 +0200
branchMutableArrays
changeset 830861f15abe944
parent 829 1baad5268149
child 831 e37388a5f7d1
Verify that derived properties are also updated when an array is modified from inside of knockout binding
json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java
     1.1 --- a/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java	Tue Aug 26 17:34:03 2014 +0200
     1.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java	Tue Aug 26 17:35:10 2014 +0200
     1.3 @@ -42,6 +42,7 @@
     1.4   */
     1.5  package net.java.html.json.tests;
     1.6  
     1.7 +import java.util.Arrays;
     1.8  import java.util.List;
     1.9  import java.util.Timer;
    1.10  import java.util.TimerTask;
    1.11 @@ -76,6 +77,14 @@
    1.12          A, B;
    1.13      }
    1.14      
    1.15 +    @ComputedProperty static List<Integer> resultLengths(List<String> results) {
    1.16 +        Integer[] arr = new Integer[results.size()];
    1.17 +        for (int i = 0; i < arr.length; i++) {
    1.18 +            arr[i] = results.get(i).length();
    1.19 +        }
    1.20 +        return Arrays.asList(arr);
    1.21 +    }
    1.22 +    
    1.23      @KOTest public void modifyValueAssertChangeInModelOnEnum() throws Throwable {
    1.24          Object exp = Utils.exposeHTML(KnockoutTest.class, 
    1.25              "Latitude: <input id='input' data-bind=\"value: choice\"></input>\n"
    1.26 @@ -601,7 +610,7 @@
    1.27              Utils.exposeHTML(KnockoutTest.class, "");
    1.28          }
    1.29      }
    1.30 -    
    1.31 +
    1.32      @KOTest public void intArrayModificationVisible() throws Exception {
    1.33          Object exp = Utils.exposeHTML(KnockoutTest.class,
    1.34                  "<div>\n"
    1.35 @@ -634,6 +643,39 @@
    1.36              Utils.exposeHTML(KnockoutTest.class, "");
    1.37          }
    1.38      }
    1.39 +
    1.40 +    @KOTest public void derivedIntArrayModificationVisible() throws Exception {
    1.41 +        Object exp = Utils.exposeHTML(KnockoutTest.class,
    1.42 +                "<div>\n"
    1.43 +                + "<ul id='ul' data-bind='foreach: resultLengths'>\n"
    1.44 +                + "  <li data-bind='text: $data'></li>\n"
    1.45 +                + "</ul>\n"
    1.46 +              + "</div>\n"
    1.47 +        );
    1.48 +        try {
    1.49 +            KnockoutModel m = Models.bind(new KnockoutModel(), newContext());
    1.50 +            m.getResults().add("Ahoj");
    1.51 +            m.getResults().add("Hello");
    1.52 +            m.applyBindings();
    1.53 +            
    1.54 +            int cnt = Utils.countChildren(KnockoutTest.class, "ul");
    1.55 +            assert cnt == 2 : "Two children " + cnt;
    1.56 +            
    1.57 +            Object arr = Utils.addChildren(KnockoutTest.class, "ul", "results", "Hi");
    1.58 +            assert arr instanceof Object[] : "Got back an array: " + arr;
    1.59 +            final int len = ((Object[])arr).length;
    1.60 +            
    1.61 +            assert len == 3 : "Three elements in the array " + len;
    1.62 +            
    1.63 +            int newCnt = Utils.countChildren(KnockoutTest.class, "ul");
    1.64 +            assert newCnt == 3 : "Three children in the DOM: " + newCnt;
    1.65 +            
    1.66 +            assert m.getResultLengths().size() == 3 : "Three java ints: " + m.getResultLengths();
    1.67 +            assert m.getResultLengths().get(2) == 2 : "Size is two: " + m.getResultLengths();
    1.68 +        } finally {
    1.69 +            Utils.exposeHTML(KnockoutTest.class, "");
    1.70 +        }
    1.71 +    }
    1.72      
    1.73      @KOTest public void archetypeArrayModificationVisible() throws Exception {
    1.74          Object exp = Utils.exposeHTML(KnockoutTest.class,