Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorenzo Bettini2014-05-20 09:36:14 +0000
committerLorenzo Bettini2014-06-01 08:52:09 +0000
commite5c4dfa9947c9efb3c4c56ebca88b1d8ac876935 (patch)
tree3e43be558d23b96d0ea28254147c6166d518b7af
parent78f02ff6ae528e36b8cd95a24a2dadd4baeefca3 (diff)
downloadorg.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
-rw-r--r--tests/org.eclipse.emf.parsley.tests.swtbot/EmfParsleyDslEditorTests.launch21
-rw-r--r--tests/org.eclipse.emf.parsley.tests.swtbot/META-INF/MANIFEST.MF3
-rw-r--r--tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/EmfParsleyAbstractTests.java3
-rw-r--r--tests/org.eclipse.emf.parsley.tests.swtbot/src/org/eclipse/emf/parsley/tests/utils/PDETargetPlatformUtils.java100
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.");
+ }
+}

Back to the top