package com.vaadin.tests.server.component.grid; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.vaadin.ui.Component; import com.vaadin.ui.Grid; import com.vaadin.ui.Label; public class GridDetailsTest { private final class DummyLabel extends Label { private DummyLabel(String content) { super(content); } @Override public String getConnectorId() { return ""; } } public static class TestGrid extends Grid<String> { /** * Used to execute data generation */ public void runDataGeneration() { super.getDataCommunicator().beforeClientResponse(true); } } private TestGrid grid; private List<String> data; @Before public void setUp() { grid = new TestGrid(); // Setup Grid and generate some details data = new ArrayList<>(Arrays.asList("Foo", "Bar")); grid.setItems(data); grid.setDetailsGenerator(s -> new DummyLabel(s)); data.forEach(s -> grid.setDetailsVisible(s, true)); grid.runDataGeneration(); } @Test public void testGridComponentIteratorContainsDetailsComponents() { Iterator<Component> i = grid.iterator(); while (i.hasNext()) { Component c = i.next(); if (c instanceof Label) { String value = ((Label) c).getValue(); Assert.assertTrue( "Unexpected label in component iterator with value " + value, data.remove(value)); } else { Assert.fail( "Iterator contained a component that is not a label."); } } } @Test(expected = UnsupportedOperationException.class) public void testGridComponentIteratorNotModifiable() { Iterator<Component> iterator = grid.iterator(); iterator.next(); // This should fail iterator.remove(); } @Test public void testGridComponentIteratorIsEmptyAfterHidingDetails() { Assert.assertTrue("Component iterator should have components.", grid.iterator().hasNext()); data.forEach(s -> grid.setDetailsVisible(s, false)); Assert.assertFalse("Component iterator should not have components.", grid.iterator().hasNext()); } }