Package com.google.gdt.eclipse.designer.core.model.widgets.grid

Source Code of com.google.gdt.eclipse.designer.core.model.widgets.grid.HTMLTableGridInfoTest

/*******************************************************************************
* Copyright 2011 Google Inc. All Rights Reserved.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* 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.google.gdt.eclipse.designer.core.model.widgets.grid;

import com.google.gdt.eclipse.designer.core.model.GwtModelTest;
import com.google.gdt.eclipse.designer.model.widgets.WidgetInfo;
import com.google.gdt.eclipse.designer.model.widgets.panels.RootPanelInfo;
import com.google.gdt.eclipse.designer.model.widgets.panels.grid.FlexTableInfo;
import com.google.gdt.eclipse.designer.model.widgets.panels.grid.GridInfo;
import com.google.gdt.eclipse.designer.model.widgets.panels.grid.HTMLTableInfo;

import org.eclipse.wb.core.gef.policy.layout.grid.IGridInfo;
import org.eclipse.wb.draw2d.geometry.Interval;
import org.eclipse.wb.draw2d.geometry.Rectangle;
import org.eclipse.wb.internal.core.utils.reflect.ReflectionUtils;
import org.eclipse.wb.tests.designer.Expectations;
import org.eclipse.wb.tests.designer.Expectations.IntValue;

import org.apache.commons.lang.NotImplementedException;

import java.util.List;

/**
* Tests for {@link HTMLTableInfo#getGridInfo()} implementation.
*
* @author scheglov_ke
*/
public class HTMLTableGridInfoTest extends GwtModelTest {
  ////////////////////////////////////////////////////////////////////////////
  //
  // Constants
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * Spacing between rows.
   */
  private static final int RS = 2;
  /**
   * Spacing between columns.
   */
  private static final int CS = 2;
  /**
   * Height of row with single "A" button.
   */
  private static final int RA = Expectations.get(24, new IntValue[]{
      new IntValue("kosta-home", 32),
      new IntValue("scheglov-win", 24),
      new IntValue("flanker-windows", 24)});
  /**
   * Width of column with single "A" button.
   */
  private static final int CA = Expectations.get(17, new IntValue[]{
      new IntValue("kosta-home", 21),
      new IntValue("scheglov-win", 31),
      new IntValue("flanker-windows", 17)});
  /**
   * Height of empty row.
   * <p>
   * NOTE: we set "20px" for TD content, but it seems that IE6 adds 3 more pixels (padding?).
   * <p>
   * Exact value in strict mode.
   */
  private static final int RE = 20;
  /**
   * Width of empty column.
   * <p>
   * NOTE: we set "20px" for TD content, but it seems that IE6 adds 2 more pixels (padding?).
   * <p>
   * Exact value in strict mode.
   */
  private static final int CE = 20;

  ////////////////////////////////////////////////////////////////////////////
  //
  // Exit zone :-) XXX
  //
  ////////////////////////////////////////////////////////////////////////////
  public void _test_exit() throws Exception {
    System.exit(0);
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // General
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * <code>HTMLTable</code> always filled with rows/columns, so no virtual intervals.
   */
  public void test_noVirtualIntervals() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    Grid panel = new Grid(1, 2);",
            "    rootPanel.add(panel);",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    HTMLTableInfo panel = (HTMLTableInfo) frame.getChildrenWidgets().get(0);
    // check IGridInfo
    IGridInfo gridInfo = panel.getGridInfo();
    assertFalse(gridInfo.hasVirtualColumns());
    assertFalse(gridInfo.hasVirtualRows());
    try {
      gridInfo.getVirtualRowSize();
      fail();
    } catch (NotImplementedException e) {
    }
    try {
      gridInfo.getVirtualRowGap();
      fail();
    } catch (NotImplementedException e) {
    }
    try {
      gridInfo.getVirtualColumnSize();
      fail();
    } catch (NotImplementedException e) {
    }
    try {
      gridInfo.getVirtualColumnGap();
      fail();
    } catch (NotImplementedException e) {
    }
  }

  /**
   * Test for {@link IGridInfo#getCellsRectangle(Rectangle)}.
   */
  public void test_cellsRectangle() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    Grid panel = new Grid(2, 2);",
            "    rootPanel.add(panel);",
            "    panel.getColumnFormatter().setWidth(0, '100px');",
            "    panel.getColumnFormatter().setWidth(1, '200px');",
            "    panel.getCellFormatter().setHeight(0, 0, '100px');",
            "    panel.getCellFormatter().setHeight(1, 0, '200px');",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    HTMLTableInfo panel = (HTMLTableInfo) frame.getChildrenWidgets().get(0);
    // check IGridInfo
    IGridInfo gridInfo = panel.getGridInfo();
    assertEquals(2, gridInfo.getRowCount());
    assertEquals(2, gridInfo.getColumnCount());
    {
      Interval[] intervals = gridInfo.getRowIntervals();
      assertEquals(2, intervals.length);
      assertEquals(new Interval(2, 100), intervals[0]);
      assertEquals(new Interval(2 + 100 + 2, 200), intervals[1]);
    }
    {
      Interval[] intervals = gridInfo.getColumnIntervals();
      assertEquals(2, intervals.length);
      assertEquals(new Interval(2, 100), intervals[0]);
      assertEquals(new Interval(2 + 100 + 2, 200), intervals[1]);
    }
    // cells rectangle
    {
      {
        Rectangle cells = new Rectangle(0, 0, 1, 1);
        Rectangle expected = new Rectangle(2, 2, 100, 100).getResized(1, 1);
        assertEquals(expected, gridInfo.getCellsRectangle(cells));
      }
      {
        Rectangle cells = new Rectangle(0, 0, 2, 1);
        Rectangle expected = new Rectangle(2, 2, 100 + 2 + 200, 100).getResized(1, 1);
        assertEquals(expected, gridInfo.getCellsRectangle(cells));
      }
      {
        Rectangle cells = new Rectangle(0, 0, 1, 2);
        Rectangle expected = new Rectangle(2, 2, 100, 100 + 2 + 200).getResized(1, 1);
        assertEquals(expected, gridInfo.getCellsRectangle(cells));
      }
    }
  }

  /**
   * We should have workaround for case when user copy/pasted code and has two widgets in one cell.
   * <p>
   * http://fogbugz.instantiations.com/fogbugz/default.asp?47257
   */
  public void test_twoWidgets_inSameCell() throws Exception {
    parseJavaInfo(
        "public class Test implements EntryPoint {",
        "  public void onModuleLoad() {",
        "    RootPanel rootPanel = RootPanel.get();",
        "    Grid panel = new Grid(2, 2);",
        "    rootPanel.add(panel);",
        "    {",
        "      Button button_1 = new Button();",
        "      panel.setWidget(0, 0, button_1);",
        "    }",
        "    {",
        "      Button button_2 = new Button();",
        "      panel.setWidget(0, 0, button_2);",
        "    }",
        "  }",
        "}");
    refresh();
    HTMLTableInfo panel = getJavaInfoByName("panel");
    WidgetInfo button_1 = getJavaInfoByName("button_1");
    WidgetInfo button_2 = getJavaInfoByName("button_2");
    // check IGridInfo
    IGridInfo gridInfo = panel.getGridInfo();
    {
      Rectangle cells = gridInfo.getComponentCells(button_2);
      assertEquals(new Rectangle(0, 0, 1, 1), cells);
    }
    {
      Rectangle cells = gridInfo.getComponentCells(button_1);
      assertEquals(new Rectangle(0, 0, 0, 0), cells);
      Rectangle cellsRectangle = gridInfo.getCellsRectangle(cells);
      assertEquals(new Rectangle(2, 2, 0, 0), cellsRectangle);
    }
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // Grid
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * Grid, no spans.
   */
  public void test_Grid_columnIntervals_0() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    Grid panel = new Grid(1, 2);",
            "    rootPanel.add(panel);",
            "    panel.getColumnFormatter().setWidth(0, '100px');",
            "    panel.getColumnFormatter().setWidth(1, '200px');",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    HTMLTableInfo panel = (HTMLTableInfo) frame.getChildrenWidgets().get(0);
    // check IGridInfo
    IGridInfo gridInfo = panel.getGridInfo();
    assertEquals(2, gridInfo.getColumnCount());
    {
      Interval[] intervals = gridInfo.getColumnIntervals();
      assertEquals(2, intervals.length);
      assertEquals(new Interval(2, 100), intervals[0]);
      assertEquals(new Interval(2 + 100 + 2, 200), intervals[1]);
    }
    // low_getCellOfColumn()
    {
      assertEquals(0, panel.getStatus().getCellOfColumn(0, 0));
      assertEquals(1, panel.getStatus().getCellOfColumn(0, 1));
    }
  }

  /**
   * Grid, no spans.
   */
  public void test_Grid_rowIntervals_0() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    Grid panel = new Grid(2, 1);",
            "    rootPanel.add(panel);",
            "    panel.getCellFormatter().setHeight(0, 0, '100px');",
            "    panel.getCellFormatter().setHeight(1, 0, '200px');",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    HTMLTableInfo panel = (HTMLTableInfo) frame.getChildrenWidgets().get(0);
    // check IGridInfo
    IGridInfo gridInfo = panel.getGridInfo();
    assertEquals(2, gridInfo.getRowCount());
    {
      Interval[] intervals = gridInfo.getRowIntervals();
      assertEquals(2, intervals.length);
      assertEquals(new Interval(2, 100), intervals[0]);
      assertEquals(new Interval(2 + 100 + 2, 200), intervals[1]);
    }
  }

  public void test_Grid_cells() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    Grid panel = new Grid(3, 2);",
            "    rootPanel.add(panel);",
            "    panel.setWidget(0, 0, new Button('1'));",
            "    panel.setWidget(2, 1, new Button('2'));",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    // check hierarchy
    assertHierarchy(
        "{RootPanel.get()} {local-unique: rootPanel} {/RootPanel.get()/ /rootPanel.add(panel)/}",
        "  {new: com.google.gwt.user.client.ui.Grid} {local-unique: panel} {/new Grid(3, 2)/ /rootPanel.add(panel)/ /panel.setWidget(0, 0, new Button('1'))/ /panel.setWidget(2, 1, new Button('2'))/}",
        "    {method: public com.google.gwt.user.client.ui.HTMLTable$RowFormatter com.google.gwt.user.client.ui.HTMLTable.getRowFormatter()} {property} {}",
        "    {method: public com.google.gwt.user.client.ui.HTMLTable$ColumnFormatter com.google.gwt.user.client.ui.HTMLTable.getColumnFormatter()} {property} {}",
        "    {method: public com.google.gwt.user.client.ui.HTMLTable$CellFormatter com.google.gwt.user.client.ui.HTMLTable.getCellFormatter()} {property} {}",
        "    {new: com.google.gwt.user.client.ui.Button} {empty} {/panel.setWidget(0, 0, new Button('1'))/}",
        "    {new: com.google.gwt.user.client.ui.Button} {empty} {/panel.setWidget(2, 1, new Button('2'))/}");
    HTMLTableInfo panel = (HTMLTableInfo) frame.getChildrenWidgets().get(0);
    WidgetInfo button_1 = panel.getChildrenWidgets().get(0);
    WidgetInfo button_2 = panel.getChildrenWidgets().get(1);
    // check IGridInfo cells
    IGridInfo gridInfo = panel.getGridInfo();
    assertEquals(new Rectangle(0, 0, 1, 1), gridInfo.getComponentCells(button_1));
    assertEquals(new Rectangle(1, 2, 1, 1), gridInfo.getComponentCells(button_2));
    // getOccupied()
    assertSame(button_1, gridInfo.getOccupied(0, 0));
    assertSame(button_2, gridInfo.getOccupied(1, 2));
    assertNull(gridInfo.getOccupied(1, 0));
    assertNull(gridInfo.getOccupied(1, 1));
    assertNull(gridInfo.getOccupied(2, 1));
    assertNull(gridInfo.getOccupied(3, 1));
    assertNull(gridInfo.getOccupied(0, 2));
    // we don't support insets
    assertTrue(gridInfo.getInsets().isEmpty());
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // FlexTable
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * FlexTable, no spans, no skips.
   */
  public void test_FlexTable_intervals_0() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    FlexTable panel = new FlexTable();",
            "    rootPanel.add(panel);",
            "    panel.setWidget(0, 0, new Button('A'));",
            "    panel.setWidget(1, 1, new Button('A'));",
            "    panel.setWidget(2, 2, new Button('A'));",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    FlexTableInfo panel = (FlexTableInfo) frame.getChildrenWidgets().get(0);
    // check IGridInfo
    IGridInfo gridInfo = panel.getGridInfo();
    assertEquals(3, gridInfo.getRowCount());
    assertEquals(3, gridInfo.getColumnCount());
    {
      Interval[] intervals = gridInfo.getRowIntervals();
      assertEquals(3, intervals.length);
      assertEquals(new Interval(RS, RA), intervals[0]);
      assertEquals(new Interval(RS + RA + RS, RA), intervals[1]);
      assertEquals(new Interval(RS + RA + RS + RA + RS, RA), intervals[2]);
    }
    {
      Interval[] intervals = gridInfo.getColumnIntervals();
      assertEquals(3, intervals.length);
      assertEquals(new Interval(CS, CA), intervals[0]);
      assertEquals(new Interval(CS + CA + CS, CA), intervals[1]);
      assertEquals(new Interval(CS + CA + CS + CA + CS, CA), intervals[2]);
    }
    // cells
    {
      List<WidgetInfo> widgets = panel.getChildrenWidgets();
      assertEquals(new Rectangle(0, 0, 1, 1), gridInfo.getComponentCells(widgets.get(0)));
      assertEquals(new Rectangle(1, 1, 1, 1), gridInfo.getComponentCells(widgets.get(1)));
      assertEquals(new Rectangle(2, 2, 1, 1), gridInfo.getComponentCells(widgets.get(2)));
    }
  }

  /**
   * FlexTable, no spans, skip single row/column.
   */
  public void test_FlexTable_intervals_1() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    FlexTable panel = new FlexTable();",
            "    rootPanel.add(panel);",
            "    panel.setWidget(0, 0, new Button('A'));",
            "    panel.setWidget(2, 2, new Button('A'));",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    FlexTableInfo panel = (FlexTableInfo) frame.getChildrenWidgets().get(0);
    // check IGridInfo
    IGridInfo gridInfo = panel.getGridInfo();
    assertEquals(3, gridInfo.getRowCount());
    assertEquals(3, gridInfo.getColumnCount());
    {
      Interval[] intervals = gridInfo.getRowIntervals();
      assertEquals(3, intervals.length);
      assertEquals(new Interval(RS, RA), intervals[0]);
      assertEquals(new Interval(RS + RA + RS, RE), intervals[1]);
      assertEquals(new Interval(RS + RA + RS + RE + RS, RA), intervals[2]);
    }
    {
      Interval[] intervals = gridInfo.getColumnIntervals();
      assertEquals(3, intervals.length);
      assertEquals(new Interval(CS, CA), intervals[0]);
      assertEquals(new Interval(CS + CA + CS, CE), intervals[1]);
      assertEquals(new Interval(CS + CA + CS + CE + CS, CA), intervals[2]);
    }
    // cells
    {
      List<WidgetInfo> widgets = panel.getChildrenWidgets();
      assertEquals(new Rectangle(0, 0, 1, 1), gridInfo.getComponentCells(widgets.get(0)));
      assertEquals(new Rectangle(2, 2, 1, 1), gridInfo.getComponentCells(widgets.get(1)));
    }
  }

  /**
   * FlexTable, column spanning, spanned cell is in first row.
   */
  public void test_FlexTable_intervals_2() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    FlexTable panel = new FlexTable();",
            "    rootPanel.add(panel);",
            "    panel.setWidget(0, 0, new Button('A'));",
            "    panel.setWidget(1, 1, new Button('A'));",
            "    panel.setWidget(1, 2, new Button('A'));",
            "    panel.getFlexCellFormatter().setColSpan(0, 0, 2);",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    FlexTableInfo panel = (FlexTableInfo) frame.getChildrenWidgets().get(0);
    IGridInfo gridInfo = panel.getGridInfo();
    // check intervals
    {
      Interval[] intervals = gridInfo.getRowIntervals();
      assertEquals(2, intervals.length);
      assertEquals(new Interval(RS, RA), intervals[0]);
      assertEquals(new Interval(RS + RA + RS, RA), intervals[1]);
    }
    {
      Interval[] intervals = gridInfo.getColumnIntervals();
      assertEquals(3, intervals.length);
      assertEquals(new Interval(CS, CE), intervals[0]);
      assertEquals(new Interval(CS + CE + CS, CA), intervals[1]);
      assertEquals(new Interval(CS + CE + CS + CA + CS, CA), intervals[2]);
    }
    // low_getCellOfColumn()
    {
      assertEquals(0, panel.getStatus().getCellOfColumn(0, 0));
      assertEquals(1, panel.getStatus().getCellOfColumn(0, 2));
      assertEquals(0, panel.getStatus().getCellOfColumn(1, 0));
      assertEquals(1, panel.getStatus().getCellOfColumn(1, 1));
      assertEquals(2, panel.getStatus().getCellOfColumn(1, 2));
      // column in the middle of spanned cell
      assertEquals(0, panel.getStatus().getCellOfColumn(0, 1));
      // column directly after last cell
      assertEquals(2, panel.getStatus().getCellOfColumn(0, 3));
      assertEquals(3, panel.getStatus().getCellOfColumn(1, 3));
      // out of bounds
      try {
        panel.getStatus().getCellOfColumn(0, 100);
        fail();
      } catch (Throwable e) {
      }
    }
  }

  /**
   * FlexTable, column spanning, spanned cell is in second row.
   */
  public void test_FlexTable_intervals_3() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    FlexTable panel = new FlexTable();",
            "    rootPanel.add(panel);",
            "    panel.setWidget(0, 1, new Button('A'));",
            "    panel.setWidget(0, 2, new Button('A'));",
            "    panel.setWidget(1, 0, new Button('A'));",
            "    panel.getFlexCellFormatter().setColSpan(1, 0, 2);",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    FlexTableInfo panel = (FlexTableInfo) frame.getChildrenWidgets().get(0);
    IGridInfo gridInfo = panel.getGridInfo();
    // check intervals
    {
      Interval[] intervals = gridInfo.getRowIntervals();
      assertEquals(2, intervals.length);
      assertEquals(new Interval(RS, RA), intervals[0]);
      assertEquals(new Interval(RS + RA + RS, RA), intervals[1]);
    }
    {
      Interval[] intervals = gridInfo.getColumnIntervals();
      assertEquals(3, intervals.length);
      assertEquals(new Interval(CS, CE), intervals[0]);
      assertEquals(new Interval(CS + CE + CS, CA), intervals[1]);
      assertEquals(new Interval(CS + CE + CS + CA + CS, CA), intervals[2]);
    }
  }

  /**
   * No widget in 1-th column, because of spanning.
   * <p>
   * http://fogbugz.instantiations.com/fogbugz/default.php?41872
   */
  public void test_FlexTable_intervals_noWidgetInMiddleColumn() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    FlexTable panel = new FlexTable();",
            "    rootPanel.add(panel);",
            "    panel.setWidget(0, 0, new Button('A'));",
            "    panel.setWidget(1, 0, new Button('A'));",
            "    panel.setWidget(1, 1, new Button('A'));",
            "    panel.setWidget(2, 2, new Button('A'));",
            "    panel.getFlexCellFormatter().setColSpan(0, 0, 3);",
            "    panel.getFlexCellFormatter().setColSpan(1, 1, 2);",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    FlexTableInfo panel = (FlexTableInfo) frame.getChildrenWidgets().get(0);
    IGridInfo gridInfo = panel.getGridInfo();
    // check intervals
    {
      Interval[] intervals = gridInfo.getRowIntervals();
      assertEquals(3, intervals.length);
      assertEquals(new Interval(RS, RA), intervals[0]);
      assertEquals(new Interval(RS + RA + RS, RA), intervals[1]);
      assertEquals(new Interval(RS + RA + RS + RA + RS, RA), intervals[2]);
    }
    {
      Interval[] intervals = gridInfo.getColumnIntervals();
      assertEquals(3, intervals.length);
      assertEquals(new Interval(CS, CA), intervals[0]);
      assertEquals(new Interval(CS + CA + CS, CE), intervals[1]);
      assertEquals(new Interval(CS + CA + CS + CE + CS, CA), intervals[2]);
    }
  }

  /**
   * No widget in 2-th column, because of spanning.
   * <p>
   * http://fogbugz.instantiations.com/fogbugz/default.php?42224
   */
  public void test_FlexTable_intervals_noWidgetInLastColumn() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    FlexTable panel = new FlexTable();",
            "    rootPanel.add(panel);",
            "    panel.setWidget(0, 0, new Button('A'));",
            "    panel.setWidget(0, 1, new Button('A'));",
            "    panel.getFlexCellFormatter().setColSpan(0, 1, 2);",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    FlexTableInfo panel = (FlexTableInfo) frame.getChildrenWidgets().get(0);
    IGridInfo gridInfo = panel.getGridInfo();
    // check intervals
    {
      Interval[] intervals = gridInfo.getColumnIntervals();
      assertEquals(3, intervals.length);
      assertEquals(new Interval(CS, CA), intervals[0]);
      assertEquals(new Interval(CS + CA + CS, CA / 2), intervals[1]);
      assertEquals(new Interval(CS + CA + CS + CA / 2, CA / 2), intervals[2]);
    }
    {
      Interval[] intervals = gridInfo.getRowIntervals();
      assertEquals(1, intervals.length);
      assertEquals(new Interval(RS, RA), intervals[0]);
    }
  }

  /**
   * FlexTable, one of the components spanned on two rows/columns.
   */
  public void test_FlexTable_intervals_4() throws Exception {
    dontUseSharedGWTState();
    FlexTableInfo.ensureFlexTableHelper(m_testProject.getSourceFolder().getPackageFragment(
        "test.client"));
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    FlexTable panel = new FlexTable();",
            "    rootPanel.add(panel);",
            "    panel.setWidget(0, 0, new Button('A'));",
            "    panel.setWidget(2, 1, new Button('A'));",
            "    panel.getFlexCellFormatter().setRowSpan(0, 0, 2);",
            "    panel.getFlexCellFormatter().setColSpan(0, 0, 2);",
            "    FlexTableHelper.fixRowSpan(panel);",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    FlexTableInfo panel = (FlexTableInfo) frame.getChildrenWidgets().get(0);
    IGridInfo gridInfo = panel.getGridInfo();
    assertEquals(
        "2 3 [1, 2, 2] {(0,0)=(2,2) (0,1)=(1,1) (1,1)=(1,1) (0,2)=(1,1) (1,2)=(1,1)}",
        panel.getStatus().toString());
    // check intervals
    {
      Interval[] intervals = gridInfo.getRowIntervals();
      assertEquals(3, intervals.length);
      int spanHeight = RA / 2;
      assertEquals(new Interval(RS, spanHeight), intervals[0]);
      assertEquals(new Interval(RS + spanHeight, spanHeight), intervals[1]);
      assertEquals(new Interval(RS + spanHeight + spanHeight, RA), intervals[2]);
    }
    {
      Interval[] intervals = gridInfo.getColumnIntervals();
      assertEquals(2, intervals.length);
      assertEquals(new Interval(CS, CE), intervals[0]);
      assertEquals(new Interval(CS + CE + CS, CA), intervals[1]);
    }
    // check TABLE element
    {
      assertEquals(3, ReflectionUtils.invokeMethod(panel.getObject(), "getRowCount()"));
      assertEquals(1, ReflectionUtils.invokeMethod(panel.getObject(), "getCellCount(int)", 0));
      assertEquals(0, ReflectionUtils.invokeMethod(panel.getObject(), "getCellCount(int)", 1));
      assertEquals(2, ReflectionUtils.invokeMethod(panel.getObject(), "getCellCount(int)", 2));
    }
  }

  /**
   * FlexTable, one of the components spanned on two columns.
   */
  public void test_FlexTable_intervals_5() throws Exception {
    dontUseSharedGWTState();
    FlexTableInfo.ensureFlexTableHelper(m_testProject.getSourceFolder().getPackageFragment(
        "test.client"));
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    FlexTable panel = new FlexTable();",
            "    rootPanel.add(panel);",
            "    panel.setWidget(0, 0, new Button('A'));",
            "    panel.getFlexCellFormatter().setColSpan(0, 0, 2);",
            "    FlexTableHelper.fixRowSpan(panel);",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    FlexTableInfo panel = (FlexTableInfo) frame.getChildrenWidgets().get(0);
    IGridInfo gridInfo = panel.getGridInfo();
    assertEquals(2, panel.getColumns().size());
    assertEquals(1, panel.getRows().size());
    assertEquals("2 1 [1] {(0,0)=(2,1)}", panel.getStatus().toString());
    // check intervals
    {
      Interval[] intervals = gridInfo.getRowIntervals();
      assertEquals(1, intervals.length);
      assertEquals(new Interval(RS, RA), intervals[0]);
    }
    {
      Interval[] intervals = gridInfo.getColumnIntervals();
      assertEquals(2, intervals.length);
      assertEquals(new Interval(CS, CA / 2), intervals[0]);
      assertEquals(new Interval(CS + CA / 2, CA / 2), intervals[1]);
    }
    // check TABLE element
    {
      assertEquals(1, ReflectionUtils.invokeMethod(panel.getObject(), "getRowCount()"));
      assertEquals(1, ReflectionUtils.invokeMethod(panel.getObject(), "getCellCount(int)", 0));
    }
  }

  /**
   * FlexTable cells, column spanning.
   */
  public void test_FlexTable_cells_1() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    FlexTable panel = new FlexTable();",
            "    rootPanel.add(panel);",
            "    panel.setWidget(0, 0, new Button('A'));",
            "    panel.setWidget(1, 1, new Button('A'));",
            "    panel.setWidget(1, 2, new Button('A'));",
            "    panel.getFlexCellFormatter().setColSpan(0, 0, 2);",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    FlexTableInfo panel = (FlexTableInfo) frame.getChildrenWidgets().get(0);
    WidgetInfo button_1 = panel.getChildrenWidgets().get(0);
    WidgetInfo button_2 = panel.getChildrenWidgets().get(1);
    WidgetInfo button_3 = panel.getChildrenWidgets().get(2);
    // check IGridInfo cells
    IGridInfo gridInfo = panel.getGridInfo();
    assertEquals(new Rectangle(0, 0, 2, 1), gridInfo.getComponentCells(button_1));
    assertEquals(new Rectangle(1, 1, 1, 1), gridInfo.getComponentCells(button_2));
    assertEquals(new Rectangle(2, 1, 1, 1), gridInfo.getComponentCells(button_3));
    // getOccupied()
    assertSame(button_1, gridInfo.getOccupied(0, 0));
    assertSame(button_1, gridInfo.getOccupied(1, 0));
    assertSame(button_2, gridInfo.getOccupied(1, 1));
    assertSame(button_3, gridInfo.getOccupied(2, 1));
    assertNull(gridInfo.getOccupied(2, 0));
    assertNull(gridInfo.getOccupied(0, 1));
  }

  /**
   * FlexTable, one of the components spanned on two columns, next component should have correct
   * cell.
   */
  public void test_FlexTable_cells_2() throws Exception {
    dontUseSharedGWTState();
    FlexTableInfo.ensureFlexTableHelper(m_testProject.getSourceFolder().getPackageFragment(
        "test.client"));
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    FlexTable panel = new FlexTable();",
            "    rootPanel.add(panel);",
            "    panel.setWidget(0, 0, new Button('A'));",
            "    panel.setWidget(0, 1, new Button('B'));",
            "    panel.getFlexCellFormatter().setColSpan(0, 0, 2);",
            "    FlexTableHelper.fixRowSpan(panel);",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    FlexTableInfo panel = (FlexTableInfo) frame.getChildrenWidgets().get(0);
    WidgetInfo buttonA = panel.getChildrenWidgets().get(0);
    WidgetInfo buttonB = panel.getChildrenWidgets().get(1);
    assertEquals(3, panel.getColumns().size());
    assertEquals(1, panel.getRows().size());
    assertEquals("3 1 [2] {(0,0)=(2,1) (1,0)=(1,1)}", panel.getStatus().toString());
    //
    IGridInfo gridInfo = panel.getGridInfo();
    assertEquals(new Rectangle(0, 0, 2, 1), gridInfo.getComponentCells(buttonA));
    assertEquals(new Rectangle(2, 0, 1, 1), gridInfo.getComponentCells(buttonB));
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // No rows/columns
  //
  ////////////////////////////////////////////////////////////////////////////
  /**
   * Even if there are not rows, we should generate non <code>null</code> intervals.
   * <p>
   * http://fogbugz.instantiations.com/fogbugz/default.php?41941
   */
  public void test_Grid_intervals_noRows() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    Grid panel = new Grid(0, 2);",
            "    rootPanel.add(panel);",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    GridInfo panel = (GridInfo) frame.getChildrenWidgets().get(0);
    IGridInfo gridInfo = panel.getGridInfo();
    // check intervals
    {
      Interval[] intervals = gridInfo.getRowIntervals();
      assertEquals(0, intervals.length);
    }
    {
      Interval[] intervals = gridInfo.getColumnIntervals();
      assertEquals(2, intervals.length);
      assertEquals(new Interval(0, 0), intervals[0]);
      assertEquals(new Interval(0, 0), intervals[1]);
    }
  }

  /**
   * Even if there are not columns, we should generate non <code>null</code> intervals.
   * <p>
   * http://fogbugz.instantiations.com/fogbugz/default.php?41941
   */
  public void test_Grid_intervals_noColumns() throws Exception {
    RootPanelInfo frame =
        parseJavaInfo(
            "public class Test implements EntryPoint {",
            "  public void onModuleLoad() {",
            "    RootPanel rootPanel = RootPanel.get();",
            "    Grid panel = new Grid(2, 0);",
            "    rootPanel.add(panel);",
            "  }",
            "}");
    frame.refresh();
    assertNoErrors(frame);
    GridInfo panel = (GridInfo) frame.getChildrenWidgets().get(0);
    IGridInfo gridInfo = panel.getGridInfo();
    // check intervals
    {
      Interval[] intervals = gridInfo.getRowIntervals();
      assertEquals(2, intervals.length);
      assertEquals(new Interval(0, 0), intervals[0]);
      assertEquals(new Interval(0, 0), intervals[1]);
    }
    {
      Interval[] intervals = gridInfo.getColumnIntervals();
      assertEquals(0, intervals.length);
    }
  }
}
TOP

Related Classes of com.google.gdt.eclipse.designer.core.model.widgets.grid.HTMLTableGridInfoTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.