package com.vaadin.tests.server.component.gridlayout; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.fail; import java.util.Iterator; import java.util.NoSuchElementException; import org.junit.Test; import com.vaadin.ui.Component; import com.vaadin.ui.GridLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Layout; public class GridLayoutTest { Component[] children = new Component[] { new Label("A"), new Label("B"), new Label("C"), new Label("D") }; @Test public void testConstructorWithComponents() { GridLayout grid = new GridLayout(2, 2, children); assertContentPositions(grid); assertOrder(grid, new int[] { 0, 1, 2, 3 }); grid = new GridLayout(1, 1, children); assertContentPositions(grid); assertOrder(grid, new int[] { 0, 1, 2, 3 }); } @Test public void testAddComponents() { GridLayout grid = new GridLayout(2, 2); grid.addComponents(children); assertContentPositions(grid); assertOrder(grid, new int[] { 0, 1, 2, 3 }); Label extra = new Label("Extra"); Label extra2 = new Label("Extra2"); grid.addComponents(extra, extra2); assertSame(grid.getComponent(0, 2), extra); assertSame(grid.getComponent(1, 2), extra2); grid.removeAllComponents(); grid.addComponents(extra, extra2); assertSame(grid.getComponent(0, 0), extra); assertSame(grid.getComponent(1, 0), extra2); grid.addComponents(children); assertOrder(grid, new int[] { -1, -1, 0, 1, 2, 3 }); grid.removeComponent(extra); grid.removeComponent(extra2); assertOrder(grid, new int[] { 0, 1, 2, 3 }); grid.addComponents(extra2, extra); assertSame(grid.getComponent(0, 3), extra2); assertSame(grid.getComponent(1, 3), extra); assertOrder(grid, new int[] { 0, 1, 2, 3, -1, -1 }); grid.removeComponent(extra2); grid.removeComponent(extra); grid.setCursorX(0); grid.setCursorY(0); grid.addComponents(extra, extra2); assertSame(grid.getComponent(0, 0), extra); assertSame(grid.getComponent(1, 0), extra2); assertOrder(grid, new int[] { -1, -1, 0, 1, 2, 3 }); grid = new GridLayout(); grid.addComponents(children); assertContentPositions(grid); assertOrder(grid, new int[] { 0, 1, 2, 3 }); } @Test public void removeRowsExpandRatiosPreserved() { GridLayout gl = new GridLayout(3, 3); gl.setRowExpandRatio(0, 0); gl.setRowExpandRatio(1, 1); gl.setRowExpandRatio(2, 2); gl.setRows(2); assertEquals(0, gl.getRowExpandRatio(0), 0); assertEquals(1, gl.getRowExpandRatio(1), 0); } @Test public void removeColsExpandRatiosPreserved() { GridLayout gl = new GridLayout(3, 3); gl.setColumnExpandRatio(0, 0); gl.setColumnExpandRatio(1, 1); gl.setColumnExpandRatio(2, 2); gl.setColumns(2); assertEquals(0, gl.getColumnExpandRatio(0), 0); assertEquals(1, gl.getColumnExpandRatio(1), 0); } private void assertContentPositions(GridLayout grid) { assertEquals(grid.getComponentCount(), children.length); int c = 0; for (int i = 0; i < grid.getRows(); i++) { for (int j = 0; j < grid.getColumns(); j++) { assertSame(grid.getComponent(j, i), children[c]); c++; } } } /** * Asserts that layout has the components in children in the order specified * by indices. */ private void assertOrder(Layout layout, int[] indices) { Iterator<?> i = layout.iterator(); try { for (int index : indices) { if (index != -1) { assertSame(children[index], i.next()); } else { i.next(); } } assertFalse("Too many components in layout", i.hasNext()); } catch (NoSuchElementException e) { fail("Too few components in layout"); } } }