/******************************************************************************* * Copyright (c) 2006-2013 The RCP Company and others. * 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 * * Contributors: * The RCP Company - initial API and implementation *******************************************************************************/ package com.rcpcompany.uibindings.extests.utils; import static com.rcpcompany.test.utils.ui.UITestUtils.*; import static org.junit.Assert.*; import org.eclipse.core.databinding.observable.list.IObservableList; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import com.rcpcompany.uibindings.IBindingContext; import com.rcpcompany.uibindings.IColumnBinding; import com.rcpcompany.uibindings.IManager; import com.rcpcompany.uibindings.IViewerBinding; import com.rcpcompany.uibindings.UIBindingsEMFObservables; import com.rcpcompany.uibindings.moao.IMOAOPackage; import com.rcpcompany.uibindings.tests.shop.Shop; import com.rcpcompany.uibindings.tests.shop.ShopFactory; import com.rcpcompany.uibindings.tests.shop.ShopItem; import com.rcpcompany.uibindings.tests.shop.ShopItemGroup; import com.rcpcompany.uibindings.tests.shop.ShopPackage; import com.rcpcompany.uibindings.tests.utils.BaseUIBTestUtils; import com.rcpcompany.uibindings.tests.utils.views.UIBTestView; import com.rcpcompany.uibindings.utils.ITableCreator; /** * Test of {@link ITableChooser}. * * @author Tonny Madsen, The RCP Company */ public class TableCreatorTest { private UIBTestView myView; private Composite myBody; private Shop myShop; @Before public void before() { BaseUIBTestUtils.resetAll(); IManager.Factory.getManager().setEditCellSingleClick(false); createModel(); createView(); myView.getSite().getPage().activate(myView); } private void createModel() { myShop = ShopFactory.eINSTANCE.createShop(); final ShopItemGroup group = ShopFactory.eINSTANCE.createShopItemGroup(); group.setName("group"); myShop.getShopGroups().add(group); ShopItem i = ShopFactory.eINSTANCE.createShopItem(); i.setName("item 0"); i.setPrice(5f); i.setForSale(true); myShop.getShopItems().add(i); i = ShopFactory.eINSTANCE.createShopItem(); i.setName("item 1"); i.setPrice(10f); i.setForSale(false); i.setGroup(group); myShop.getShopItems().add(i); } /** * Creates the view */ public void createView() { myView = BaseUIBTestUtils.createUIBTestView(this); myBody = myView.getBody(); } @After public void disposeView() { if (myView != null) { myView.getSite().getPage().hideView(myView); } } /** * Tests the basic get/set functionality */ @Test public void testBasicGetSet() { final IBindingContext context = IBindingContext.Factory.createContext(myBody); final IObservableList items = UIBindingsEMFObservables.observeList(context.getEditingDomain(), myShop, ShopPackage.Literals.SHOP__SHOP_ITEMS); final ITableCreator creator = ITableCreator.Factory.create(context, myBody, SWT.NONE, items); final Table table = creator.getTable(); final IViewerBinding binding = creator.getBinding(); assertNotNull(table); assertNotNull(binding); assertEquals(table, binding.getControl()); assertEquals(items, binding.getList()); } /** * Tests created columns */ @Test public void testCreateColumns() { final IBindingContext context = IBindingContext.Factory.createContext(myBody); final IObservableList items = UIBindingsEMFObservables.observeList(context.getEditingDomain(), myShop, ShopPackage.Literals.SHOP__SHOP_ITEMS); final ITableCreator creator = ITableCreator.Factory.create(context, myBody, SWT.NONE, items); creator.addColumn(IMOAOPackage.Literals.NAMED_OBJECT__NAME, 200); creator.addColumn(ShopPackage.Literals.SHOP_ITEM__PRICE, 100); context.finish(); yield(); final Table table = creator.getTable(); // Remember the invisible first column... assertEquals(2, table.getColumnCount() - creator.getBinding().getFirstTableColumnOffset()); testColumn(table.getColumn(0 + creator.getBinding().getFirstTableColumnOffset()), "Name", 200, SWT.LEFT); testColumn(table.getColumn(1 + creator.getBinding().getFirstTableColumnOffset()), "Price", 100, SWT.RIGHT); } private void testColumn(TableColumn column, String text, int width, int alignment) { assertNotNull(column); if (text != null) { assertEquals(text, column.getText()); } assertEquals(width, column.getWidth()); // The column itself is always centered. It is the label provider that does the alignment // now. // assertEquals(alignment, column.getAlignment()); } /** * Tests created text columns */ @Test public void testCreateTextColumns() { final IBindingContext context = IBindingContext.Factory.createContext(myBody); final IObservableList items = UIBindingsEMFObservables.observeList(context.getEditingDomain(), myShop, ShopPackage.Literals.SHOP__SHOP_ITEMS); final ITableCreator creator = ITableCreator.Factory.create(context, myBody, SWT.NONE, items); final IColumnBinding nameColumn = creator.addColumn("name(w=300)"); final IColumnBinding priceColumn = creator.addColumn("price(w=50)"); final IColumnBinding groupNameColumn = creator.addColumn("group.name(w=80,a=c)"); final IColumnBinding groupDescriptionColumn = creator.addColumn("group.description(w=100)"); assertNotNull(nameColumn); assertNull(nameColumn.getBaseColumn()); assertNotNull(priceColumn); assertNull(priceColumn.getBaseColumn()); assertNotNull(groupNameColumn); assertNotNull(groupNameColumn.getBaseColumn()); assertNotNull(groupDescriptionColumn); assertNotNull(groupDescriptionColumn.getBaseColumn()); assertEquals(groupNameColumn.getBaseColumn(), groupDescriptionColumn.getBaseColumn()); yield(); context.finish(); final Table table = creator.getTable(); // Remember the invisible first column... assertEquals(5, table.getColumnCount() - creator.getBinding().getFirstTableColumnOffset()); testColumn(table.getColumn(0 + creator.getBinding().getFirstTableColumnOffset()), "Name", 300, SWT.LEFT); testColumn(table.getColumn(1 + creator.getBinding().getFirstTableColumnOffset()), "Price", 50, SWT.RIGHT); testColumn(table.getColumn(2 + creator.getBinding().getFirstTableColumnOffset()), null, 0, SWT.LEFT); testColumn(table.getColumn(3 + creator.getBinding().getFirstTableColumnOffset()), "Name", 80, SWT.CENTER); testColumn(table.getColumn(4 + creator.getBinding().getFirstTableColumnOffset()), "Description", 100, SWT.LEFT); } /** * Test that the extra FILTER style of {@link ITableCreator} does not overlap with any other * styles for {@link Table}. */ @Test public void testStylesFILTER() { testStyle(ITableCreator.FILTER); } /** * Test that the extra RESIZE style of {@link ITableCreator} does not overlap with any other * styles for {@link Table}. */ @Test public void testStylesRESIZE() { testStyle(ITableCreator.RESIZE); } public void testStyle(int style) { final int[] tableStyles = { SWT.SINGLE, SWT.MULTI, SWT.CHECK, SWT.FULL_SELECTION, SWT.HIDE_SELECTION, SWT.VIRTUAL, SWT.NO_SCROLL, SWT.H_SCROLL, SWT.V_SCROLL }; for (final int s : tableStyles) { assertTrue("Testing " + s, (style & s) == 0); } } /** * Tests created text columns */ @Test @Ignore public void testColumnResize() { doTestColumnResize(ITableCreator.RESIZE); } /** * Tests created text columns and a filter box */ @Test @Ignore public void testColumnResizeFilter() { doTestColumnResize(ITableCreator.RESIZE | ITableCreator.FILTER); } private void doTestColumnResize(int style) { final Composite top = IManager.Factory.getManager().getFormToolkit(myBody).createComposite(myBody); final IBindingContext context = IBindingContext.Factory.createContext(myBody); final IObservableList items = UIBindingsEMFObservables.observeList(context.getEditingDomain(), myShop, ShopPackage.Literals.SHOP__SHOP_ITEMS); final ITableCreator creator = ITableCreator.Factory.create(context, top, style, items); final IColumnBinding noColumn = creator.addColumn("__ROW_NO__(w=10)"); final IColumnBinding nameColumn = creator.addColumn("name(w=50,ww=200)"); final IColumnBinding priceColumn = creator.addColumn("price(w=50)"); final IColumnBinding groupNameColumn = creator.addColumn("group.name(w=80, ww=0)"); context.finish(); yield(); final Composite c = (Composite) top.getChildren()[0]; // Too small c.setSize(150, 300); c.layout(); sleep(200); testColumnWidth(noColumn, 10); testColumnWidth(nameColumn, 50); testColumnWidth(priceColumn, 50); testColumnWidth(groupNameColumn, 80); // Minimum c.setSize(194, 300); c.layout(); sleep(200); testColumnWidth(noColumn, 10); testColumnWidth(nameColumn, 50); testColumnWidth(priceColumn, 50); testColumnWidth(groupNameColumn, 80); // +30 c.setSize(504, 300); c.layout(); sleep(200); testColumnWidth(noColumn, 10); testColumnWidth(nameColumn, 273); testColumnWidth(priceColumn, 136); testColumnWidth(groupNameColumn, 80); } private void testColumnWidth(IColumnBinding col, int expectedWidth) { assertEquals(expectedWidth, col.getColumnAdapter().getWidth()); } }