# HG changeset patch # User Jaroslav Tulach # Date 1361284961 -3600 # Node ID 06d89ffe489e01a374a72719f96ebde83e58c7d4 # Parent 1bc37d5f30d8531cc3c5abe239849440cd1d6422 Derived properties can return list diff -r 1bc37d5f30d8 -r 06d89ffe489e javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ModelTest.java --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ModelTest.java Tue Feb 19 15:41:37 2013 +0100 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ModelTest.java Tue Feb 19 15:42:41 2013 +0100 @@ -18,6 +18,7 @@ package org.apidesign.bck2brwsr.htmlpage; import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.ListIterator; @@ -34,6 +35,7 @@ */ @Page(xhtml = "Empty.html", className = "Model", properties = { @Property(name = "value", type = int.class), + @Property(name = "count", type = int.class), @Property(name = "unrelated", type = long.class), @Property(name = "names", type = String.class, array = true), @Property(name = "values", type = int.class, array = true) @@ -102,6 +104,29 @@ assertEquals(model.getValues().get(0), Integer.valueOf(10), "Really ten"); } + + @Test public void derivedArrayProp() { + MockKnockout my = new MockKnockout(); + MockKnockout.next = my; + + model.applyBindings(); + + model.setCount(10); + + List arr = model.getRepeat(); + assertEquals(arr.size(), 10, "Ten items: " + arr); + + my.mutated.clear(); + + model.setCount(5); + + arr = model.getRepeat(); + assertEquals(arr.size(), 5, "Five items: " + arr); + + assertEquals(my.mutated.size(), 2, "Two properties changed: " + my.mutated); + assertTrue(my.mutated.contains("repeat"), "Array is in there: " + my.mutated); + assertTrue(my.mutated.contains("count"), "Count is in there: " + my.mutated); + } @Test public void derivedPropertiesAreNotified() { MockKnockout my = new MockKnockout(); @@ -158,6 +183,11 @@ return "Not allowed callback!"; } + @ComputedProperty + static List repeat(int count) { + return Collections.nCopies(count, "Hello"); + } + static class MockKnockout extends Knockout { List mutated = new ArrayList();