Fixing a bug in HTMLTable where cols are removed when a lower indexed col is accessed.
http://gwt-code-reviews.appspot.com/314803/show
Review by: spoon@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7903 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/Grid.java b/user/src/com/google/gwt/user/client/ui/Grid.java
index 8bd0884..7f9e513 100644
--- a/user/src/com/google/gwt/user/client/ui/Grid.java
+++ b/user/src/com/google/gwt/user/client/ui/Grid.java
@@ -200,7 +200,7 @@
numColumns = columns;
// Update the size of the colgroup.
- getColumnFormatter().resizeColumnGroup(columns);
+ getColumnFormatter().resizeColumnGroup(columns, false);
}
/**
diff --git a/user/src/com/google/gwt/user/client/ui/HTMLTable.java b/user/src/com/google/gwt/user/client/ui/HTMLTable.java
index 8278ca0..0199cff 100644
--- a/user/src/com/google/gwt/user/client/ui/HTMLTable.java
+++ b/user/src/com/google/gwt/user/client/ui/HTMLTable.java
@@ -482,8 +482,9 @@
* Resize the column group element.
*
* @param columns the number of columns
+ * @param growOnly true to only grow, false to shrink if needed
*/
- void resizeColumnGroup(int columns) {
+ void resizeColumnGroup(int columns, boolean growOnly) {
// The colgroup should always have at least one element. See
// prepareColumnGroup() for more details.
columns = Math.max(columns, 1);
@@ -493,7 +494,7 @@
for (int i = num; i < columns; i++) {
columnGroup.appendChild(Document.get().createColElement());
}
- } else if (num > columns) {
+ } else if (!growOnly && num > columns) {
for (int i = num; i > columns; i--) {
columnGroup.removeChild(columnGroup.getLastChild());
}
@@ -503,7 +504,7 @@
private Element ensureColumn(int col) {
prepareColumn(col);
prepareColumnGroup();
- resizeColumnGroup(col + 1);
+ resizeColumnGroup(col + 1, true);
return columnGroup.getChild(col).cast();
}
diff --git a/user/test/com/google/gwt/user/client/ui/GridTest.java b/user/test/com/google/gwt/user/client/ui/GridTest.java
index 0112482..c1e3553 100644
--- a/user/test/com/google/gwt/user/client/ui/GridTest.java
+++ b/user/test/com/google/gwt/user/client/ui/GridTest.java
@@ -89,14 +89,18 @@
columns.removeStyleName(0, "c");
assertEquals("base b", columns.getStyleName(0));
- // Only one column should be created.
+ // All five cols should be created.
Element e = DOM.getChild(r.getElement(), 0);
- assertEquals(1, DOM.getChildCount(e));
+ assertEquals(5, DOM.getChildCount(e));
columns.addStyleName(3, "a");
- // Now there shoud be three such columns .
+ // There should still be five columns.
e = DOM.getChild(r.getElement(), 0);
- assertEquals(4, DOM.getChildCount(e));
+ assertEquals(5, DOM.getChildCount(e));
+
+ // Querying column 0 should not invalidate column 3.
+ assertEquals("base b", columns.getStyleName(0));
+ assertEquals("a", columns.getStyleName(3));
}
public void testColumnMessage() {