Fixing a bug in CellTree where we always pass null as the key for the rendered object instead of passing the key.
Review at http://gwt-code-reviews.appspot.com/1070801
Review by: pdr@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9179 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java b/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
index 7104c01..2a6c71b 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
@@ -186,7 +186,7 @@
}
// Render cell contents
SafeHtmlBuilder cellBuilder = new SafeHtmlBuilder();
- cell.render(value, null, cellBuilder);
+ cell.render(value, key, cellBuilder);
SafeHtml innerDiv = template.innerDiv(paddingDirection, imageWidth,
innerClasses.toString(), image, itemValueStyle,
diff --git a/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java b/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
index 18bc2cc..17b1b35 100644
--- a/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
+++ b/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
@@ -22,9 +22,11 @@
import com.google.gwt.event.logical.shared.OpenEvent;
import com.google.gwt.event.logical.shared.OpenHandler;
import com.google.gwt.junit.client.GWTTestCase;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.view.client.AbstractDataProvider;
import com.google.gwt.view.client.ListDataProvider;
+import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.TreeViewModel;
import java.util.ArrayList;
@@ -192,6 +194,53 @@
}
/**
+ * Test that the correct values are sent to the Cell to be rendered.
+ */
+ public void testRenderWithKeyProvider() {
+ // Create a cell that verifies the render args.
+ final List<String> rendered = new ArrayList<String>();
+ final Cell<String> cell = new TextCell() {
+ @Override
+ public void render(String data, Object key, SafeHtmlBuilder sb) {
+ int call = rendered.size();
+ rendered.add(data);
+ assertTrue("render() called more than thrice", rendered.size() < 4);
+
+ assertEquals(call + "value", data);
+ assertTrue(key instanceof Integer);
+ assertEquals(call, key);
+ }
+ };
+
+ // Create a model with only one level, and three values at that level.
+ TreeViewModel model = new TreeViewModel() {
+ public NodeInfo<?> getNodeInfo(Object value) {
+ // The key provider returns the first char as an integer.
+ ProvidesKey<String> keyProvider = new ProvidesKey<String>() {
+ public Object getKey(String item) {
+ return Integer.parseInt(item.substring(0, 1));
+ }
+ };
+ ListDataProvider<String> dataProvider = new ListDataProvider<String>(
+ keyProvider);
+ dataProvider.getList().add("0value");
+ dataProvider.getList().add("1value");
+ dataProvider.getList().add("2value");
+ return new DefaultNodeInfo<String>(dataProvider, cell);
+ }
+
+ public boolean isLeaf(Object value) {
+ return value != null;
+ }
+ };
+
+ // Create a tree.
+ new CellTree(model, null);
+ assertEquals("Cell#render() should be called exactly thrice", 3,
+ rendered.size());
+ }
+
+ /**
* Test that opening a sibling node works.
*/
public void testOpenSiblingNode() {