/*******************************************************************************
* Copyright (c) 2008 Olivier Moises
*
* 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:
* Olivier Moises- initial API and implementation
*******************************************************************************/
package org.eclipse.wazaabi.engine.swt.tests.layouts;
import java.io.IOException;
import java.io.InputStream;
import junit.framework.Assert;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.wazaabi.engine.edp.EDPSingletons;
import org.eclipse.wazaabi.engine.swt.tests.SWTUtils;
import org.eclipse.wazaabi.mm.core.styles.CoreStylesFactory;
import org.eclipse.wazaabi.mm.core.styles.ExpandLayoutRule;
import org.eclipse.wazaabi.mm.core.styles.ExpandRule;
import org.eclipse.wazaabi.mm.core.styles.StackLayoutRule;
import org.eclipse.wazaabi.mm.core.styles.TabRule;
import org.eclipse.wazaabi.mm.core.styles.TabbedLayoutRule;
import org.eclipse.wazaabi.mm.core.widgets.Container;
import org.eclipse.wazaabi.mm.core.widgets.CoreWidgetsFactory;
import org.eclipse.wazaabi.mm.core.widgets.PushButton;
import org.junit.Test;
public class TestLayoutSwitchFromStackLayoutToTabbedLayout extends AbstractTestExpandLayout {
protected Container container;
protected ExpandLayoutRule expandLayoutRule;
protected ExpandRule expandRule;
protected ExpandRule expandRule2;
protected PushButton button1;
protected PushButton button2;
protected TabbedLayoutRule tabbedLayoutRule;
protected TabRule tabRule;
protected TabRule tabRule2;
protected Shell swtShell;
protected StackLayoutRule stackLayoutRule;
protected CTabFolder swtTabFolder;
protected CTabItem swtTab1;
protected CTabItem swtTab2;
protected Button swtButton;
protected Button swtButton2;
protected final static String TABLABEL = "tab 1";
protected final static String TABLABEL2 = "tab 2";
protected static final String BUTTON1_TEXT = "Hello world";
protected static final String BUTTON2_TEXT = "This is wazaabi tests";
protected static final String IMAGE_URN = "urn:java:tabb.png";
@Override
public void before(){
super.before();
container = CoreWidgetsFactory.eINSTANCE.createContainer();
stackLayoutRule = CoreStylesFactory.eINSTANCE.createStackLayoutRule();
tabbedLayoutRule = CoreStylesFactory.eINSTANCE.createTabbedLayoutRule();
tabbedLayoutRule.setPropertyName("layout");
tabRule = CoreStylesFactory.eINSTANCE.createTabRule();
tabRule.setPropertyName("layout-data");
tabRule.setLabel(TABLABEL);
tabRule.setImage(IMAGE_URN);
tabRule2 = CoreStylesFactory.eINSTANCE.createTabRule();
tabRule2.setPropertyName("layout-data");
tabRule2.setLabel(TABLABEL2);
button1 = CoreWidgetsFactory.eINSTANCE.createPushButton();
button1.setText(BUTTON1_TEXT);
button2 = CoreWidgetsFactory.eINSTANCE.createPushButton();
button2.setText(BUTTON2_TEXT);
}
public org.eclipse.swt.widgets.Widget createWazaabiStackLayoutWithOneButtonAndChangeStackLayoutRuleToTabbedRule(boolean before){ //creates a wazaabi container with buttons in it
if(!before)
viewer.setContents(container);
container.getStyleRules().add(stackLayoutRule);
container.getChildren().add(button1);
container.getStyleRules().remove(container.getFirstStyleRule("layout", null));
container.getStyleRules().add(tabbedLayoutRule);
//button1.getStyleRules().remove(button1.getFirstStyleRule("layout-data", null));
button1.getStyleRules().add(tabRule);
if(before)
viewer.setContents(container);
getViewer().getUpdateManager().performUpdate();
// mainShell.open();
// while (!swtShell.isDisposed()) {
// if (!display.readAndDispatch())
// display.sleep();
// }
return SWTUtils.getWidget(viewer, container);
}
public org.eclipse.swt.widgets.Widget createWazaabiExpandLayoutWithTwoExpandContainingOneButtonAndChangeExpandRuleToTabbedRule(boolean before){
if(!before)
viewer.setContents(container);
container.getStyleRules().add(stackLayoutRule);
container.getChildren().add(button1);
container.getChildren().add(button2);
container.getStyleRules().remove(container.getFirstStyleRule("layout", null));
container.getStyleRules().add(tabbedLayoutRule);
button1.getStyleRules().remove(button1.getFirstStyleRule("layout-data", null));
button1.getStyleRules().add(tabRule);
button2.getStyleRules().remove(button2.getFirstStyleRule("layout-data", null));
button2.getStyleRules().add(tabRule2);
if(before)
viewer.setContents(container);
getViewer().getUpdateManager().performUpdate();
return SWTUtils.getWidget(viewer, container);
}
public void createSWTTabbedLayoutWithOneTabContainingOneButton() throws IOException{ //creates a wazaabi container with buttons in it
swtShell = new Shell(getDisplay(), SWT.SHELL_TRIM);
swtShell.setText("SWT");
swtShell.setLayout(new FillLayout());
swtShell.setSize(INITIAL_WIDTH, INITIAL_HEIGHT);
swtTabFolder = new CTabFolder(swtShell, SWT.NONE);
swtTab1 = new CTabItem(swtTabFolder, SWT.NONE);
swtTab1.setText(TABLABEL);
InputStream in = EDPSingletons.getComposedCodeLocator().getResourceInputStream(IMAGE_URN);
swtTab1.setImage(new Image(display, in));
swtButton = new Button(swtTabFolder,SWT.PUSH);
swtButton.setText(BUTTON1_TEXT);
swtTab1.setControl(swtButton);
}
public void createSWTTabbedLayoutWithTwoTabContainingOneButtonEach() throws IOException{ //creates a wazaabi container with buttons in it
swtShell = new Shell(getDisplay(), SWT.SHELL_TRIM);
swtShell.setText("SWT");
swtShell.setLayout(new FillLayout());
swtShell.setSize(INITIAL_WIDTH, INITIAL_HEIGHT);
swtTabFolder = new CTabFolder(swtShell, SWT.NONE);
swtTab1 = new CTabItem(swtTabFolder, SWT.NONE);
swtTab1.setText(TABLABEL);
InputStream in = EDPSingletons.getComposedCodeLocator().getResourceInputStream(IMAGE_URN);
swtTab1.setImage(new Image(display, in));
swtTab2 = new CTabItem(swtTabFolder, SWT.NONE);
swtTab2.setText(TABLABEL2);
swtButton = new Button(swtTabFolder,SWT.PUSH);
swtButton.setText(BUTTON1_TEXT);
swtTab1.setControl(swtButton);
swtButton2 = new Button(swtTabFolder,SWT.PUSH);
swtButton2.setText(BUTTON2_TEXT);
swtTab2.setControl(swtButton2);
}
@Test
public void testSwitchFromExpandLayoutRuleToTabbedLayoutRuleBeforeSetContentsEqualsSWTCTabFolder() throws IOException{
createSWTTabbedLayoutWithOneTabContainingOneButton();
org.eclipse.swt.widgets.Widget tabFolder = createWazaabiStackLayoutWithOneButtonAndChangeStackLayoutRuleToTabbedRule(true);
Assert.assertTrue(tabFolder instanceof CTabFolder);
Assert.assertNotNull(((CTabFolder)tabFolder).getItem(0));
Assert.assertTrue(((CTabFolder)tabFolder).getItem(0) instanceof CTabItem);
CTabItem tab1 = ((CTabFolder) tabFolder).getItem(0);
Assert.assertTrue(TABLABEL.equals(tab1.getText()));
Assert.assertTrue(tab1.getControl() instanceof Button);
Button button = (Button) tab1.getControl();
Assert.assertEquals(button.getText(),swtButton.getText());
getViewer().getUpdateManager().performUpdate();
CTabItem wazTab = null;
for (CTabItem tabs: ((CTabFolder)tabFolder).getItems() ){
if (tabs.getControl()==button){
wazTab = tabs;
break;
}
}
Assert.assertNotNull(wazTab);
Assert.assertEquals(tab1.getBounds(),wazTab.getBounds());
}
@Test
public void testSwitchFromExpandLayoutRuleToTabbedLayoutRuleAfterSetContentsEqualsSWTCTabFolder() throws IOException{
createSWTTabbedLayoutWithOneTabContainingOneButton();
org.eclipse.swt.widgets.Widget tabFolder = createWazaabiStackLayoutWithOneButtonAndChangeStackLayoutRuleToTabbedRule(false);
Assert.assertTrue(tabFolder instanceof CTabFolder);
Assert.assertNotNull(((CTabFolder)tabFolder).getItem(0));
Assert.assertTrue(((CTabFolder)tabFolder).getItem(0) instanceof CTabItem);
CTabItem tab1 = ((CTabFolder) tabFolder).getItem(0);
Assert.assertTrue(TABLABEL.equals(tab1.getText()));
Assert.assertTrue(tab1.getControl() instanceof Button);
Button button = (Button) tab1.getControl();
Assert.assertEquals(button.getText(),swtButton.getText());
getViewer().getUpdateManager().performUpdate();
CTabItem wazTab = null;
for (CTabItem tabs: ((CTabFolder)tabFolder).getItems() ){
if (tabs.getControl()==button){
wazTab = tabs;
break;
}
}
Assert.assertNotNull(wazTab);
Assert.assertEquals(tab1.getBounds(),wazTab.getBounds());
}
@Test
public void testSwitchFromExpandLayoutRuleToTabbedLayoutRuleWithTwoTabsBeforeSetContentsEqualsSWTCTabFolder() throws IOException{
createSWTTabbedLayoutWithTwoTabContainingOneButtonEach();
org.eclipse.swt.widgets.Widget tabFolder = createWazaabiExpandLayoutWithTwoExpandContainingOneButtonAndChangeExpandRuleToTabbedRule(true);
Assert.assertTrue(tabFolder instanceof CTabFolder);
Assert.assertEquals(2,((CTabFolder)tabFolder).getItemCount());
Assert.assertNotNull(((CTabFolder)tabFolder).getItem(0));
Assert.assertTrue(((CTabFolder)tabFolder).getItem(0) instanceof CTabItem);
CTabItem tab1 = ((CTabFolder) tabFolder).getItem(0);
Assert.assertTrue(tab1.getText().equals(TABLABEL));
Assert.assertTrue(tab1.getControl() instanceof Button);
Button button = (Button) tab1.getControl();
Assert.assertEquals(button.getText(),swtButton.getText());
CTabItem wazTab = null;
for (CTabItem tabs: ((CTabFolder)tabFolder).getItems() ){
if (tabs.getControl()==button){
wazTab = tabs;
break;
}
}
Assert.assertNotNull(wazTab);
Assert.assertEquals(tab1.getBounds(),wazTab.getBounds());
//Assert.assertTrue(SWTUtils.haveSameBounds(viewer, button1, swtButton));
Assert.assertNotNull(((CTabFolder)tabFolder).getItem(1));
Assert.assertTrue(((CTabFolder)tabFolder).getItem(1) instanceof CTabItem);
CTabItem tab2 = ((CTabFolder) tabFolder).getItem(1);
Assert.assertTrue(tab2.getText().equals(TABLABEL2));
Assert.assertTrue(tab2.getControl() instanceof Button);
Button buttonbis = (Button) tab2.getControl();
Assert.assertEquals(buttonbis.getText(),swtButton2.getText());
CTabItem wazTab2 = null;
for (CTabItem tabs: ((CTabFolder)tabFolder).getItems() ){
if (tabs.getControl()==buttonbis){
wazTab2 = tabs;
break;
}
}
Assert.assertNotNull(wazTab2);
Assert.assertEquals(tab2.getBounds(),wazTab2.getBounds());
//Assert.assertTrue(SWTUtils.haveSameBounds(viewer, button2, swtButton2));
}
@Test
public void testSwitchFromExpandLayoutRuleToTabbedLayoutRuleWithTwoTabsAfterSetContentsEqualsSWTCTabFolder() throws IOException{
createSWTTabbedLayoutWithTwoTabContainingOneButtonEach();
org.eclipse.swt.widgets.Widget tabFolder = createWazaabiExpandLayoutWithTwoExpandContainingOneButtonAndChangeExpandRuleToTabbedRule(false);
Assert.assertTrue(tabFolder instanceof CTabFolder);
Assert.assertEquals(2,((CTabFolder)tabFolder).getItemCount());
Assert.assertNotNull(((CTabFolder)tabFolder).getItem(0));
Assert.assertTrue(((CTabFolder)tabFolder).getItem(0) instanceof CTabItem);
CTabItem tab1 = ((CTabFolder) tabFolder).getItem(0);
Assert.assertTrue(tab1.getText().equals(TABLABEL));
Assert.assertTrue(tab1.getControl() instanceof Button);
Button button = (Button) tab1.getControl();
Assert.assertEquals(button.getText(),swtButton.getText());
CTabItem wazTab = null;
for (CTabItem tabs: ((CTabFolder)tabFolder).getItems() ){
if (tabs.getControl()==button){
wazTab = tabs;
break;
}
}
Assert.assertNotNull(wazTab);
Assert.assertEquals(tab1.getBounds(),wazTab.getBounds());
//Assert.assertTrue(SWTUtils.haveSameBounds(viewer, button1, swtButton));
Assert.assertNotNull(((CTabFolder)tabFolder).getItem(1));
Assert.assertTrue(((CTabFolder)tabFolder).getItem(1) instanceof CTabItem);
CTabItem tab2 = ((CTabFolder) tabFolder).getItem(1);
Assert.assertTrue(tab2.getText().equals(TABLABEL2));
Assert.assertTrue(tab2.getControl() instanceof Button);
Button buttonbis = (Button) tab2.getControl();
Assert.assertEquals(buttonbis.getText(),swtButton2.getText());
CTabItem wazTab2 = null;
for (CTabItem tabs: ((CTabFolder)tabFolder).getItems() ){
if (tabs.getControl()==buttonbis){
wazTab2 = tabs;
break;
}
}
Assert.assertNotNull(wazTab2);
Assert.assertEquals(tab2.getBounds(),wazTab2.getBounds());
//Assert.assertTrue(SWTUtils.haveSameBounds(viewer, button2, swtButton2));
}
}