blob: e4fb9335362e3ba433cf17c3212e70ea84add81e [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.user.client.ui;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.HTMLTable.ColumnFormatter;
/**
* Tests for {@link Grid}.
*/
public class GridTest extends HTMLTableTestBase {
@Override
public HTMLTable getTable(int row, int column) {
return new Grid(row, column);
}
public void testBounds() {
HTMLTable t = getTable(3, 3);
try {
t.setText(-1, 0, "hello");
fail("IndexOutOfBoundsException should have been thrown");
} catch (IndexOutOfBoundsException e) {
assertEquals("Cannot access a row with a negative index: -1",
e.getMessage());
}
try {
t.setText(0, -1, "hello");
fail("IndexOutOfBoundsException should have been thrown");
} catch (IndexOutOfBoundsException e) {
assertEquals("Cannot access a column with a negative index: -1",
e.getMessage());
}
try {
t.clearCell(3, 3);
fail("IndexOutOfBoundsException should have been thrown");
} catch (IndexOutOfBoundsException e) {
assertEquals("Row index: 3, Row size: 3", e.getMessage());
}
try {
t.getText(0, 5);
fail("IndexOutOfBoundsException should have been thrown");
} catch (Exception e) {
// Success.
}
}
public void testColumnFormatterIndexTooHigh() {
HTMLTable table = getTable(4, 4);
ColumnFormatter formatter = table.getColumnFormatter();
try {
formatter.getElement(4);
fail("Expected IndexOutOfBoundsException");
} catch (IndexOutOfBoundsException e) {
// Expected.
}
}
public void testColumnFormatterStyleName() {
Grid r = new Grid(4, 5);
Grid.ColumnFormatter columns = r.getColumnFormatter();
columns.setStyleName(0, "base");
columns.addStyleName(0, "a");
assertEquals("base a", columns.getStyleName(0));
columns.addStyleName(0, "b");
assertEquals("base a b", columns.getStyleName(0));
columns.addStyleName(0, "c");
assertEquals("base a b c", columns.getStyleName(0));
// Remove first.
columns.removeStyleName(0, "a");
assertEquals("base b c", columns.getStyleName(0));
// Remove last.
columns.removeStyleName(0, "c");
assertEquals("base b", columns.getStyleName(0));
// All five cols should be created.
Element e = DOM.getChild(r.getElement(), 0);
assertEquals(5, DOM.getChildCount(e));
columns.addStyleName(3, "a");
// There should still be five columns.
e = DOM.getChild(r.getElement(), 0);
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() {
Grid r = new Grid(1, 1);
try {
r.setWidget(0, 2, new Label("hello"));
fail("Expected IndexOutOfBoundsException");
} catch (IndexOutOfBoundsException e) {
assertEquals("Column index: 2, Column size: 1", e.getMessage());
}
try {
r.setWidget(2, 0, new Label("hello"));
fail("Expected IndexOutOfBoundsException");
} catch (IndexOutOfBoundsException e) {
assertEquals("Row index: 2, Row size: 1", e.getMessage());
}
}
/**
* Verify that rows can be inserted.
*/
public void testInsertion() {
Grid r = new Grid(4, 3);
assertEquals(4, r.getRowCount());
assertEquals(3, r.getColumnCount());
int index = r.insertRow(2);
assertEquals(index, 2);
assertEquals(5, r.getRowCount());
assertEquals(3, r.getColumnCount());
assertEquals(5, r.getDOMRowCount());
assertEquals(3, r.getDOMCellCount(2));
}
/**
* Ensures row and column counts stay in sync during resizing.
*/
public void testResizing() {
{
// Resize using resize/resizeRows/resizeColumns
Grid r = new Grid(4, 1);
assertEquals(4, r.getRowCount());
assertEquals(1, r.getColumnCount());
r.resizeRows(0);
assertEquals(0, r.getRowCount());
r.resizeColumns(0);
assertEquals(0, r.getColumnCount());
r.resize(3, 2);
assertEquals(3, r.getRowCount());
assertEquals(2, r.getColumnCount());
}
{
// Resize using removeRow
Grid r = new Grid(4, 1);
assertEquals(4, r.getRowCount());
assertEquals(1, r.getColumnCount());
r.removeRow(2);
assertEquals(3, r.getRowCount());
assertEquals(1, r.getColumnCount());
assertEquals(3, r.getDOMRowCount());
}
}
public void testResizeColumnGroup() {
Grid grid = new Grid(2, 2);
Element colGroup = grid.getColumnFormatter().columnGroup;
assertEquals(2, grid.getColumnCount());
assertEquals(2, colGroup.getChildCount());
grid.resizeColumns(5);
assertEquals(5, grid.getColumnCount());
assertEquals(5, colGroup.getChildCount());
grid.resizeColumns(1);
assertEquals(1, grid.getColumnCount());
assertEquals(1, colGroup.getChildCount());
}
}