Verify that derived properties are also updated when an array is modified from inside of knockout binding
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,