diff options
author | Lorenzo Bettini | 2014-05-20 09:36:14 +0000 |
---|---|---|
committer | Lorenzo Bettini | 2014-06-01 08:52:09 +0000 |
commit | e5c4dfa9947c9efb3c4c56ebca88b1d8ac876935 (patch) | |
tree | 3e43be558d23b96d0ea28254147c6166d518b7af | |
parent | 78f02ff6ae528e36b8cd95a24a2dadd4baeefca3 (diff) | |
download | org.eclipse.emf-parsley-e5c4dfa9947c9efb3c4c56ebca88b1d8ac876935.tar.gz org.eclipse.emf-parsley-e5c4dfa9947c9efb3c4c56ebca88b1d8ac876935.tar.xz org.eclipse.emf-parsley-e5c4dfa9947c9efb3c4c56ebca88b1d8ac876935.zip |
utility class for setting the target platform
This is required when running SwtBot tests in Tycho that requires the
PDE, for example, for testing that the imported projects compile fine,
or if they use the DSL, which requires PDE projects dependencies.
See https://bugs.eclipse.org/bugs/show_bug.cgi?id=343156
Change-Id: I6367f1c4ab1bb6f2e7c2924d5da07f6c18b426c6
4 files changed, 111 insertions, 16 deletions
diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/EmfParsleyDslEditorTests.launch b/tests/org.eclipse.emf.parsley.tests.swtbot/EmfParsleyDslEditorTests.launch index 2efeebff6..611a4de8c 100644 --- a/tests/org.eclipse.emf.parsley.tests.swtbot/EmfParsleyDslEditorTests.launch +++ b/tests/org.eclipse.emf.parsley.tests.swtbot/EmfParsleyDslEditorTests.launch @@ -11,7 +11,7 @@ <booleanAttribute key="clearws" value="true"/> <booleanAttribute key="clearwslog" value="false"/> <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/> -<booleanAttribute key="default" value="true"/> +<booleanAttribute key="default" value="false"/> <stringAttribute key="featureDefaultLocation" value="workspace"/> <stringAttribute key="featurePluginResolution" value="workspace"/> <booleanAttribute key="includeOptional" value="true"/> @@ -36,37 +36,28 @@ <stringAttribute key="product" value="org.eclipse.sdk.ide"/> <booleanAttribute key="run_in_ui_thread" value="false"/> <setAttribute key="selected_features"> -<setEntry value="org.eclipse.cvs.source:default"/> -<setEntry value="org.eclipse.cvs:default"/> -<setEntry value="org.eclipse.e4.rcp.source:default"/> <setEntry value="org.eclipse.e4.rcp:default"/> +<setEntry value="org.eclipse.emf.cdo.server:default"/> <setEntry value="org.eclipse.emf.common:default"/> <setEntry value="org.eclipse.emf.ecore:default"/> +<setEntry value="org.eclipse.emf.parsley.cdo.feature:default"/> <setEntry value="org.eclipse.emf.parsley.dsl.feature:default"/> <setEntry value="org.eclipse.emf.parsley.examples.feature:default"/> <setEntry value="org.eclipse.emf.parsley.feature:default"/> +<setEntry value="org.eclipse.emf.parsley.sdk:default"/> <setEntry value="org.eclipse.emf.parsley.tests.swtbot.feature:default"/> -<setEntry value="org.eclipse.equinox.p2.core.feature.source:default"/> <setEntry value="org.eclipse.equinox.p2.core.feature:default"/> -<setEntry value="org.eclipse.equinox.p2.extras.feature.source:default"/> <setEntry value="org.eclipse.equinox.p2.extras.feature:default"/> -<setEntry value="org.eclipse.equinox.p2.rcp.feature.source:default"/> <setEntry value="org.eclipse.equinox.p2.rcp.feature:default"/> -<setEntry value="org.eclipse.equinox.p2.user.ui.source:default"/> <setEntry value="org.eclipse.equinox.p2.user.ui:default"/> -<setEntry value="org.eclipse.help.source:default"/> <setEntry value="org.eclipse.help:default"/> -<setEntry value="org.eclipse.jdt.source:default"/> <setEntry value="org.eclipse.jdt:default"/> -<setEntry value="org.eclipse.pde.source:default"/> <setEntry value="org.eclipse.pde:default"/> -<setEntry value="org.eclipse.platform.source:default"/> <setEntry value="org.eclipse.platform:default"/> -<setEntry value="org.eclipse.rcp.source:default"/> <setEntry value="org.eclipse.rcp:default"/> -<setEntry value="org.eclipse.sdk:default"/> <setEntry value="org.eclipse.swtbot.eclipse:default"/> <setEntry value="org.eclipse.swtbot.forms:default"/> +<setEntry value="org.eclipse.swtbot.generator.feature:default"/> <setEntry value="org.eclipse.swtbot.ide:default"/> <setEntry value="org.eclipse.swtbot:default"/> <setEntry value="org.eclipse.xtend.sdk:default"/> @@ -88,7 +79,7 @@ <booleanAttribute key="show_selected_only" value="false"/> <stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/> <booleanAttribute key="tracing" value="false"/> -<booleanAttribute key="useCustomFeatures" value="false"/> +<booleanAttribute key="useCustomFeatures" value="true"/> <booleanAttribute key="useDefaultConfig" value="true"/> <booleanAttribute key="useDefaultConfigArea" value="false"/> <booleanAttribute key="useProduct" value="true"/> diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/META-INF/MANIFEST.MF b/tests/org.eclipse.emf.parsley.tests.swtbot/META-INF/MANIFEST.MF index 61186e2ad..ac000a367 100644 --- a/tests/org.eclipse.emf.parsley.tests.swtbot/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.emf.parsley.tests.swtbot/META-INF/MANIFEST.MF @@ -22,7 +22,8 @@ Require-Bundle: org.eclipse.swtbot.go;bundle-version="2.2.0", org.eclipse.emf.parsley.views, org.eclipse.emf.parsley.editors, org.eclipse.emf.parsley.tests.models, - org.objectweb.asm;bundle-version="5.0.1" + org.objectweb.asm;bundle-version="5.0.1", + org.eclipse.pde.core;bundle-version="3.9.1" Bundle-Activator: org.eclipse.emf.parsley.tests.EmfParsleyTestsActivator Export-Package: org.eclipse.emf.parsley.tests, org.eclipse.emf.parsley.tests.editors, diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyAbstractTests.java b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyAbstractTests.java index 328309467..c30ea6a6c 100644 --- a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyAbstractTests.java +++ b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyAbstractTests.java @@ -40,6 +40,7 @@ import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.parsley.examples.library.Library; +import org.eclipse.emf.parsley.tests.utils.PDETargetPlatformUtils; import org.eclipse.emf.parsley.tests.views.LibraryEmfView; import org.eclipse.emf.parsley.util.ActionBarsUtils; import org.eclipse.jface.action.IStatusLineManager; @@ -272,6 +273,8 @@ public class EmfParsleyAbstractTests { @BeforeClass public static void beforeClass() throws Exception { + PDETargetPlatformUtils.setTargetPlatform(); + bot = new SWTWorkbenchBot(); // increase timeout to 10 seconds diff --git a/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/utils/PDETargetPlatformUtils.java b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/utils/PDETargetPlatformUtils.java new file mode 100644 index 000000000..a50e6fb30 --- /dev/null +++ b/tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/utils/PDETargetPlatformUtils.java @@ -0,0 +1,100 @@ +/******************************************************************************* + * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) 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: + * Lorenzo Bettini - Initial contribution and API + *******************************************************************************/ +package org.eclipse.emf.parsley.tests.utils; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.osgi.baseadaptor.BaseData; +import org.eclipse.osgi.framework.internal.core.AbstractBundle; +import org.eclipse.pde.core.target.ITargetDefinition; +import org.eclipse.pde.core.target.ITargetLocation; +import org.eclipse.pde.core.target.ITargetPlatformService; +import org.eclipse.pde.core.target.LoadTargetDefinitionJob; +import org.eclipse.pde.internal.core.target.TargetPlatformService; +import org.osgi.framework.Bundle; + +/** + * Implements workaround suggested here: + * https://bugs.eclipse.org/bugs/show_bug.cgi?id=343156 + * This is required when running SwtBot tests in Tycho + * that requires the PDE, for example, for testing that the + * imported projects compile fine, or if they use the DSL, which + * requires PDE projects dependencies. + * + * @author Lorenzo Bettini - some adaptations + */ +@SuppressWarnings("restriction") +public class PDETargetPlatformUtils { + + private static boolean targetPlatformAlreadySet = false; + + /** + * Sets a target platform in the test platform to get workspace builds OK + * with PDE. + * + * @throws Exception + */ + public static void setTargetPlatform() throws Exception { + if (System.getProperty("buildingWithTycho") != null) { + if (targetPlatformAlreadySet) { + System.out.println("Target platform already set"); + return; + } + targetPlatformAlreadySet = true; + System.out.println("Generating a target platform"); + } else { + System.out.println("Using the Workbench's target platform"); + return; + } + + ITargetPlatformService tpService = TargetPlatformService.getDefault(); + ITargetDefinition targetDef = tpService.newTarget(); + targetDef.setName("Tycho platform"); + Bundle[] bundles = Platform.getBundle("org.eclipse.core.runtime").getBundleContext().getBundles(); + List<ITargetLocation> bundleContainers = new ArrayList<ITargetLocation>(); + Set<File> dirs = new HashSet<File>(); + System.out.println("Bundles for the target platform:"); + for (Bundle bundle : bundles) { + System.out.print(bundle); + AbstractBundle bundleImpl = (AbstractBundle) bundle; + BaseData bundleData = (BaseData) bundleImpl.getBundleData(); +// EquinoxBundle bundleImpl = (EquinoxBundle) bundle; +// Generation generation = (Generation) bundleImpl.getModule().getCurrentRevision().getRevisionInfo(); + File file = bundleData.getBundleFile().getBaseFile(); + File folder = file.getParentFile(); + if (!dirs.contains(folder)) { + dirs.add(folder); + bundleContainers.add(tpService.newDirectoryLocation(folder.getAbsolutePath())); + } + } + System.out.println(""); + System.out.println("Bundles added the target platform."); + targetDef.setTargetLocations(bundleContainers.toArray(new ITargetLocation[bundleContainers.size()])); + targetDef.setArch(Platform.getOSArch()); + targetDef.setOS(Platform.getOS()); + targetDef.setWS(Platform.getWS()); + targetDef.setNL(Platform.getNL()); + // targetDef.setJREContainer() + tpService.saveTargetDefinition(targetDef); + + System.out.print("Loading target platform... "); + Job job = new LoadTargetDefinitionJob(targetDef); + job.schedule(); + job.join(); + System.out.println("DONE."); + } +} |