/* * This file is part of the Echo Web Application Framework (hereinafter "Echo"). * Copyright (C) 2002-2009 NextApp, Inc. * * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. */ package nextapp.echo2.webcontainer.test; import nextapp.echo2.app.Extent; import nextapp.echo2.app.Grid; import nextapp.echo2.app.Label; import nextapp.echo2.app.layout.GridLayoutData; import nextapp.echo2.webcontainer.syncpeer.GridProcessor; import junit.framework.TestCase; /** * Unit tests for <code>GridProcessor</code>. */ public class GridProcessorTest extends TestCase { /** * Test retrieving column widths and row heights. */ public void testBasicColumnWidthAndRowHeight() { Grid grid = new Grid(3); for (int i = 0; i < 12; ++i) { grid.add(new Label()); } for (int i = 0; i < 4; ++i) { grid.setColumnWidth(i, new Extent(i + 1)); grid.setRowHeight(i, new Extent((i + 1)* 10)); } GridProcessor gridProcessor = new GridProcessor(grid); assertEquals(3, gridProcessor.getColumnCount()); assertEquals(4, gridProcessor.getRowCount()); assertEquals(new Extent(1), gridProcessor.getColumnWidth(0)); assertEquals(new Extent(2), gridProcessor.getColumnWidth(1)); assertEquals(new Extent(3), gridProcessor.getColumnWidth(2)); assertEquals(new Extent(10), gridProcessor.getRowHeight(0)); assertEquals(new Extent(20), gridProcessor.getRowHeight(1)); assertEquals(new Extent(30), gridProcessor.getRowHeight(2)); assertEquals(new Extent(40), gridProcessor.getRowHeight(3)); grid.setOrientation(Grid.ORIENTATION_VERTICAL); gridProcessor = new GridProcessor(grid); assertEquals(4, gridProcessor.getColumnCount()); assertEquals(3, gridProcessor.getRowCount()); assertEquals(new Extent(1), gridProcessor.getColumnWidth(0)); assertEquals(new Extent(2), gridProcessor.getColumnWidth(1)); assertEquals(new Extent(3), gridProcessor.getColumnWidth(2)); assertEquals(new Extent(4), gridProcessor.getColumnWidth(3)); assertEquals(new Extent(10), gridProcessor.getRowHeight(0)); assertEquals(new Extent(20), gridProcessor.getRowHeight(1)); assertEquals(new Extent(30), gridProcessor.getRowHeight(2)); } /** * Test a grid with no child components. */ public void testEmptyGrid() { Grid grid = new Grid(); GridProcessor gridProcessor = new GridProcessor(grid); assertEquals(0, gridProcessor.getColumnCount()); assertEquals(0, gridProcessor.getRowCount()); } /** * Test behavior of Grid with very little content. * This is a special case for the <code>GridProcessor</code>. * __ __ __ __ * | |XX|XX|XX| * |__|XX|XX|XX| */ public void testLessThanSize() { Grid grid = new Grid(); grid.setSize(4); grid.add(new Label()); GridProcessor gridProcessor = new GridProcessor(grid); assertEquals(1, gridProcessor.getColumnCount()); assertEquals(1, gridProcessor.getRowCount()); } /** * Test behavior of Grid with very little content and a needless * row span. * This is a special case for the <code>GridProcessor</code>. * __ __ __ __ * | |XX|XX|XX| * | |XX|XX|XX| * | |XX|XX|XX| * | |XX|XX|XX| * | |XX|XX|XX| * |__|XX|XX|XX| */ public void testLessThanSizeWithRowSpan() { Grid grid = new Grid(); grid.setSize(4); Label label = new Label(); GridLayoutData gridLayoutData = new GridLayoutData(); gridLayoutData.setRowSpan(3); label.setLayoutData(gridLayoutData); grid.add(label); GridProcessor gridProcessor = new GridProcessor(grid); assertEquals(1, gridProcessor.getColumnCount()); assertEquals(1, gridProcessor.getRowCount()); } /** * Tests span collisions. * * Requested: Rendered: * __ __ __ __ __ __ * |0 |VC|1 | |0 |VC|1 | * |__| |__| |__| |__| * |HC \/ | |HC| |2 | * |__ /\ __| |__| |__| * |2 | |3 | |3 | | | * |__|__|__| |__|__|__| */ public void testInvalidAttemptCollision() { GridLayoutData layoutData; Grid grid = new Grid(3); grid.add(new Label("0")); Label verticalCollider = new Label("VC"); layoutData = new GridLayoutData(); layoutData.setRowSpan(3); verticalCollider.setLayoutData(layoutData); grid.add(verticalCollider); grid.add(new Label("1")); Label horizontalCollider = new Label("HC"); layoutData = new GridLayoutData(); layoutData.setColumnSpan(3); horizontalCollider.setLayoutData(layoutData); grid.add(horizontalCollider); grid.add(new Label("2")); grid.add(new Label("3")); GridProcessor gridProcessor = new GridProcessor(grid); assertEquals("0", ((Label) gridProcessor.getContent(0, 0)).getText()); assertEquals("VC", ((Label) gridProcessor.getContent(1, 0)).getText()); assertEquals("1", ((Label) gridProcessor.getContent(2, 0)).getText()); assertEquals("HC", ((Label) gridProcessor.getContent(0, 1)).getText()); assertEquals("VC", ((Label) gridProcessor.getContent(1, 1)).getText()); assertEquals("2", ((Label) gridProcessor.getContent(2, 1)).getText()); assertEquals("3", ((Label) gridProcessor.getContent(0, 2)).getText()); assertEquals("VC", ((Label) gridProcessor.getContent(1, 2)).getText()); } /** * Tests row reduction to ensure proper rendering of the following: * * (specified) (rendered) * __ __ __ __ * |0 |1 | 0 |0 |1 | * | | | |__| | * |XX| | 1 |XX| | * |XX| | |XX|__| * |XX| | 2 * |XX| | * |XX| | 3 * |XX|__| */ public void testOutOfBoundsRowSpan() { Grid grid = new Grid(); grid.add(new Label()); Label label = new Label(); GridLayoutData layoutData = new GridLayoutData(); layoutData.setRowSpan(4); label.setLayoutData(layoutData); grid.add(label); GridProcessor gridProcessor = new GridProcessor(grid); // Verify Grid size is correct. assertEquals(2, gridProcessor.getColumnCount()); assertEquals(2, gridProcessor.getRowCount()); // Verify components are at correct positions. assertEquals(0, gridProcessor.getComponentIndex(0, 0)); assertEquals(1, gridProcessor.getComponentIndex(1, 0)); assertEquals(-1, gridProcessor.getComponentIndex(0, 1)); assertEquals(1, gridProcessor.getComponentIndex(1, 1)); // Verify x-spans were untouched. assertEquals(1, gridProcessor.getColumnSpan(0, 0)); assertEquals(1, gridProcessor.getColumnSpan(1, 0)); assertEquals(-1, gridProcessor.getColumnSpan(0, 1)); assertEquals(1, gridProcessor.getColumnSpan(1, 1)); // Verify y-spans were properly reduced. assertEquals(1, gridProcessor.getRowSpan(0, 0)); assertEquals(2, gridProcessor.getRowSpan(1, 0)); assertEquals(-1, gridProcessor.getRowSpan(0, 1)); assertEquals(2, gridProcessor.getRowSpan(1, 1)); } /** * Tests column reduction to ensure proper rendering of the following: * * 0 1 2 3 4 5 6 (specified column) * __ _____ ___________ * |0 |1 |2 |3 | * |__|_____|_____|_____| * |4 |5 |6 |7 |8 | * |__|_____|__|__| | * |9 |10 |11 | | * |__|_____|_____|_____| * * 0 1 2 3 4 (rendered column) */ public void testReduceColumnComplex() { Grid grid = new Grid(); // Configure Grid Content grid.setSize(7); for (int i = 0; i < 12; ++i) { Label label = new Label(Integer.toString(i)); if (i == 1 || i == 2 || i == 3 || i == 5 || i == 8 || i == 10 || i == 11) { GridLayoutData layoutData = new GridLayoutData(); layoutData.setColumnSpan(2); if (i == 8) { layoutData.setRowSpan(2); } label.setLayoutData(layoutData); } grid.add(label); } // Set Column Sizes grid.setColumnWidth(0, new Extent(1)); grid.setColumnWidth(1, new Extent(2)); grid.setColumnWidth(2, new Extent(4)); grid.setColumnWidth(3, new Extent(8)); grid.setColumnWidth(4, new Extent(16)); grid.setColumnWidth(5, new Extent(32)); grid.setColumnWidth(6, new Extent(64)); GridProcessor gridProcessor = new GridProcessor(grid); // Verify Grid size is correct. assertEquals(5, gridProcessor.getColumnCount()); assertEquals(3, gridProcessor.getRowCount()); // Verify components are at correct positions. assertEquals(0, gridProcessor.getComponentIndex(0, 0)); assertEquals(1, gridProcessor.getComponentIndex(1, 0)); assertEquals(2, gridProcessor.getComponentIndex(2, 0)); assertEquals(2, gridProcessor.getComponentIndex(3, 0)); assertEquals(3, gridProcessor.getComponentIndex(4, 0)); assertEquals(4, gridProcessor.getComponentIndex(0, 1)); assertEquals(5, gridProcessor.getComponentIndex(1, 1)); assertEquals(6, gridProcessor.getComponentIndex(2, 1)); assertEquals(7, gridProcessor.getComponentIndex(3, 1)); assertEquals(8, gridProcessor.getComponentIndex(4, 1)); assertEquals(9, gridProcessor.getComponentIndex(0, 2)); assertEquals(10, gridProcessor.getComponentIndex(1, 2)); assertEquals(11, gridProcessor.getComponentIndex(2, 2)); assertEquals(11, gridProcessor.getComponentIndex(3, 2)); assertEquals(8, gridProcessor.getComponentIndex(4, 2)); // Verify x-spans were property reduced. assertEquals(1, gridProcessor.getColumnSpan(0, 0)); assertEquals(1, gridProcessor.getColumnSpan(1, 0)); assertEquals(2, gridProcessor.getColumnSpan(2, 0)); assertEquals(2, gridProcessor.getColumnSpan(3, 0)); assertEquals(1, gridProcessor.getColumnSpan(4, 0)); assertEquals(1, gridProcessor.getColumnSpan(0, 1)); assertEquals(1, gridProcessor.getColumnSpan(1, 1)); assertEquals(1, gridProcessor.getColumnSpan(2, 1)); assertEquals(1, gridProcessor.getColumnSpan(3, 1)); assertEquals(1, gridProcessor.getColumnSpan(4, 1)); assertEquals(1, gridProcessor.getColumnSpan(0, 2)); assertEquals(1, gridProcessor.getColumnSpan(1, 2)); assertEquals(2, gridProcessor.getColumnSpan(2, 2)); assertEquals(2, gridProcessor.getColumnSpan(3, 2)); assertEquals(1, gridProcessor.getColumnSpan(4, 2)); // Verify y-spans were untouched. assertEquals(1, gridProcessor.getRowSpan(0, 0)); assertEquals(1, gridProcessor.getRowSpan(1, 0)); assertEquals(1, gridProcessor.getRowSpan(2, 0)); assertEquals(1, gridProcessor.getRowSpan(3, 0)); assertEquals(1, gridProcessor.getRowSpan(4, 0)); assertEquals(1, gridProcessor.getRowSpan(0, 1)); assertEquals(1, gridProcessor.getRowSpan(1, 1)); assertEquals(1, gridProcessor.getRowSpan(3, 1)); assertEquals(2, gridProcessor.getRowSpan(4, 1)); assertEquals(1, gridProcessor.getRowSpan(0, 2)); assertEquals(1, gridProcessor.getRowSpan(1, 2)); assertEquals(1, gridProcessor.getRowSpan(2, 2)); assertEquals(1, gridProcessor.getRowSpan(3, 2)); assertEquals(2, gridProcessor.getRowSpan(4, 2)); // Verify column sizes were properly combined. assertEquals(new Extent(1), gridProcessor.getColumnWidth(0)); assertEquals(new Extent(6), gridProcessor.getColumnWidth(1)); assertEquals(new Extent(8), gridProcessor.getColumnWidth(2)); assertEquals(new Extent(16), gridProcessor.getColumnWidth(3)); assertEquals(new Extent(96), gridProcessor.getColumnWidth(4)); } /** * Tests column reduction to ensure the column #2 is not rendered. * * 0 1 2 3 (specified column) * __ _____ __ * |0 |1 |2 | * |__|_____|__| * |3 |4 |5 | * |__|_____|__| * * 0 1 2 (rendered column) */ public void testReduceColumnSimple() { Grid grid = new Grid(); grid.setSize(4); for (int i = 0; i < 6; ++i) { Label label = new Label(Integer.toString(i)); if (i == 1 || i == 4) { GridLayoutData layoutData = new GridLayoutData(); layoutData.setColumnSpan(2); label.setLayoutData(layoutData); } grid.add(label); } GridProcessor gridProcessor = new GridProcessor(grid); assertEquals(3, gridProcessor.getColumnCount()); assertEquals(2, gridProcessor.getRowCount()); assertEquals(0, gridProcessor.getComponentIndex(0, 0)); assertEquals(1, gridProcessor.getComponentIndex(1, 0)); assertEquals(2, gridProcessor.getComponentIndex(2, 0)); assertEquals(3, gridProcessor.getComponentIndex(0, 1)); assertEquals(4, gridProcessor.getComponentIndex(1, 1)); assertEquals(5, gridProcessor.getComponentIndex(2, 1)); } /** * Tests column reduction to ensure proper rendering of the following: * specified rendered * __ __ __ row: row: * |0 |1 |2 | * |__|__|__| 0 0 * |3 |4 |5 | * | | | | 1 1 * | | | | * |__|__|__| 2 * |6 |7 |8 | * | |__| | 3 2 * | |9 | | * |__|__|__| 4 3 * |10|11 | * | | | 5 4 * | | | * |__|_____| 6 */ public void testReduceRowComplex() { Grid grid = new Grid(); // Configure Grid Content grid.setSize(3); for (int i = 0; i < 12; ++i) { Label label = new Label(Integer.toString(i)); if (i == 3 || i == 4 || i == 5 || i == 6 || i == 8 || i == 10 || i == 11) { GridLayoutData layoutData = new GridLayoutData(); layoutData.setRowSpan(2); if (i == 11) { layoutData.setColumnSpan(2); } label.setLayoutData(layoutData); } grid.add(label); } // Set Row Sizes grid.setRowHeight(0, new Extent(1)); grid.setRowHeight(1, new Extent(2)); grid.setRowHeight(2, new Extent(4)); grid.setRowHeight(3, new Extent(8)); grid.setRowHeight(4, new Extent(16)); grid.setRowHeight(5, new Extent(32)); grid.setRowHeight(6, new Extent(64)); GridProcessor gridProcessor = new GridProcessor(grid); // Verify Grid size is correct. assertEquals(3, gridProcessor.getColumnCount()); assertEquals(5, gridProcessor.getRowCount()); // Verify components are at correct positions. assertEquals(0, gridProcessor.getComponentIndex(0, 0)); assertEquals(1, gridProcessor.getComponentIndex(1, 0)); assertEquals(2, gridProcessor.getComponentIndex(2, 0)); assertEquals(3, gridProcessor.getComponentIndex(0, 1)); assertEquals(4, gridProcessor.getComponentIndex(1, 1)); assertEquals(5, gridProcessor.getComponentIndex(2, 1)); assertEquals(6, gridProcessor.getComponentIndex(0, 2)); assertEquals(7, gridProcessor.getComponentIndex(1, 2)); assertEquals(8, gridProcessor.getComponentIndex(2, 2)); assertEquals(6, gridProcessor.getComponentIndex(0, 3)); assertEquals(9, gridProcessor.getComponentIndex(1, 3)); assertEquals(8, gridProcessor.getComponentIndex(2, 3)); assertEquals(10, gridProcessor.getComponentIndex(0, 4)); assertEquals(11, gridProcessor.getComponentIndex(1, 4)); assertEquals(11, gridProcessor.getComponentIndex(2, 4)); // Verify x-spans were untouched. assertEquals(1, gridProcessor.getColumnSpan(0, 0)); assertEquals(1, gridProcessor.getColumnSpan(1, 0)); assertEquals(1, gridProcessor.getColumnSpan(2, 0)); assertEquals(1, gridProcessor.getColumnSpan(0, 1)); assertEquals(1, gridProcessor.getColumnSpan(1, 1)); assertEquals(1, gridProcessor.getColumnSpan(2, 1)); assertEquals(1, gridProcessor.getColumnSpan(0, 2)); assertEquals(1, gridProcessor.getColumnSpan(1, 2)); assertEquals(1, gridProcessor.getColumnSpan(2, 2)); assertEquals(1, gridProcessor.getColumnSpan(0, 3)); assertEquals(1, gridProcessor.getColumnSpan(1, 3)); assertEquals(1, gridProcessor.getColumnSpan(2, 3)); assertEquals(1, gridProcessor.getColumnSpan(0, 4)); assertEquals(2, gridProcessor.getColumnSpan(1, 4)); assertEquals(2, gridProcessor.getColumnSpan(2, 4)); // Verify y-spans were properly reduced. assertEquals(1, gridProcessor.getRowSpan(0, 0)); assertEquals(1, gridProcessor.getRowSpan(1, 0)); assertEquals(1, gridProcessor.getRowSpan(2, 0)); assertEquals(1, gridProcessor.getRowSpan(0, 1)); assertEquals(1, gridProcessor.getRowSpan(1, 1)); assertEquals(1, gridProcessor.getRowSpan(2, 1)); assertEquals(2, gridProcessor.getRowSpan(0, 2)); assertEquals(1, gridProcessor.getRowSpan(1, 2)); assertEquals(2, gridProcessor.getRowSpan(2, 2)); assertEquals(2, gridProcessor.getRowSpan(0, 3)); assertEquals(1, gridProcessor.getRowSpan(1, 3)); assertEquals(2, gridProcessor.getRowSpan(2, 3)); assertEquals(1, gridProcessor.getRowSpan(0, 4)); assertEquals(1, gridProcessor.getRowSpan(1, 4)); assertEquals(1, gridProcessor.getRowSpan(2, 4)); // Verify column sizes were properly combined. assertEquals(new Extent(1), gridProcessor.getRowHeight(0)); assertEquals(new Extent(6), gridProcessor.getRowHeight(1)); assertEquals(new Extent(8), gridProcessor.getRowHeight(2)); assertEquals(new Extent(16), gridProcessor.getRowHeight(3)); assertEquals(new Extent(96), gridProcessor.getRowHeight(4)); } /** * Tests row reduction to ensure the row #2 is not rendered. * * __ __ Row: * |0 |1 | 0 * |__|__| * |2 |3 | 1 * | | | * | | | 2 * |__|__| * |4 |5 | 3 * |__|__| */ public void testReduceRowSimple() { Grid grid = new Grid(); grid.setSize(2); for (int i = 0; i < 6; ++i) { Label label = new Label(Integer.toString(i)); if (i == 2 || i == 3) { GridLayoutData layoutData = new GridLayoutData(); layoutData.setRowSpan(2); label.setLayoutData(layoutData); } grid.add(label); } GridProcessor gridProcessor = new GridProcessor(grid); assertEquals(2, gridProcessor.getColumnCount()); assertEquals(3, gridProcessor.getRowCount()); assertEquals(0, gridProcessor.getComponentIndex(0, 0)); assertEquals(1, gridProcessor.getComponentIndex(1, 0)); assertEquals(2, gridProcessor.getComponentIndex(0, 1)); assertEquals(3, gridProcessor.getComponentIndex(1, 1)); assertEquals(4, gridProcessor.getComponentIndex(0, 2)); assertEquals(5, gridProcessor.getComponentIndex(1, 2)); } /** * Test Grid with row and column reduction * * (specified) * 0 1 2 (spec) (rend) * __ _____ * |0 |1 | 0 0 * |__|_____| * |2 |3 | 1 1 * | | | * | | | 2 * |__|_____| * * 0 1 * (rendered) */ public void testReduceColumnAndRowSimple() { Grid grid = new Grid(); grid.setSize(3); for (int i = 0; i < 4; ++i) { Label label = new Label(Integer.toString(i)); if (i > 0) { GridLayoutData layoutData = new GridLayoutData(); if (i == 1 || i == 3) { layoutData.setColumnSpan(2); } if (i == 2 || i == 3) { layoutData.setRowSpan(2); } label.setLayoutData(layoutData); } grid.add(label); } GridProcessor gridProcessor = new GridProcessor(grid); // Verify Grid size is correct. assertEquals(2, gridProcessor.getColumnCount()); assertEquals(2, gridProcessor.getRowCount()); // Verify components are at correct positions. assertEquals(0, gridProcessor.getComponentIndex(0, 0)); assertEquals(1, gridProcessor.getComponentIndex(1, 0)); assertEquals(2, gridProcessor.getComponentIndex(0, 1)); assertEquals(3, gridProcessor.getComponentIndex(1, 1)); // Verify x-spans were properly reduced. assertEquals(1, gridProcessor.getColumnSpan(0, 0)); assertEquals(1, gridProcessor.getColumnSpan(1, 0)); assertEquals(1, gridProcessor.getColumnSpan(0, 1)); assertEquals(1, gridProcessor.getColumnSpan(1, 1)); // Verify y-spans were properly reduced. assertEquals(1, gridProcessor.getRowSpan(0, 0)); assertEquals(1, gridProcessor.getRowSpan(1, 0)); assertEquals(1, gridProcessor.getRowSpan(0, 1)); assertEquals(1, gridProcessor.getRowSpan(1, 1)); } /** * Test reduction of symmetric column spans. * * 0 1 2 3 (specified) * ________ __ * | | | * |________|__| * | | | * |________|__| * | | | * |________|__| * * 0 1 (rendered) */ public void testReduceColumnLong() { Grid grid = new Grid(); grid.setSize(4); for (int i = 0; i < 6; ++i) { Label label = new Label(Integer.toString(i)); if (i % 2 == 0) { GridLayoutData layoutData = new GridLayoutData(); layoutData.setColumnSpan(3); label.setLayoutData(layoutData); } grid.add(label); } GridProcessor gridProcessor = new GridProcessor(grid); // Verify Grid size is correct. assertEquals(2, gridProcessor.getColumnCount()); assertEquals(3, gridProcessor.getRowCount()); // Verify components are at correct positions. assertEquals(0, gridProcessor.getComponentIndex(0, 0)); assertEquals(1, gridProcessor.getComponentIndex(1, 0)); assertEquals(2, gridProcessor.getComponentIndex(0, 1)); assertEquals(3, gridProcessor.getComponentIndex(1, 1)); assertEquals(4, gridProcessor.getComponentIndex(0, 2)); assertEquals(5, gridProcessor.getComponentIndex(1, 2)); // Verify x-spans were properly reduced. assertEquals(1, gridProcessor.getColumnSpan(0, 0)); assertEquals(1, gridProcessor.getColumnSpan(1, 0)); assertEquals(1, gridProcessor.getColumnSpan(0, 1)); assertEquals(1, gridProcessor.getColumnSpan(1, 1)); assertEquals(1, gridProcessor.getColumnSpan(0, 2)); assertEquals(1, gridProcessor.getColumnSpan(1, 2)); // Verify y-spans were untouched. assertEquals(1, gridProcessor.getRowSpan(0, 0)); assertEquals(1, gridProcessor.getRowSpan(1, 0)); assertEquals(1, gridProcessor.getRowSpan(0, 1)); assertEquals(1, gridProcessor.getRowSpan(1, 1)); assertEquals(1, gridProcessor.getRowSpan(0, 2)); assertEquals(1, gridProcessor.getRowSpan(1, 2)); } /** * Test reduction of symmetric row spans. * * __ __ __ (spec) (rend) * | | | | * | | | | 0 0 * | | | | * | | | | 1 * | | | | * |__|__|__| 2 * | | | | * |__|__|__| 3 1 */ public void testReduceRowLong() { Grid grid = new Grid(); grid.setSize(3); for (int i = 0; i < 6; ++i) { Label label = new Label(Integer.toString(i)); if (i < 3) { GridLayoutData layoutData = new GridLayoutData(); layoutData.setRowSpan(3); label.setLayoutData(layoutData); } grid.add(label); } GridProcessor gridProcessor = new GridProcessor(grid); // Verify Grid size is correct. assertEquals(3, gridProcessor.getColumnCount()); assertEquals(2, gridProcessor.getRowCount()); // Verify components are at correct positions. assertEquals(0, gridProcessor.getComponentIndex(0, 0)); assertEquals(1, gridProcessor.getComponentIndex(1, 0)); assertEquals(2, gridProcessor.getComponentIndex(2, 0)); assertEquals(3, gridProcessor.getComponentIndex(0, 1)); assertEquals(4, gridProcessor.getComponentIndex(1, 1)); assertEquals(5, gridProcessor.getComponentIndex(2, 1)); // Verify x-spans were untouched. assertEquals(1, gridProcessor.getColumnSpan(0, 0)); assertEquals(1, gridProcessor.getColumnSpan(1, 0)); assertEquals(1, gridProcessor.getColumnSpan(2, 0)); assertEquals(1, gridProcessor.getColumnSpan(0, 1)); assertEquals(1, gridProcessor.getColumnSpan(1, 1)); assertEquals(1, gridProcessor.getColumnSpan(2, 1)); // Verify y-spans were properly reduced. assertEquals(1, gridProcessor.getRowSpan(0, 0)); assertEquals(1, gridProcessor.getRowSpan(1, 0)); assertEquals(1, gridProcessor.getRowSpan(2, 0)); assertEquals(1, gridProcessor.getRowSpan(0, 1)); assertEquals(1, gridProcessor.getRowSpan(1, 1)); assertEquals(1, gridProcessor.getRowSpan(2, 1)); } /** * Test Grid that consists a single row-spanned and column-spanned cell. * * 0 1 2 * __ __ __ * |0 | 0 * | | * | | 1 * | | * | | 2 * | | * | | 3 * | | * | | 4 * |________| */ public void testReduceColumnAndRowOneBigCell() { Grid grid = new Grid(); grid.setSize(3); Label label = new Label("0"); GridLayoutData layoutData = new GridLayoutData(); layoutData.setColumnSpan(3); layoutData.setRowSpan(5); label.setLayoutData(layoutData); grid.add(label); GridProcessor gridProcessor = new GridProcessor(grid); // Verify Grid size is correct. assertEquals(1, gridProcessor.getColumnCount()); assertEquals(1, gridProcessor.getRowCount()); // Verify components are at correct positions. assertEquals(0, gridProcessor.getComponentIndex(0, 0)); // Verify x-spans and y-spans were properly reduced. assertEquals(1, gridProcessor.getColumnSpan(0, 0)); assertEquals(1, gridProcessor.getRowSpan(0, 0)); } /** * Tests a grid with a cell spanning two rows: * __ __ * |0 |1 | * |__|__| * |2 |3 | * | |__| * | |4 | * |__|__| * |5 |6 | * |__|__| */ public void testRowSpanSimple() { Grid grid = new Grid(); for (int i = 0; i < 7; ++i) { Label label = new Label(Integer.toString(i)); if (i == 2) { GridLayoutData layoutData = new GridLayoutData(); layoutData.setRowSpan(2); label.setLayoutData(layoutData); } grid.add(label); } GridProcessor gridProcessor = new GridProcessor(grid); // Verify Grid size is correct. assertEquals(2, gridProcessor.getColumnCount()); assertEquals(4, gridProcessor.getRowCount()); // Verify components are at correct positions. assertEquals("0", ((Label) gridProcessor.getContent(0, 0)).getText()); assertEquals("1", ((Label) gridProcessor.getContent(1, 0)).getText()); assertEquals("2", ((Label) gridProcessor.getContent(0, 1)).getText()); assertEquals("3", ((Label) gridProcessor.getContent(1, 1)).getText()); assertEquals("2", ((Label) gridProcessor.getContent(0, 2)).getText()); assertEquals("4", ((Label) gridProcessor.getContent(1, 2)).getText()); assertEquals("5", ((Label) gridProcessor.getContent(0, 3)).getText()); assertEquals("6", ((Label) gridProcessor.getContent(1, 3)).getText()); } /** * Test a simple grid consisting of ten cells in default 2 columns and 5 rows. * __ __ * |0 |1 | * |__|__| * |2 |3 | * |__|__| * |4 |5 | * |__|__| * |6 |7 | * |__|__| * |8 |9 | * |__|__| */ public void testSimple() { Grid grid = new Grid(); for (int i = 0; i < 10; ++i) { grid.add(new Label("test")); } GridProcessor gridProcessor = new GridProcessor(grid); // Verify Grid size is correct. assertEquals(2, gridProcessor.getColumnCount()); assertEquals(5, gridProcessor.getRowCount()); } /** * Test a a simple Grid consisting of ten cells with one of them * spanning two columns. * __ __ * |0 |1 | * |__|__| * |2 |3 | * |__|__| * |4 | * |_____| * |5 |6 | * |__|__| * |7 |8 | * |__|__| * |9 |XX| * |__|XX| */ public void testSimpleWithColumnSpan() { Grid grid = new Grid(); for (int i = 0; i < 10; ++i) { Label label = new Label(); if (i == 4) { GridLayoutData layoutData = new GridLayoutData(); layoutData.setColumnSpan(2); label.setLayoutData(layoutData); } grid.add(label); } GridProcessor gridProcessor = new GridProcessor(grid); // Verify Grid size is correct. assertEquals(2, gridProcessor.getColumnCount()); assertEquals(6, gridProcessor.getRowCount()); // Verify components are at correct positions. assertEquals(0, gridProcessor.getComponentIndex(0, 0)); assertEquals(1, gridProcessor.getComponentIndex(1, 0)); assertEquals(2, gridProcessor.getComponentIndex(0, 1)); assertEquals(3, gridProcessor.getComponentIndex(1, 1)); assertEquals(4, gridProcessor.getComponentIndex(0, 2)); assertEquals(4, gridProcessor.getComponentIndex(1, 2)); assertEquals(5, gridProcessor.getComponentIndex(0, 3)); assertEquals(6, gridProcessor.getComponentIndex(1, 3)); assertEquals(7, gridProcessor.getComponentIndex(0, 4)); assertEquals(8, gridProcessor.getComponentIndex(1, 4)); assertEquals(9, gridProcessor.getComponentIndex(0, 5)); assertEquals(-1, gridProcessor.getComponentIndex(1, 5)); // Verify x-spans were untouched. assertEquals(1, gridProcessor.getColumnSpan(0, 0)); assertEquals(1, gridProcessor.getColumnSpan(1, 0)); assertEquals(1, gridProcessor.getColumnSpan(0, 1)); assertEquals(1, gridProcessor.getColumnSpan(1, 1)); assertEquals(2, gridProcessor.getColumnSpan(0, 2)); assertEquals(2, gridProcessor.getColumnSpan(1, 2)); assertEquals(1, gridProcessor.getColumnSpan(0, 3)); assertEquals(1, gridProcessor.getColumnSpan(1, 3)); assertEquals(1, gridProcessor.getColumnSpan(0, 4)); assertEquals(1, gridProcessor.getColumnSpan(1, 4)); assertEquals(1, gridProcessor.getColumnSpan(0, 5)); assertEquals(-1, gridProcessor.getColumnSpan(1, 5)); // Verify y-spans were properly reduced. assertEquals(1, gridProcessor.getRowSpan(0, 0)); assertEquals(1, gridProcessor.getRowSpan(1, 0)); assertEquals(1, gridProcessor.getRowSpan(0, 1)); assertEquals(1, gridProcessor.getRowSpan(1, 1)); assertEquals(1, gridProcessor.getRowSpan(0, 2)); assertEquals(1, gridProcessor.getRowSpan(1, 2)); assertEquals(1, gridProcessor.getRowSpan(0, 3)); assertEquals(1, gridProcessor.getRowSpan(1, 3)); assertEquals(1, gridProcessor.getRowSpan(0, 4)); assertEquals(1, gridProcessor.getRowSpan(1, 4)); assertEquals(1, gridProcessor.getRowSpan(0, 5)); assertEquals(-1, gridProcessor.getRowSpan(1, 5)); } /** * Test a a simple Grid consisting of ten cells with one of them * spanning three columns (even though only two are available). * __ __ * |0 |1 | * |__|__| * |2 |3 | * |__|__|__ * |4 | * |________| * |5 |6 | * |__|__| * |7 |8 | * |__|__| * |9 |XX| * |__|XX| */ public void testSimpleWithOversidedColumnSpan() { Grid grid = new Grid(); for (int i = 0; i < 10; ++i) { Label label = new Label(); if (i == 4) { GridLayoutData layoutData = new GridLayoutData(); layoutData.setColumnSpan(3); label.setLayoutData(layoutData); } grid.add(label); } GridProcessor gridProcessor = new GridProcessor(grid); // Verify Grid size is correct. assertEquals(2, gridProcessor.getColumnCount()); assertEquals(6, gridProcessor.getRowCount()); // Verify components are at correct positions. assertEquals(0, gridProcessor.getComponentIndex(0, 0)); assertEquals(1, gridProcessor.getComponentIndex(1, 0)); assertEquals(2, gridProcessor.getComponentIndex(0, 1)); assertEquals(3, gridProcessor.getComponentIndex(1, 1)); assertEquals(4, gridProcessor.getComponentIndex(0, 2)); assertEquals(4, gridProcessor.getComponentIndex(1, 2)); assertEquals(5, gridProcessor.getComponentIndex(0, 3)); assertEquals(6, gridProcessor.getComponentIndex(1, 3)); assertEquals(7, gridProcessor.getComponentIndex(0, 4)); assertEquals(8, gridProcessor.getComponentIndex(1, 4)); assertEquals(9, gridProcessor.getComponentIndex(0, 5)); assertEquals(-1, gridProcessor.getComponentIndex(1, 5)); // Verify x-spans were untouched for the most part, // except for oversized cell which is reduced. assertEquals(1, gridProcessor.getColumnSpan(0, 0)); assertEquals(1, gridProcessor.getColumnSpan(1, 0)); assertEquals(1, gridProcessor.getColumnSpan(0, 1)); assertEquals(1, gridProcessor.getColumnSpan(1, 1)); assertEquals(2, gridProcessor.getColumnSpan(0, 2)); assertEquals(2, gridProcessor.getColumnSpan(1, 2)); assertEquals(1, gridProcessor.getColumnSpan(0, 3)); assertEquals(1, gridProcessor.getColumnSpan(1, 3)); assertEquals(1, gridProcessor.getColumnSpan(0, 4)); assertEquals(1, gridProcessor.getColumnSpan(1, 4)); assertEquals(1, gridProcessor.getColumnSpan(0, 5)); assertEquals(-1, gridProcessor.getColumnSpan(1, 5)); // Verify y-spans were properly reduced. assertEquals(1, gridProcessor.getRowSpan(0, 0)); assertEquals(1, gridProcessor.getRowSpan(1, 0)); assertEquals(1, gridProcessor.getRowSpan(0, 1)); assertEquals(1, gridProcessor.getRowSpan(1, 1)); assertEquals(1, gridProcessor.getRowSpan(0, 2)); assertEquals(1, gridProcessor.getRowSpan(1, 2)); assertEquals(1, gridProcessor.getRowSpan(0, 3)); assertEquals(1, gridProcessor.getRowSpan(1, 3)); assertEquals(1, gridProcessor.getRowSpan(0, 4)); assertEquals(1, gridProcessor.getRowSpan(1, 4)); assertEquals(1, gridProcessor.getRowSpan(0, 5)); assertEquals(-1, gridProcessor.getRowSpan(1, 5)); } /** * Test staggered row-spanned cells: * __ __ * |0 |1 | * | |__| * | |2 | * |__| | * |3 | | * |__|__| */ public void testStaggeredSpans() { Grid grid = new Grid(); for (int i = 0; i < 4; ++i) { Label label = new Label(); if (i % 2 == 0) { GridLayoutData gridLayoutData = new GridLayoutData(); gridLayoutData.setRowSpan(2); label.setLayoutData(gridLayoutData); } grid.add(label); } GridProcessor gridProcessor = new GridProcessor(grid); // Verify Grid size is correct. assertEquals(2, gridProcessor.getColumnCount()); assertEquals(3, gridProcessor.getRowCount()); // Verify components are at correct positions. assertEquals(0, gridProcessor.getComponentIndex(0, 0)); assertEquals(1, gridProcessor.getComponentIndex(1, 0)); assertEquals(0, gridProcessor.getComponentIndex(0, 1)); assertEquals(2, gridProcessor.getComponentIndex(1, 1)); assertEquals(3, gridProcessor.getComponentIndex(0, 2)); assertEquals(2, gridProcessor.getComponentIndex(1, 2)); // Verify y-spans were untouched. assertEquals(1, gridProcessor.getColumnSpan(0, 0)); assertEquals(1, gridProcessor.getColumnSpan(1, 0)); assertEquals(1, gridProcessor.getColumnSpan(0, 1)); assertEquals(1, gridProcessor.getColumnSpan(1, 1)); assertEquals(1, gridProcessor.getColumnSpan(0, 2)); assertEquals(1, gridProcessor.getColumnSpan(1, 2)); // Verify y-spans were untouched. assertEquals(2, gridProcessor.getRowSpan(0, 0)); assertEquals(1, gridProcessor.getRowSpan(1, 0)); assertEquals(2, gridProcessor.getRowSpan(0, 1)); assertEquals(2, gridProcessor.getRowSpan(1, 1)); assertEquals(1, gridProcessor.getRowSpan(0, 2)); assertEquals(2, gridProcessor.getRowSpan(1, 2)); } }