/* * Copyright 2000-2016 Vaadin Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.vaadin.tests.server.component.gridlayout; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import org.junit.Assert; import org.junit.Test; import com.vaadin.shared.ui.ContentMode; import com.vaadin.shared.ui.MarginInfo; import com.vaadin.tests.server.component.DeclarativeMarginTestBase; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.GridLayout; import com.vaadin.ui.Label; import com.vaadin.ui.declarative.Design; import com.vaadin.ui.declarative.DesignContext; public class GridLayoutDeclarativeTest extends DeclarativeMarginTestBase { @Test public void testMargins() { testMargins("vaadin-grid-layout", new MarginInfo(false)); } @Test public void testSimpleGridLayout() { Button b1 = new Button("Button 0,0"); Button b2 = new Button("Button 0,1"); Button b3 = new Button("Button 1,0"); Button b4 = new Button("Button 1,1"); b1.setCaptionAsHtml(true); b2.setCaptionAsHtml(true); b3.setCaptionAsHtml(true); b4.setCaptionAsHtml(true); String design = "" // + "" + writeChild(b1) + "" // + "" + writeChild(b2) + "" // + "" // + "" + writeChild(b3) + "" // + "" + writeChild(b4) + "" // + ""; GridLayout gl = new GridLayout(2, 2); gl.addComponent(b1); gl.addComponent(b2); gl.addComponent(b3); gl.addComponent(b4); gl.setColumnExpandRatio(0, 1f); gl.setColumnExpandRatio(1, 3.3f); testWrite(design, gl); testRead(design, gl); } @Test public void testReadIntegerExpandRatioGridLayout() { // To make sure that it can read from old declarative which use // integer expand ratio Button b1 = new Button("Button 0,0"); b1.setCaptionAsHtml(true); String design = "" // + "" + writeChild(b1) + "" // + ""// + ""; GridLayout gl = new GridLayout(1, 1); gl.addComponent(b1); gl.setColumnExpandRatio(0, 1.0f); gl.setRowExpandRatio(0, 3.0f); testRead(design, gl); } @Test public void testOneBigComponentGridLayout() { Button b1 = new Button("Button 0,0 -> 1,1"); b1.setCaptionAsHtml(true); String design = "" // + "" + writeChild(b1) + "" // + "" // + ""; GridLayout gl = new GridLayout(2, 2); gl.addComponent(b1, 0, 0, 1, 1); gl.setRowExpandRatio(1, 2); testWrite(design, gl); testRead(design, gl); } @Test public void testMultipleSpannedComponentsGridLayout() { GridLayout gl = new GridLayout(5, 5); Button b1 = new Button("Button 0,0 -> 0,2"); b1.setCaptionAsHtml(true); gl.addComponent(b1, 0, 0, 2, 0); Button b2 = new Button("Button 0,3 -> 3,3"); b2.setCaptionAsHtml(true); gl.addComponent(b2, 3, 0, 3, 3); Button b3 = new Button("Button 0,4 -> 1,4"); b3.setCaptionAsHtml(true); gl.addComponent(b3, 4, 0, 4, 1); Button b4 = new Button("Button 1,0 -> 3,1"); b4.setCaptionAsHtml(true); gl.addComponent(b4, 0, 1, 1, 3); Button b5 = new Button("Button 2,2"); b5.setCaptionAsHtml(true); gl.addComponent(b5, 2, 2); Button b6 = new Button("Button 3,4 -> 4,4"); b6.setCaptionAsHtml(true); gl.addComponent(b6, 4, 3, 4, 4); Button b7 = new Button("Button 4,1 -> 4,2"); b7.setCaptionAsHtml(true); gl.addComponent(b7, 2, 4, 3, 4); /* * Buttons in the GridLayout */ // 1 1 1 2 3 // 4 4 - 2 3 // 4 4 5 2 - // 4 4 - 2 6 // - - 7 7 6 String design = "" // + "" + writeChild(b1) + "" // + "" + writeChild(b2) + "" // + "" + writeChild(b3) + "" // + "" // + "" + writeChild(b4) + "" // + "" // + "" + writeChild(b5) + "" // + "" // + "" // Empty placeholder + "" + writeChild(b6) + "" // + "" // + "" // Empty placeholder + "" + writeChild(b7) + "" // + ""; testWrite(design, gl); testRead(design, gl); } @Test public void testManyExtraGridLayoutSlots() { GridLayout gl = new GridLayout(5, 5); Button b1 = new Button("Button 0,4 -> 4,4"); b1.setCaptionAsHtml(true); gl.addComponent(b1, 4, 0, 4, 4); gl.setColumnExpandRatio(2, 2.0f); String design = "" // + "" // + "" + writeChild(b1) + "" // + "" // + "" // + "" // + "" // + ""; testWrite(design, gl); testRead(design, gl); } @Test public void testManyEmptyColumnsWithOneExpand() { GridLayout gl = new GridLayout(5, 5); Button b1 = new Button("Button 0,4 -> 4,4"); b1.setCaptionAsHtml(true); gl.addComponent(b1, 0, 0, 0, 4); gl.setColumnExpandRatio(4, 2.0f); String design = "" // + "" + writeChild(b1) + "" // + "" // + "" // + "" // + "" // + "" // + ""; testWrite(design, gl); testRead(design, gl); } @Test public void testEmptyGridLayout() { GridLayout gl = new GridLayout(); String design = ""; testWrite(design, gl); testRead(design, gl); } private String writeChild(Component childComponent) { return new DesignContext().createElement(childComponent).toString(); } @Override public GridLayout testRead(String design, GridLayout expected) { expected.setCursorX(0); expected.setCursorY(expected.getRows()); GridLayout result = super.testRead(design, expected); for (int row = 0; row < expected.getRows(); ++row) { Assert.assertEquals(expected.getRowExpandRatio(row), result.getRowExpandRatio(row), 0.00001); } for (int col = 0; col < expected.getColumns(); ++col) { Assert.assertEquals(expected.getColumnExpandRatio(col), result.getColumnExpandRatio(col), 0.00001); } for (int row = 0; row < expected.getRows(); ++row) { for (int col = 0; col < expected.getColumns(); ++col) { Component eC = expected.getComponent(col, row); Component rC = result.getComponent(col, row); assertEquals(eC, rC); if (eC == null) { continue; } Assert.assertEquals(expected.getComponentAlignment(eC), result.getComponentAlignment(rC)); } } return result; } @Test public void testNestedGridLayouts() { String design = "" + // "" + // " " + // " " + // " " + // " " + // " " + // " " + // " " + // " " + // " Button " + // " " + // " " + // " " + // " " + // " " + // " " + // " " + // " " + // ""; GridLayout outer = new GridLayout(); GridLayout inner = new GridLayout(); Button b = new Button("Button"); b.setCaptionAsHtml(true); inner.addComponent(b); outer.addComponent(inner); testRead(design, outer); testWrite(design, outer); } @Test public void testEmptyGridLayoutWithColsAndRowsSet() throws IOException { GridLayout layout = new GridLayout(); layout.setRows(2); layout.setColumns(2); ByteArrayOutputStream out = new ByteArrayOutputStream(); DesignContext context = new DesignContext(); context.setRootComponent(layout); Design.write(context, out); ByteArrayInputStream input = new ByteArrayInputStream( out.toByteArray()); Component component = Design.read(input); GridLayout readLayout = (GridLayout) component; Assert.assertEquals(layout.getRows(), readLayout.getRows()); } @Test public void testGridLayoutAlignments() { String design = "" // + "0"// + "1"// + "" // + "2"// + "3" // + ""; GridLayout gl = new GridLayout(2, 2); Alignment[] alignments = { Alignment.MIDDLE_LEFT, Alignment.TOP_RIGHT, Alignment.BOTTOM_CENTER, Alignment.MIDDLE_CENTER }; for (int i = 0; i < 4; i++) { Label child = new Label("" + i, ContentMode.HTML); gl.addComponent(child); gl.setComponentAlignment(child, alignments[i]); } testWrite(design, gl); testRead(design, gl); } @Test public void testGridLayoutMargins() throws IOException { String design = "" + "" + "" + "" + "" + ""; DesignContext context = Design .read(new ByteArrayInputStream(design.getBytes("UTF-8")), null); Assert.assertEquals(null, context.getCustomAttributes( context.getComponentByLocalId("marginComponent"))); Assert.assertEquals(null, context.getCustomAttributes( context.getComponentByLocalId("marginLeftComponent"))); Assert.assertEquals(null, context.getCustomAttributes( context.getComponentByLocalId("marginRightComponent"))); Assert.assertEquals(null, context.getCustomAttributes( context.getComponentByLocalId("marginTopComponent"))); Assert.assertEquals(null, context.getCustomAttributes( context.getComponentByLocalId("marginBottomComponent"))); } @Test public void designWithPreconfiguredGridLayout() throws Exception { String design = "" // + "" // + "" + "" + "" + "" + ""; PreconfiguredGridLayout myLayout = (PreconfiguredGridLayout) Design .read(new ByteArrayInputStream(design.getBytes("UTF-8"))); Assert.assertEquals(2, myLayout.getRows()); Assert.assertEquals(2, myLayout.getColumns()); } }