blob: fadc0baea6165217defbdd6b93ae0788f023d914 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2016 IBM Corporation 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:
* IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.e4.ui.tests.application;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptor;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspectiveStack;
import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer;
import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.workbench.modeling.EModelService;
import org.junit.Test;
public class EModelServiceTest extends UITest {
@Test
public void testGetPerspectiveFor_RegularElement() {
MWindow window = ems.createModelElement(MWindow.class);
application.getChildren().add(window);
application.setSelectedElement(window);
MPerspectiveStack perspectiveStack = ems.createModelElement(MPerspectiveStack.class);
window.getChildren().add(perspectiveStack);
window.setSelectedElement(perspectiveStack);
MPerspective perspective = ems.createModelElement(MPerspective.class);
perspectiveStack.getChildren().add(perspective);
perspectiveStack.setSelectedElement(perspective);
MPartStack partStack = ems.createModelElement(MPartStack.class);
perspective.getChildren().add(partStack);
perspective.setSelectedElement(partStack);
getEngine().createGui(window);
EModelService modelService = window.getContext().get(EModelService.class);
MPerspective foundPerspective = modelService.getPerspectiveFor(partStack);
assertNotNull(foundPerspective);
assertEquals(perspective, foundPerspective);
}
@Test
public void testGetPerspectiveFor_SharedElement() {
MWindow window = ems.createModelElement(MWindow.class);
application.getChildren().add(window);
application.setSelectedElement(window);
MPerspectiveStack perspectiveStack = ems.createModelElement(MPerspectiveStack.class);
window.getChildren().add(perspectiveStack);
window.setSelectedElement(perspectiveStack);
MPerspective perspective = ems.createModelElement(MPerspective.class);
perspectiveStack.getChildren().add(perspective);
perspectiveStack.setSelectedElement(perspective);
MPlaceholder placeholder = ems.createModelElement(MPlaceholder.class);
perspective.getChildren().add(placeholder);
perspective.setSelectedElement(placeholder);
MPartStack partStack = ems.createModelElement(MPartStack.class);
placeholder.setRef(partStack);
partStack.setCurSharedRef(placeholder);
getEngine().createGui(window);
EModelService modelService = window.getContext().get(EModelService.class);
MPerspective foundPerspective = modelService.getPerspectiveFor(partStack);
assertNotNull(foundPerspective);
assertEquals(perspective, foundPerspective);
}
@Test
public void testGetPerspectiveFor_SharedElement2() {
MWindow window = ems.createModelElement(MWindow.class);
application.getChildren().add(window);
application.setSelectedElement(window);
MPerspectiveStack perspectiveStack = ems.createModelElement(MPerspectiveStack.class);
window.getChildren().add(perspectiveStack);
window.setSelectedElement(perspectiveStack);
MPerspective perspective = ems.createModelElement(MPerspective.class);
perspectiveStack.getChildren().add(perspective);
perspectiveStack.setSelectedElement(perspective);
MPlaceholder placeholder = ems.createModelElement(MPlaceholder.class);
perspective.getChildren().add(placeholder);
perspective.setSelectedElement(placeholder);
MPartSashContainer partSashContainer = ems.createModelElement(MPartSashContainer.class);
placeholder.setRef(partSashContainer);
partSashContainer.setCurSharedRef(placeholder);
MPartStack partStack = ems.createModelElement(MPartStack.class);
partSashContainer.getChildren().add(partStack);
partSashContainer.setSelectedElement(partStack);
getEngine().createGui(window);
EModelService modelService = window.getContext().get(EModelService.class);
MPerspective foundPerspective = modelService.getPerspectiveFor(partStack);
assertNotNull(foundPerspective);
assertEquals(perspective, foundPerspective);
}
@Test
public void testBringToTop01() {
MWindow windowA = ems.createModelElement(MWindow.class);
application.getChildren().add(windowA);
application.setSelectedElement(windowA);
MWindow windowB = ems.createModelElement(MWindow.class);
application.getChildren().add(windowB);
getEngine().createGui(windowA);
getEngine().createGui(windowB);
assertEquals(windowA, application.getSelectedElement());
EModelService modelService = applicationContext.get(EModelService.class);
modelService.bringToTop(windowA);
assertEquals(windowA, application.getSelectedElement());
modelService.bringToTop(windowB);
assertEquals(windowB, application.getSelectedElement());
}
@Test
public void testBringToTop02() {
MWindow windowA = ems.createModelElement(MWindow.class);
application.getChildren().add(windowA);
application.setSelectedElement(windowA);
MWindow windowB = ems.createModelElement(MWindow.class);
application.getChildren().add(windowB);
MPart partB = ems.createModelElement(MPart.class);
windowB.getChildren().add(partB);
windowB.setSelectedElement(partB);
getEngine().createGui(windowA);
getEngine().createGui(windowB);
assertEquals(windowB, application.getSelectedElement());
EModelService modelService = applicationContext.get(EModelService.class);
modelService.bringToTop(windowA);
assertEquals(windowA, application.getSelectedElement());
modelService.bringToTop(partB);
assertEquals(windowA, application.getSelectedElement());
}
@Test
public void testBringToTop_Bug334411() {
MWindow window = ems.createModelElement(MWindow.class);
application.getChildren().add(window);
application.setSelectedElement(window);
MWindow detachedWindow = ems.createModelElement(MWindow.class);
detachedWindow.setToBeRendered(false);
window.getWindows().add(detachedWindow);
MPart part = ems.createModelElement(MPart.class);
part.setToBeRendered(false);
detachedWindow.getChildren().add(part);
getEngine().createGui(window);
assertEquals(window, application.getSelectedElement());
EModelService modelService = applicationContext.get(EModelService.class);
modelService.bringToTop(part);
assertTrue(part.isToBeRendered());
assertTrue(detachedWindow.isToBeRendered());
}
@Test
public void testGetElementLocation_Bug331062_01() {
MPerspective perspective = ems.createModelElement(MPerspective.class);
MPart part = ems.createModelElement(MPart.class);
perspective.getChildren().add(part);
EModelService modelService = applicationContext.get(EModelService.class);
assertEquals(EModelService.NOT_IN_UI, modelService.getElementLocation(part));
}
@Test
public void testGetElementLocation_Bug331062_02() {
MPerspective perspective = ems.createModelElement(MPerspective.class);
MWindow detachedWindow = ems.createModelElement(MWindow.class);
perspective.getWindows().add(detachedWindow);
MWindow innerWindow = ems.createModelElement(MWindow.class);
detachedWindow.getWindows().add(innerWindow);
EModelService modelService = applicationContext.get(EModelService.class);
assertEquals(EModelService.NOT_IN_UI, modelService.getElementLocation(innerWindow));
}
@Test
public void testMoveWithoutIndexNoOtherElements() {
MWindow source = ems.createModelElement(MWindow.class);
MWindow window = ems.createModelElement(MWindow.class);
MPart part = ems.createModelElement(MPart.class);
source.getChildren().add(part);
EModelService modelService = applicationContext.get(EModelService.class);
modelService.move(part, window);
assertEquals(part, window.getChildren().get(0));
}
@Test
public void testMoveWithoutIndexWithOneOtherElements() {
MWindow source = ems.createModelElement(MWindow.class);
MWindow window = ems.createModelElement(MWindow.class);
MPart part = ems.createModelElement(MPart.class);
MPart part2 = ems.createModelElement(MPart.class);
source.getChildren().add(part);
window.getChildren().add(part2);
EModelService modelService = applicationContext.get(EModelService.class);
modelService.move(part, window);
assertSame(part, window.getChildren().get(1));
}
@Test
public void testMoveWithIndexWithTwoOtherElement() {
MWindow source = ems.createModelElement(MWindow.class);
MWindow window = ems.createModelElement(MWindow.class);
MPart part = ems.createModelElement(MPart.class);
MPart part2 = ems.createModelElement(MPart.class);
MPart part3 = ems.createModelElement(MPart.class);
source.getChildren().add(part);
window.getChildren().add(part2);
window.getChildren().add(part3);
EModelService modelService = applicationContext.get(EModelService.class);
modelService.move(part, window, 1);
assertSame(part, window.getChildren().get(1));
}
@Test
public void testCountRenderableChildren_WithWindows() {
MWindow window = ems.createModelElement(MWindow.class);
application.getChildren().add(window);
application.setSelectedElement(window);
MPerspectiveStack perspectiveStack = ems.createModelElement(MPerspectiveStack.class);
window.getChildren().add(perspectiveStack);
window.setSelectedElement(perspectiveStack);
MPerspective perspective = ems.createModelElement(MPerspective.class);
perspectiveStack.getChildren().add(perspective);
perspectiveStack.setSelectedElement(perspective);
MPartStack partStack = ems.createModelElement(MPartStack.class);
perspective.getChildren().add(partStack);
perspective.setSelectedElement(partStack);
MWindow perspectiveWindow = ems.createModelElement(MWindow.class);
perspective.getWindows().add(perspectiveWindow);
getEngine().createGui(window);
EModelService modelService = window.getContext().get(EModelService.class);
assertEquals(2, modelService.countRenderableChildren(perspective));
}
@Test
public void testCreatePartFromDescriptorWithTrimBars() {
MPartDescriptor mPartDescriptor = ems.createModelElement(MPartDescriptor.class);
MTrimBar mTrimBar = ems.createModelElement(MTrimBar.class);
mTrimBar.setElementId("test.trimbar.id");
mPartDescriptor.getTrimBars().add(mTrimBar);
MPart newPart = ems.createPart(mPartDescriptor);
assertEquals(1, newPart.getTrimBars().size());
assertEquals(1, mPartDescriptor.getTrimBars().size());
assertEquals(newPart.getTrimBars().get(0).getElementId(), mPartDescriptor.getTrimBars().get(0).getElementId());
}
}