package com.vaadin.tests.components.grid; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.IntStream; import org.easymock.Capture; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import com.vaadin.data.provider.DataProvider; import com.vaadin.data.provider.bov.Person; import com.vaadin.event.selection.MultiSelectionEvent; import com.vaadin.event.selection.MultiSelectionListener; import com.vaadin.shared.Registration; import com.vaadin.tests.util.MockUI; import com.vaadin.ui.Grid; import com.vaadin.ui.Grid.SelectionMode; import com.vaadin.ui.UI; import com.vaadin.ui.components.grid.GridSelectionModel; import com.vaadin.ui.components.grid.MultiSelectionModel; import com.vaadin.ui.components.grid.MultiSelectionModel.SelectAllCheckBoxVisibility; import com.vaadin.ui.components.grid.MultiSelectionModelImpl; import elemental.json.JsonObject; public class GridMultiSelectionModelTest { public static final Person PERSON_C = new Person("c", 3); public static final Person PERSON_B = new Person("b", 2); public static final Person PERSON_A = new Person("a", 1); private Grid<Person> grid; private MultiSelectionModelImpl<Person> selectionModel; private Capture<List<Person>> currentSelectionCapture; private Capture<List<Person>> oldSelectionCapture; private AtomicInteger events; public static class CustomMultiSelectionModel extends MultiSelectionModelImpl<String> { public final Map<String, Boolean> generatedData = new LinkedHashMap<>(); @Override public void generateData(String item, JsonObject jsonObject) { super.generateData(item, jsonObject); // capture updated row generatedData.put(item, isSelected(item)); } } public static class CustomSelectionModelGrid extends Grid<String> { public CustomSelectionModelGrid() { this(new CustomMultiSelectionModel()); } public CustomSelectionModelGrid( GridSelectionModel<String> selectionModel) { super(); setSelectionModel(selectionModel); } } private static class TestMultiSelectionModel extends MultiSelectionModelImpl<Object> { public TestMultiSelectionModel() { getState(false).selectionAllowed = false; } @Override protected void updateSelection(Set<Object> addedItems, Set<Object> removedItems, boolean userOriginated) { super.updateSelection(addedItems, removedItems, userOriginated); } } @Before public void setUp() { grid = new Grid<>(); selectionModel = (MultiSelectionModelImpl<Person>) grid .setSelectionMode(SelectionMode.MULTI); grid.setItems(PERSON_A, PERSON_B, PERSON_C); currentSelectionCapture = new Capture<>(); oldSelectionCapture = new Capture<>(); events = new AtomicInteger(); selectionModel.addMultiSelectionListener(event -> { currentSelectionCapture .setValue(new ArrayList<>(event.getNewSelection())); oldSelectionCapture .setValue(new ArrayList<>(event.getOldSelection())); events.incrementAndGet(); }); } @Test(expected = IllegalStateException.class) public void throwExcpetionWhenSelectionIsDisallowed() { TestMultiSelectionModel model = new TestMultiSelectionModel(); model.updateSelection(Collections.emptySet(), Collections.emptySet(), true); } @Test(expected = IllegalStateException.class) public void selectionModelChanged_usingPreviousSelectionModel_throws() { grid.setSelectionMode(SelectionMode.SINGLE); selectionModel.select(PERSON_A); } @Test public void changingSelectionModel_firesSelectionEvent() { Grid<String> customGrid = new Grid<>(); customGrid.setSelectionMode(SelectionMode.MULTI); customGrid.setItems("Foo", "Bar", "Baz"); List<String> selectionChanges = new ArrayList<>(); Capture<List<String>> oldSelectionCapture = new Capture<>(); ((MultiSelectionModelImpl<String>) customGrid.getSelectionModel()) .addMultiSelectionListener(e -> { selectionChanges.addAll(e.getValue()); oldSelectionCapture .setValue(new ArrayList<>(e.getOldSelection())); }); customGrid.getSelectionModel().select("Foo"); assertEquals(Arrays.asList("Foo"), selectionChanges); selectionChanges.clear(); customGrid.getSelectionModel().select("Bar"); assertEquals("Foo", customGrid.getSelectionModel().getFirstSelectedItem().get()); assertEquals(Arrays.asList("Foo", "Bar"), selectionChanges); selectionChanges.clear(); customGrid.setSelectionMode(SelectionMode.SINGLE); assertFalse(customGrid.getSelectionModel().getFirstSelectedItem() .isPresent()); assertEquals(Arrays.asList(), selectionChanges); assertEquals(Arrays.asList("Foo", "Bar"), oldSelectionCapture.getValue()); } @Test public void serverSideSelection_GridChangingSelectionModel_sendsUpdatedRowsToClient() { Grid<String> customGrid = new CustomSelectionModelGrid(); CustomMultiSelectionModel customModel = (CustomMultiSelectionModel) customGrid .getSelectionModel(); customGrid.setItems("Foo", "Bar", "Baz"); customGrid.getDataCommunicator().beforeClientResponse(true); Assert.assertFalse("Item should have been updated as selected", customModel.generatedData.get("Foo")); Assert.assertFalse("Item should have been updated as NOT selected", customModel.generatedData.get("Bar")); Assert.assertFalse("Item should have been updated as NOT selected", customModel.generatedData.get("Baz")); customModel.generatedData.clear(); customGrid.getSelectionModel().select("Foo"); customGrid.getDataCommunicator().beforeClientResponse(false); Assert.assertTrue("Item should have been updated as selected", customModel.generatedData.get("Foo")); Assert.assertFalse("Item should have NOT been updated", customModel.generatedData.containsKey("Bar")); Assert.assertFalse("Item should have NOT been updated", customModel.generatedData.containsKey("Baz")); customModel.generatedData.clear(); customModel.updateSelection(asSet("Bar"), asSet("Foo")); customGrid.getDataCommunicator().beforeClientResponse(false); Assert.assertFalse("Item should have been updated as NOT selected", customModel.generatedData.get("Foo")); Assert.assertTrue("Item should have been updated as selected", customModel.generatedData.get("Bar")); Assert.assertFalse("Item should have NOT been updated", customModel.generatedData.containsKey("Baz")); // switch to single to cause event customModel.generatedData.clear(); customGrid.setSelectionMode(SelectionMode.SINGLE); customGrid.getDataCommunicator().beforeClientResponse(false); // changing selection model should trigger row updates, but the old // selection model is not triggered as it has been removed Assert.assertTrue(customModel.generatedData.isEmpty()); // not triggered } @Test public void select_gridWithStrings() { Grid<String> gridWithStrings = new Grid<>(); gridWithStrings.setSelectionMode(SelectionMode.MULTI); gridWithStrings.setItems("Foo", "Bar", "Baz"); GridSelectionModel<String> model = gridWithStrings.getSelectionModel(); Assert.assertFalse(model.isSelected("Foo")); model.select("Foo"); Assert.assertTrue(model.isSelected("Foo")); Assert.assertEquals(Optional.of("Foo"), model.getFirstSelectedItem()); model.select("Bar"); Assert.assertTrue(model.isSelected("Foo")); Assert.assertTrue(model.isSelected("Bar")); Assert.assertEquals(Arrays.asList("Foo", "Bar"), new ArrayList<>(model.getSelectedItems())); model.deselect("Bar"); Assert.assertFalse(model.isSelected("Bar")); Assert.assertTrue(model.getFirstSelectedItem().isPresent()); Assert.assertEquals(Arrays.asList("Foo"), new ArrayList<>(model.getSelectedItems())); } @Test public void select() { selectionModel.select(PERSON_B); assertEquals(PERSON_B, selectionModel.getFirstSelectedItem().orElse(null)); assertEquals(Optional.of(PERSON_B), selectionModel.getFirstSelectedItem()); assertFalse(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_B), currentSelectionCapture.getValue()); selectionModel.select(PERSON_A); assertEquals(PERSON_B, selectionModel.getFirstSelectedItem().orElse(null)); assertTrue(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_B, PERSON_A), currentSelectionCapture.getValue()); assertEquals(2, events.get()); } @Test public void deselect() { selectionModel.select(PERSON_B); selectionModel.deselect(PERSON_B); assertFalse(selectionModel.getFirstSelectedItem().isPresent()); assertFalse(selectionModel.isSelected(PERSON_A)); assertFalse(selectionModel.isSelected(PERSON_B)); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(), currentSelectionCapture.getValue()); assertEquals(2, events.get()); } @Test public void selectItems() { selectionModel.selectItems(PERSON_C, PERSON_B); assertEquals(PERSON_C, selectionModel.getFirstSelectedItem().orElse(null)); assertEquals(Optional.of(PERSON_C), selectionModel.getFirstSelectedItem()); assertFalse(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertTrue(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_C, PERSON_B), currentSelectionCapture.getValue()); selectionModel.selectItems(PERSON_A, PERSON_C); // partly NOOP assertTrue(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertTrue(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_C, PERSON_B, PERSON_A), currentSelectionCapture.getValue()); assertEquals(2, events.get()); } @Test public void deselectItems() { selectionModel.selectItems(PERSON_C, PERSON_A, PERSON_B); selectionModel.deselectItems(PERSON_A); assertEquals(PERSON_C, selectionModel.getFirstSelectedItem().orElse(null)); assertEquals(Optional.of(PERSON_C), selectionModel.getFirstSelectedItem()); assertFalse(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertTrue(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_C, PERSON_B), currentSelectionCapture.getValue()); selectionModel.deselectItems(PERSON_A, PERSON_B, PERSON_C); assertNull(selectionModel.getFirstSelectedItem().orElse(null)); assertEquals(Optional.empty(), selectionModel.getFirstSelectedItem()); assertFalse(selectionModel.isSelected(PERSON_A)); assertFalse(selectionModel.isSelected(PERSON_B)); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(), currentSelectionCapture.getValue()); assertEquals(3, events.get()); } @Test public void selectionEvent_newSelection_oldSelection() { selectionModel.selectItems(PERSON_C, PERSON_A, PERSON_B); assertEquals(Arrays.asList(PERSON_C, PERSON_A, PERSON_B), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(), oldSelectionCapture.getValue()); selectionModel.deselect(PERSON_A); assertEquals(Arrays.asList(PERSON_C, PERSON_B), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_C, PERSON_A, PERSON_B), oldSelectionCapture.getValue()); selectionModel.deselectItems(PERSON_A, PERSON_B, PERSON_C); assertEquals(Arrays.asList(), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_C, PERSON_B), oldSelectionCapture.getValue()); selectionModel.selectItems(PERSON_A); assertEquals(Arrays.asList(PERSON_A), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(), oldSelectionCapture.getValue()); selectionModel.updateSelection( new LinkedHashSet<>(Arrays.asList(PERSON_B, PERSON_C)), new LinkedHashSet<>(Arrays.asList(PERSON_A))); assertEquals(Arrays.asList(PERSON_B, PERSON_C), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_A), oldSelectionCapture.getValue()); selectionModel.deselectAll(); assertEquals(Arrays.asList(), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_B, PERSON_C), oldSelectionCapture.getValue()); selectionModel.select(PERSON_C); assertEquals(Arrays.asList(PERSON_C), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(), oldSelectionCapture.getValue()); selectionModel.deselect(PERSON_C); assertEquals(Arrays.asList(), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_C), oldSelectionCapture.getValue()); } @Test public void deselectAll() { selectionModel.selectItems(PERSON_A, PERSON_C, PERSON_B); assertTrue(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertTrue(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_A, PERSON_C, PERSON_B), currentSelectionCapture.getValue()); assertEquals(1, events.get()); selectionModel.deselectAll(); assertFalse(selectionModel.isSelected(PERSON_A)); assertFalse(selectionModel.isSelected(PERSON_B)); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_A, PERSON_C, PERSON_B), oldSelectionCapture.getValue()); assertEquals(2, events.get()); selectionModel.select(PERSON_C); assertFalse(selectionModel.isSelected(PERSON_A)); assertFalse(selectionModel.isSelected(PERSON_B)); assertTrue(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_C), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(), oldSelectionCapture.getValue()); assertEquals(3, events.get()); selectionModel.deselectAll(); assertFalse(selectionModel.isSelected(PERSON_A)); assertFalse(selectionModel.isSelected(PERSON_B)); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_C), oldSelectionCapture.getValue()); assertEquals(4, events.get()); selectionModel.deselectAll(); assertEquals(4, events.get()); } @Test public void selectAll() { selectionModel.selectAll(); assertTrue(selectionModel.isAllSelected()); assertTrue(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertTrue(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_A, PERSON_B, PERSON_C), currentSelectionCapture.getValue()); assertEquals(1, events.get()); selectionModel.deselectItems(PERSON_A, PERSON_C); assertFalse(selectionModel.isAllSelected()); assertFalse(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_A, PERSON_B, PERSON_C), oldSelectionCapture.getValue()); selectionModel.selectAll(); assertTrue(selectionModel.isAllSelected()); assertTrue(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertTrue(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_B, PERSON_A, PERSON_C), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_B), oldSelectionCapture.getValue()); assertEquals(3, events.get()); } @Test public void updateSelection() { selectionModel.updateSelection(asSet(PERSON_A), Collections.emptySet()); assertTrue(selectionModel.isSelected(PERSON_A)); assertFalse(selectionModel.isSelected(PERSON_B)); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_A), currentSelectionCapture.getValue()); assertEquals(1, events.get()); selectionModel.updateSelection(asSet(PERSON_B), asSet(PERSON_A)); assertFalse(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_B), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_A), oldSelectionCapture.getValue()); assertEquals(2, events.get()); selectionModel.updateSelection(asSet(PERSON_B), asSet(PERSON_A)); // NOOP assertFalse(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_B), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_A), oldSelectionCapture.getValue()); assertEquals(2, events.get()); selectionModel.updateSelection(asSet(PERSON_A, PERSON_C), asSet(PERSON_A)); // partly NOOP assertFalse(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertTrue(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_B, PERSON_C), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_B), oldSelectionCapture.getValue()); assertEquals(3, events.get()); selectionModel.updateSelection(asSet(PERSON_B, PERSON_A), asSet(PERSON_B)); // partly NOOP assertTrue(selectionModel.isSelected(PERSON_A)); assertTrue(selectionModel.isSelected(PERSON_B)); assertTrue(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(PERSON_B, PERSON_C, PERSON_A), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_B, PERSON_C), oldSelectionCapture.getValue()); assertEquals(4, events.get()); selectionModel.updateSelection(asSet(), asSet(PERSON_B, PERSON_A, PERSON_C)); assertFalse(selectionModel.isSelected(PERSON_A)); assertFalse(selectionModel.isSelected(PERSON_B)); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(), currentSelectionCapture.getValue()); assertEquals(Arrays.asList(PERSON_B, PERSON_C, PERSON_A), oldSelectionCapture.getValue()); assertEquals(5, events.get()); } private <T> Set<T> asSet(@SuppressWarnings("unchecked") T... people) { return new LinkedHashSet<>(Arrays.asList(people)); } @Test public void selectTwice() { selectionModel.select(PERSON_C); selectionModel.select(PERSON_C); assertEquals(PERSON_C, selectionModel.getFirstSelectedItem().orElse(null)); assertFalse(selectionModel.isSelected(PERSON_A)); assertFalse(selectionModel.isSelected(PERSON_B)); assertTrue(selectionModel.isSelected(PERSON_C)); assertEquals(Optional.of(PERSON_C), selectionModel.getFirstSelectedItem()); assertEquals(Arrays.asList(PERSON_C), currentSelectionCapture.getValue()); assertEquals(1, events.get()); } @Test public void deselectTwice() { selectionModel.select(PERSON_C); assertEquals(Arrays.asList(PERSON_C), currentSelectionCapture.getValue()); assertEquals(1, events.get()); selectionModel.deselect(PERSON_C); assertFalse(selectionModel.getFirstSelectedItem().isPresent()); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(), currentSelectionCapture.getValue()); assertEquals(2, events.get()); selectionModel.deselect(PERSON_C); assertFalse(selectionModel.getFirstSelectedItem().isPresent()); assertFalse(selectionModel.isSelected(PERSON_A)); assertFalse(selectionModel.isSelected(PERSON_B)); assertFalse(selectionModel.isSelected(PERSON_C)); assertEquals(Arrays.asList(), currentSelectionCapture.getValue()); assertEquals(2, events.get()); } @SuppressWarnings({ "serial" }) @Test public void addValueChangeListener() { String value = "foo"; AtomicReference<MultiSelectionListener<String>> selectionListener = new AtomicReference<>(); Registration registration = Mockito.mock(Registration.class); MultiSelectionModelImpl<String> model = new MultiSelectionModelImpl<String>() { @Override public Registration addMultiSelectionListener( MultiSelectionListener<String> listener) { selectionListener.set(listener); return registration; } @Override public Set<String> getSelectedItems() { return new LinkedHashSet<>(Arrays.asList(value)); } }; Grid<String> grid = new CustomSelectionModelGrid(model); grid.setItems("foo", "bar"); AtomicReference<MultiSelectionEvent<String>> event = new AtomicReference<>(); Registration actualRegistration = model .addMultiSelectionListener(evt -> { Assert.assertNull(event.get()); event.set(evt); }); Assert.assertSame(registration, actualRegistration); selectionListener.get().selectionChange(new MultiSelectionEvent<>(grid, model.asMultiSelect(), Collections.emptySet(), true)); Assert.assertEquals(grid, event.get().getComponent()); Assert.assertEquals(new LinkedHashSet<>(Arrays.asList(value)), event.get().getValue()); Assert.assertTrue(event.get().isUserOriginated()); } @Test public void selectAllCheckboxVisible__inMemoryDataProvider() { UI ui = new MockUI(); Grid<String> grid = new Grid<>(); MultiSelectionModel<String> model = (MultiSelectionModel<String>) grid .setSelectionMode(SelectionMode.MULTI); ui.setContent(grid); // no items yet, default data provider is empty not in memory one Assert.assertFalse(model.isSelectAllCheckBoxVisible()); Assert.assertEquals(SelectAllCheckBoxVisibility.DEFAULT, model.getSelectAllCheckBoxVisibility()); grid.setItems("Foo", "Bar", "Baz"); // in-memory container keeps default Assert.assertTrue(model.isSelectAllCheckBoxVisible()); Assert.assertEquals(SelectAllCheckBoxVisibility.DEFAULT, model.getSelectAllCheckBoxVisibility()); // change to explicit NO model.setSelectAllCheckBoxVisibility( SelectAllCheckBoxVisibility.HIDDEN); Assert.assertEquals(SelectAllCheckBoxVisibility.HIDDEN, model.getSelectAllCheckBoxVisibility()); Assert.assertFalse(model.isSelectAllCheckBoxVisible()); // change to explicit YES model.setSelectAllCheckBoxVisibility( SelectAllCheckBoxVisibility.VISIBLE); Assert.assertEquals(SelectAllCheckBoxVisibility.VISIBLE, model.getSelectAllCheckBoxVisibility()); Assert.assertTrue(model.isSelectAllCheckBoxVisible()); } @Test public void selectAllCheckboxVisible__lazyDataProvider() { Grid<String> grid = new Grid<>(); UI ui = new MockUI(); ui.setContent(grid); MultiSelectionModel<String> model = (MultiSelectionModel<String>) grid .setSelectionMode(SelectionMode.MULTI); // no items yet, default data provider is empty not in memory one Assert.assertFalse(model.isSelectAllCheckBoxVisible()); Assert.assertEquals(SelectAllCheckBoxVisibility.DEFAULT, model.getSelectAllCheckBoxVisibility()); grid.setDataProvider( DataProvider .fromCallbacks( query -> IntStream .range(query.getOffset(), Math.max(query.getOffset() + query.getLimit() + 1, 1000)) .mapToObj(i -> "Item " + i), query -> 1000)); // not in-memory -> checkbox is hidden Assert.assertFalse(model.isSelectAllCheckBoxVisible()); Assert.assertEquals(SelectAllCheckBoxVisibility.DEFAULT, model.getSelectAllCheckBoxVisibility()); // change to explicit YES model.setSelectAllCheckBoxVisibility( SelectAllCheckBoxVisibility.VISIBLE); Assert.assertEquals(SelectAllCheckBoxVisibility.VISIBLE, model.getSelectAllCheckBoxVisibility()); Assert.assertTrue(model.isSelectAllCheckBoxVisible()); // change to explicit NO model.setSelectAllCheckBoxVisibility( SelectAllCheckBoxVisibility.HIDDEN); Assert.assertEquals(SelectAllCheckBoxVisibility.HIDDEN, model.getSelectAllCheckBoxVisibility()); Assert.assertFalse(model.isSelectAllCheckBoxVisible()); // change back to depends on data provider model.setSelectAllCheckBoxVisibility( SelectAllCheckBoxVisibility.DEFAULT); Assert.assertFalse(model.isSelectAllCheckBoxVisible()); Assert.assertEquals(SelectAllCheckBoxVisibility.DEFAULT, model.getSelectAllCheckBoxVisibility()); } }