/******************************************************************************* * 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()); } }