package com.googlecode.gwt.test; import com.google.gwt.cell.client.TextCell; import com.google.gwt.user.cellview.client.CellList; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.SingleSelectionModel; import com.googlecode.gwt.test.utils.events.Browser; import com.googlecode.gwt.test.utils.events.Browser.BrowserErrorHandler; 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 CellListTest extends GwtTestTest { private static final List<String> DAYS = Arrays.asList("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"); private final StringBuilder sb = new StringBuilder(); private CellList<String> cellList; @Before public void beforeCellListTest() { sb.delete(0, sb.length()); setBrowserErrorHandler(new BrowserErrorHandler() { public void onError(String errorMessage) { sb.append(errorMessage); } }); // Create a cell to render each value. TextCell textCell = new TextCell(); // Create the CellList that uses the cell. cellList = new CellList<String>(textCell); // 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. cellList.setRowCount(DAYS.size(), true); // Push the data into the widget. cellList.setRowData(0, DAYS); cellList.setVisibleRange(0, 5); // Add it to the root panel. RootPanel.get().add(cellList); // Preconditions assertThat(cellList.getRowCount()).isEqualTo(DAYS.size()); assertThat(cellList.getVisibleItemCount()).isEqualTo(5); assertThat(cellList.getVisibleItem(cellList.getVisibleItemCount() - 1)).isEqualTo("Thursday"); } @Test public void selectWithClick() { // Given final StringBuilder sb = new StringBuilder(); final SingleSelectionModel<String> selectionModel = new SingleSelectionModel<String>(); cellList.setSelectionModel(selectionModel); selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { public void onSelectionChange(SelectionChangeEvent event) { String selected = selectionModel.getSelectedObject(); if (selected != null) { sb.append("selected : " + selected); } } }); // When 1 Browser.click(cellList, "Wednesday"); // Then 1 assertThat(sb.toString()).isEqualTo("selected : Wednesday"); assertThat(cellList.getSelectionModel().isSelected("Wednesday")).isTrue(); // When 2 : deselect Browser.click(cellList, "Wednesday"); // Then 2 assertThat(sb.toString()).isEqualTo("selected : Wednesday"); assertThat(cellList.getSelectionModel().isSelected("Wednesday")).isFalse(); } @Test public void selectWithClick_OutOfRange() { // Given final SingleSelectionModel<String> selectionModel = new SingleSelectionModel<String>(); cellList.setSelectionModel(selectionModel); selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { public void onSelectionChange(SelectionChangeEvent event) { String selected = selectionModel.getSelectedObject(); if (selected != null) { sb.append("selected : " + selected); } } }); Browser.click(cellList, "Saturday"); // Then : no trigger because "Saturday" is not visible assertThat(sb.toString()).isEqualTo("the item to click is now visible in the targeted CellList instance"); assertThat(cellList.getSelectionModel().isSelected("Saturday")).isFalse(); } }