package com.googlecode.gwt.test; import com.google.gwt.user.cellview.client.DataGrid; import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.SingleSelectionModel; import com.googlecode.gwt.test.utils.events.Browser; import org.junit.Before; import org.junit.Test; import java.util.Arrays; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; public class DataGridTest extends GwtTestTest { // The list of data to display. private static List<Contact> CONTACTS = Arrays.asList(new Contact("Gael", "666 Evil"), new Contact("John", "123 Fourth Road"), new Contact("Mary", "222 Lancer Lane")); private DataGrid<Contact> table; @Before public void beforeCellTableTest() { // Create a CellTable. table = new DataGrid<Contact>(); // Create name column. TextColumn<Contact> nameColumn = new TextColumn<Contact>() { @Override public String getValue(Contact contact) { return contact.name; } }; // Create address column. TextColumn<Contact> addressColumn = new TextColumn<Contact>() { @Override public String getValue(Contact contact) { return contact.address; } }; // Add the columns. table.addColumn(nameColumn, "Name"); table.addColumn(addressColumn, "Address"); // Set the total row count. This isn't strictly necessary, but it affects // paging calculations, so its good habit to keep the row count up to // date. table.setRowCount(CONTACTS.size(), true); // Push the data into the widget. table.setRowData(0, CONTACTS); table.setVisibleRange(0, 2); // Preconditions assertThat(table.getRowCount()).isEqualTo(3); assertThat(table.getVisibleItemCount()).isEqualTo(2); } @Test public void click() { // Given final StringBuilder sb = new StringBuilder(); // Add a selection model to handle user selection. final SingleSelectionModel<Contact> selectionModel = new SingleSelectionModel<Contact>(); table.setSelectionModel(selectionModel); selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { public void onSelectionChange(SelectionChangeEvent event) { Contact selected = selectionModel.getSelectedObject(); if (selected != null) { sb.append(selected.name).append(" : ").append(selected.address); } } }); // When 1 Browser.click(table, CONTACTS.get(0)); // Then 1 assertThat(sb.toString()).isEqualTo("Gael : 666 Evil"); assertThat(table.getSelectionModel().isSelected(CONTACTS.get(0))).isTrue(); // When 2 : deselect Browser.click(table, CONTACTS.get(0)); // Then 2 assertThat(sb.toString()).isEqualTo("Gael : 666 Evil"); assertThat(table.getSelectionModel().isSelected(CONTACTS.get(0))).isFalse(); } // A simple data type that represents a contact. private static class Contact { private final String address; private final String name; public Contact(String name, String address) { this.name = name; this.address = address; } } }