public void testAddRowCountChangeHandler() {
HasData<String> listView = new MockHasData<String>();
MockView<String> view = new MockView<String>();
HasDataPresenter<String> presenter = new HasDataPresenter<String>(listView, view, 10, null);
MockRowCountChangeHandler handler = new MockRowCountChangeHandler();
// Adding a handler should not invoke the handler.
// Add the handler to the view because it is the source of events.
HandlerRegistration reg = listView.addRowCountChangeHandler(handler);
assertEquals(-1, handler.getLastRowCount());
handler.reset();
// Change the row count.
presenter.setRowCount(100, true);
assertEquals(100, handler.getLastRowCount());
assertTrue(handler.isLastRowCountExact());
handler.reset();
// Set the same row count and verify no event is fired.
presenter.setRowCount(100, true);
assertEquals(-1, handler.getLastRowCount());
handler.reset();
// Change the row count again.
presenter.setRowCount(110, false);
assertEquals(110, handler.getLastRowCount());
assertFalse(handler.isLastRowCountExact());
handler.reset();
// Change only the isExact param and verify an event is fired.
presenter.setRowCount(110, true);
assertEquals(110, handler.getLastRowCount());
assertTrue(handler.isLastRowCountExact());
handler.reset();
// Remove the handler and verify it no longer receives events.
reg.removeHandler();
presenter.setRowCount(200, true);
assertEquals(-1, handler.getLastRowCount());
}