package org.eclipse.e4.ui.workbench.addons.minmax;
import static org.junit.Assert.assertTrue;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.di.UISynchronize;
import org.eclipse.e4.ui.internal.workbench.ModelServiceImpl;
import org.eclipse.e4.ui.internal.workbench.PartServiceImpl;
import org.eclipse.e4.ui.internal.workbench.UIEventPublisher;
import org.eclipse.e4.ui.internal.workbench.swt.CSSRenderingUtils;
import org.eclipse.e4.ui.internal.workbench.swt.E4Application;
import org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine;
import org.eclipse.e4.ui.model.application.MAddon;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.impl.ApplicationFactoryImpl;
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.advanced.impl.AdvancedFactoryImpl;
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.MTrimmedWindow;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicFactoryImpl;
import org.eclipse.e4.ui.workbench.IPresentationEngine;
import org.eclipse.e4.ui.workbench.IResourceUtilities;
import org.eclipse.e4.ui.workbench.modeling.EModelService;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
import org.eclipse.e4.ui.workbench.swt.util.ISWTResourceUtilities;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class MaximizePartSashContainerPlaceholderTest {
@Parameters(name = "org.eclipse.ui.editorss: {0}")
public static Collection<Object[]> data() {
final List<Object[]> data = new ArrayList<Object[]>();
// useCorrectPlaceholderId
data.add(new Object[] { true });
data.add(new Object[] { false });
return data;
}
private MPartStack partStackMain;
private MPlaceholder placeholderMain;
private boolean useCorrectPlaceholderId;
private Shell shell;
public MaximizePartSashContainerPlaceholderTest(boolean useCorrectPlaceholderId) {
this.useCorrectPlaceholderId = useCorrectPlaceholderId;
}
@Before
public void before() {
prepareApplicationModel();
}
@After
public void tearDown() {
shell.dispose();
}
private void prepareApplicationModel() {
MApplication application = ApplicationFactoryImpl.eINSTANCE
.createApplication();
MTrimmedWindow window = BasicFactoryImpl.eINSTANCE
.createTrimmedWindow();
window.setElementId("MainWindow");
MPerspectiveStack perspectiveStackMain = AdvancedFactoryImpl.eINSTANCE
.createPerspectiveStack();
perspectiveStackMain.setElementId("perspectiveStackMain");
MPerspective perspectiveMain = AdvancedFactoryImpl.eINSTANCE
.createPerspective();
perspectiveMain.setElementId("perspectiveMain");
MPartSashContainer containerMain = BasicFactoryImpl.eINSTANCE
.createPartSashContainer();
partStackMain = BasicFactoryImpl.eINSTANCE.createPartStack();
partStackMain.setElementId("mainPartStack");
MPart partMain = BasicFactoryImpl.eINSTANCE.createPart();
MPartSashContainer patSashConatiner = BasicFactoryImpl.eINSTANCE
.createPartSashContainer();
MPartStack partStackAreaMain = BasicFactoryImpl.eINSTANCE
.createPartStack();
MPart partAreaMain = BasicFactoryImpl.eINSTANCE.createPart();
placeholderMain = AdvancedFactoryImpl.eINSTANCE.createPlaceholder();
placeholderMain.setElementId("placeholderMain");
application.getChildren().add(window);
application.setSelectedElement(window);
window.getChildren().add(perspectiveStackMain);
window.setSelectedElement(perspectiveStackMain);
perspectiveStackMain.getChildren().add(perspectiveMain);
perspectiveStackMain.setSelectedElement(perspectiveMain);
perspectiveMain.getChildren().add(containerMain);
perspectiveMain.setSelectedElement(containerMain);
containerMain.getChildren().add(partStackMain);
containerMain.getChildren().add(placeholderMain);
partStackMain.getChildren().add(partMain);
patSashConatiner.getChildren().add(partStackAreaMain);
partStackAreaMain.getChildren().add(partAreaMain);
placeholderMain.setRef(patSashConatiner);
window.getSharedElements().add(patSashConatiner);
// set correct ids
if (useCorrectPlaceholderId) {
placeholderMain.setElementId("org.eclipse.ui.editorss");
} else {
placeholderMain.setElementId("placeholderMain");
}
// instantiate addon
MAddon minMaxAddon = ApplicationFactoryImpl.eINSTANCE.createAddon();
minMaxAddon.setElementId("MinMaxAddon"); //$NON-NLS-1$
minMaxAddon
.setContributionURI("bundleclass://org.eclipse.e4.ui.workbench.addons.swt/org.eclipse.e4.ui.workbench.addons.minmax.MinMaxAddon"); //$NON-NLS-1$
IEclipseContext appContext = E4Application.createDefaultContext();
appContext.set(Display.class, Display.getDefault());
appContext.set(MApplication.class.getName(), application);
appContext.set(MWindow.class, window);
appContext.set(UISynchronize.class, new UISynchronize() {
public void syncExec(Runnable runnable) {
runnable.run();
}
public void asyncExec(Runnable runnable) {
runnable.run();
}
});
appContext.set(EModelService.class, new ModelServiceImpl(appContext));
ContextInjectionFactory.setDefault(appContext);
IPresentationEngine newEngine = ContextInjectionFactory.make(
PartRenderingEngine.class, appContext);
appContext.set(IPresentationEngine.class, newEngine);
appContext
.set(EPartService.class, ContextInjectionFactory.make(
PartServiceImpl.class, appContext));
application.setContext(appContext);
final UIEventPublisher ep = new UIEventPublisher(appContext);
((Notifier) application).eAdapters().add(ep);
appContext.set(UIEventPublisher.class, ep);
appContext.set(MAddon.class, minMaxAddon);
ContextInjectionFactory.setDefault(appContext);
ContextInjectionFactory.make(MinMaxAddon.class, appContext);
appContext.set(IResourceUtilities.class, new ISWTResourceUtilities() {
@Override
public ImageDescriptor imageDescriptorFromURI(URI iconPath) {
try {
return ImageDescriptor.createFromURL(new URL(iconPath
.toString()));
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
@Override
public Image adornImage(Image toAdorn, Image adornment) {
return null;
}
});
appContext.set(CSSRenderingUtils.class, new CSSRenderingUtils());
E4Application.initializeServices(application);
shell = (Shell) newEngine.createGui(window);
}
@Test
public void testMainPlaceholderMax() {
placeholderMain.getTags().add(IPresentationEngine.MAXIMIZED);
assertTrue(partStackMain.getTags().contains(
IPresentationEngine.MINIMIZED_BY_ZOOM));
}
}