Important packaging changes.
1. Update to 0.5.0!
2. We're moving build back down to 0.7.2 for Xpand, etc.. because of performance issues with XPand 0.8.0 == up to 40x slowdown.
3. We're forcing use of 0.7.x for AMf for same reasons.
4. Rebuilt all xtext stuff for xtext 0.7.2.
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.testing.ide/META-INF/MANIFEST.MF b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.testing.ide/META-INF/MANIFEST.MF
index 7b37a72..111a2f8 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.testing.ide/META-INF/MANIFEST.MF
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.testing.ide/META-INF/MANIFEST.MF
@@ -6,18 +6,18 @@
Bundle-Activator: org.eclipse.amp.amf.testing.ide.Activator
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
- org.eclipse.amp.amf.acore;bundle-version="0.2.0",
- org.eclipse.amp.amf.parameters;bundle-version="0.2.0",
- org.eclipse.amp.amf.testing;bundle-version="0.2.0",
+ org.eclipse.amp.amf.acore;bundle-version="0.5.0",
+ org.eclipse.amp.amf.parameters;bundle-version="0.5.0",
+ org.eclipse.amp.amf.testing;bundle-version="0.5.0",
org.eclipse.emf.ecore;bundle-version="2.5.0",
org.eclipse.core.resources;bundle-version="3.5.0",
org.ascape.core;bundle-version="5.2.0",
- org.eclipse.amp.escape.ide;bundle-version="0.2.0",
- org.eclipse.amp.axf.core;bundle-version="0.2.0",
- org.eclipse.amp.escape.ascape;bundle-version="0.2.0",
- org.eclipse.amp.axf.ide;bundle-version="0.2.0",
+ org.eclipse.amp.escape.ide;bundle-version="0.5.0",
+ org.eclipse.amp.axf.core;bundle-version="0.5.0",
+ org.eclipse.amp.escape.ascape;bundle-version="0.5.0",
+ org.eclipse.amp.axf.ide;bundle-version="0.5.0",
org.eclipse.emf.ecore.xmi;bundle-version="2.5.0",
- org.eclipse.amp.amf.abase;bundle-version="0.2.0"
+ org.eclipse.amp.amf.abase;bundle-version="0.5.0"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.apache.commons.lang,
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.testing.ide/src/org/eclipse/amp/amf/testing/ide/ExecuteTestHandler.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.testing.ide/src/org/eclipse/amp/amf/testing/ide/ExecuteTestHandler.java
index 8029fb9..fbc252f 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.testing.ide/src/org/eclipse/amp/amf/testing/ide/ExecuteTestHandler.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.testing.ide/src/org/eclipse/amp/amf/testing/ide/ExecuteTestHandler.java
@@ -18,7 +18,6 @@
import java.util.ArrayList;
import java.util.List;
-import org.apache.commons.lang.time.DateFormatUtils;
import org.ascape.runtime.Runner;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
@@ -63,27 +62,12 @@
}
Runner.setDisplayGraphics(false);
- String name = getName(selList);
- name += "-" + DateFormatUtils.format(System.currentTimeMillis(), "yyMMddHHmm-SSSS");
- new TestRunSet(project, testResources, name, getRunsPerTest()).run();
+ new TestRunSet(project, testResources, getRunsPerTest()).run();
}
return null;
}
- private String getName(List selList) {
- String name = "";
- if (selList.size() == 1 && selList.get(0) instanceof IFolder) {
- IFolder folder = (IFolder) selList.get(0);
- name = folder.getProjectRelativePath().toPortableString().replace("/", "_");
- return name;
- }
- for (IResource res : testResources) {
- name += res.getName().substring(0, Math.min(5, res.getName().length() - 1)) + "_";
- }
- name = name.substring(0, name.length() - 2);
- return name;
- }
private void addResource(IResource res) {
if (res instanceof IFile) {
diff --git a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.testing.ide/src/org/eclipse/amp/amf/testing/ide/TestRunSet.java b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.testing.ide/src/org/eclipse/amp/amf/testing/ide/TestRunSet.java
index 53504a8..5336299 100644
--- a/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.testing.ide/src/org/eclipse/amp/amf/testing/ide/TestRunSet.java
+++ b/org.eclipse.amp.escape/plugins/org.eclipse.amp.escape.testing.ide/src/org/eclipse/amp/amf/testing/ide/TestRunSet.java
@@ -12,257 +12,277 @@
*
* </copyright>
*
-*/
-package org.eclipse.amp.amf.testing.ide;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.amp.amf.abase.IInterpreterProvider;
-import org.eclipse.amp.amf.parameters.AParFactory;
-import org.eclipse.amp.amf.testing.ATestInterpreter;
-import org.eclipse.amp.amf.testing.aTest.Model;
-import org.eclipse.amp.amf.testing.aTest.TestMember;
-import org.eclipse.amp.amf.testing.ares.ResultType;
-import org.eclipse.amp.amf.testing.ares.RunSet;
-import org.eclipse.amp.amf.testing.ares.impl.AresFactoryImpl;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.emf.common.util.URI;
-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.ecore.xmi.XMLParserPool;
-import org.eclipse.emf.ecore.xmi.XMLResource;
-import org.eclipse.emf.ecore.xmi.impl.XMLParserPoolImpl;
-
-public class TestRunSet {
-
+ */
+package org.eclipse.amp.amf.testing.ide;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang.time.DateFormatUtils;
+import org.eclipse.amp.amf.abase.IInterpreterProvider;
+import org.eclipse.amp.amf.parameters.AParFactory;
+import org.eclipse.amp.amf.testing.ATestInterpreter;
+import org.eclipse.amp.amf.testing.aTest.Model;
+import org.eclipse.amp.amf.testing.aTest.TestMember;
+import org.eclipse.amp.amf.testing.ares.ResultType;
+import org.eclipse.amp.amf.testing.ares.RunSet;
+import org.eclipse.amp.amf.testing.ares.impl.AresFactoryImpl;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.emf.common.util.URI;
+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.ecore.xmi.XMLParserPool;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.ecore.xmi.impl.XMLParserPoolImpl;
+
+public class TestRunSet {
+
// TODO allow maximum threads to be preferences
- private static final int MAX_THREADS = 8;
-
- String name;
-
- private Resource aResResource;
-
- RunSet runSet;
-
- int testRunCount;
- int testInFlightCount;
- int testCompleteCount;
- int testSuccessCount;
-
- List<IResource> uniqueTests;
-
- private List lookupTable = new ArrayList();
-
- private IProgressMonitor monitor;
-
- private MultiStatus status;
-
- private IInterpreterProvider aParPool;
-
- /**
- * The total number of tests waiting including multiple runs per resource
- */
- private List<Resource> testsWaiting;
-
- IProject project;
-
- int runsPerTest;
-
- private XMLParserPool parserPool = new XMLParserPoolImpl();
-
- private Map nameToFeatureMap = new HashMap();
-
- private ResourceSet resourceSet;
-
- public TestRunSet(IProject project, List<IResource> testResources, String name, int runsPerTest) {
- super();
- this.uniqueTests = testResources;
- this.name = name;
+ private static final int MAX_THREADS = 8;
+
+ String name;
+
+ private Resource aResResource;
+
+ RunSet runSet;
+
+ int testRunCount;
+ int testInFlightCount;
+ int testCompleteCount;
+ int testSuccessCount;
+
+ List<IResource> uniqueTests;
+
+ private List lookupTable = new ArrayList();
+
+ private IProgressMonitor monitor;
+
+ private MultiStatus status;
+
+ private IInterpreterProvider aParPool;
+
+ /**
+ * The total number of tests waiting including multiple runs per resource
+ */
+ private List<Resource> testsWaiting;
+
+ IProject project;
+
+ int runsPerTest;
+
+ private XMLParserPool parserPool = new XMLParserPoolImpl();
+
+ private Map nameToFeatureMap = new HashMap();
+
+ private ResourceSet resourceSet;
+
+ public TestRunSet(IProject project, List<IResource> testResources, int runsPerTest) {
+ super();
+ this.uniqueTests = testResources;
// use first test location for project
- this.project = project;
- this.runsPerTest = runsPerTest;
- }
-
- protected void initialize() {
- monitor.subTask("Creating Test Resource");
- resourceSet = new ResourceSetImpl();
-
- resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_ATTACHMENT, Boolean.TRUE);
- resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, Boolean.TRUE);
- resourceSet.getLoadOptions().put(XMLResource.OPTION_USE_DEPRECATED_METHODS, Boolean.TRUE);
- resourceSet.getLoadOptions().put(XMLResource.OPTION_USE_PARSER_POOL, parserPool);
- resourceSet.getLoadOptions().put(XMLResource.OPTION_USE_XML_NAME_TO_FEATURE_MAP, nameToFeatureMap);
-
- aParPool = AParFactory.createPooled(resourceSet);
-
- monitor.subTask("Creating Results");
- IFolder resultsFolder = project.getFolder("results");
- IFile resultsFile = resultsFolder.getFile(name + ".ares");
- URI fileURI = URI.createPlatformResourceURI(project.getName() + "/" + resultsFile.getProjectRelativePath(),
- true);
- aResResource = resourceSet.createResource(fileURI);
-
- runSet = AresFactoryImpl.eINSTANCE.createRunSet();
-
- if (runSet != null) {
- aResResource.getContents().add(runSet);
- } else {
- throw new RuntimeException("Couldn't create resource.");
- }
- if (monitor.isCanceled()) {
- return;
- }
- saveResults();
- }
-
-
- private synchronized void saveResults() {
- Map<Object, Object> saveOptions = new HashMap<Object, Object>();
- saveOptions.put(XMLResource.OPTION_CONFIGURATION_CACHE, Boolean.TRUE);
- saveOptions.put(XMLResource.OPTION_USE_CACHED_LOOKUP_TABLE, lookupTable);
- monitor.subTask("Saving Results");
- try {
- aResResource.save(saveOptions);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- public void runTests(final IProgressMonitor monitor, final MultiStatus status) {
- this.monitor = monitor;
- this.status = status;
- monitor.beginTask("Executing Escape Tests: " + name, uniqueTests.size());
-
- initialize();
- monitor.subTask("Preparing Tests");
- testsWaiting = Collections.synchronizedList(new ArrayList<Resource>());
- for (IResource resource : uniqueTests) {
-
- IPath modelPath = ((IFile) resource).getFullPath();
- URI aTestURI = URI.createPlatformResourceURI(modelPath.toString(), true);
- Resource atestResource = resourceSet.getResource(aTestURI, true);
- Model testmodel = (Model) atestResource.getContents().get(0);
- if (testmodel.getContains().size() == 0) {
- for (int i = 0; i < runsPerTest; i++) {
- testsWaiting.add(atestResource);
- }
- } else {
- for (TestMember member : testmodel.getContains()) {
- Resource emfResource = resourceSet.getResource(URI.createURI(ATestInterpreter.convertURI(member)),
- true);
- for (int i = 0; i < runsPerTest; i++) {
- testsWaiting.add(emfResource);
- }
- }
- }
- }
+ this.project = project;
+ this.runsPerTest = runsPerTest;
+ }
+
+ private String getName() {
+ String name = "";
+ if (uniqueTests.size() < 3) {
+ for (IResource res : uniqueTests) {
+ name += res.getProjectRelativePath().removeFileExtension().lastSegment() + "_";
+ }
+ } else {
+ for (IResource res : uniqueTests) {
+ name += res.getName().substring(0, Math.min(5, res.getName().length() - 1)) + "_";
+ }
+ }
+ name += DateFormatUtils.format(System.currentTimeMillis(), "MM-dd-yy_HH-mm-S");
+ return name;
+ }
+
+ protected void initialize() {
+ monitor.subTask("Creating Test Resource");
+ resourceSet = new ResourceSetImpl();
+
+ resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_ATTACHMENT, Boolean.TRUE);
+ resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, Boolean.TRUE);
+ resourceSet.getLoadOptions().put(XMLResource.OPTION_USE_DEPRECATED_METHODS, Boolean.TRUE);
+ resourceSet.getLoadOptions().put(XMLResource.OPTION_USE_PARSER_POOL, parserPool);
+ resourceSet.getLoadOptions().put(XMLResource.OPTION_USE_XML_NAME_TO_FEATURE_MAP, nameToFeatureMap);
+
+ aParPool = AParFactory.createPooled(resourceSet);
+
+ monitor.subTask("Creating Results");
+
+ String name = getName();
+
+ IResource firstResource = uniqueTests.get(0);
+ // Get rid of test folder
+ IPath projectPath = new Path("results").append(
+ firstResource.getProjectRelativePath().removeFirstSegments(1)
+ .removeLastSegments(1)).append(name + ".ares");
+
+ URI fileURI = URI.createPlatformResourceURI(project.getName() + "/" + projectPath, true);
+ aResResource = resourceSet.createResource(fileURI);
+
+ runSet = AresFactoryImpl.eINSTANCE.createRunSet();
+
+ if (runSet != null) {
+ aResResource.getContents().add(runSet);
+ } else {
+ throw new RuntimeException("Couldn't create resource.");
+ }
+ if (monitor.isCanceled()) {
+ return;
+ }
+ saveResults();
+ }
+
+ private synchronized void saveResults() {
+ Map<Object, Object> saveOptions = new HashMap<Object, Object>();
+ saveOptions.put(XMLResource.OPTION_CONFIGURATION_CACHE, Boolean.TRUE);
+ saveOptions.put(XMLResource.OPTION_USE_CACHED_LOOKUP_TABLE, lookupTable);
+ monitor.subTask("Saving Results");
+ try {
+ aResResource.save(saveOptions);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void runTests(final IProgressMonitor monitor, final MultiStatus status) {
+ this.monitor = monitor;
+ this.status = status;
+ monitor.beginTask("Executing Escape Tests: " + name, uniqueTests.size());
+
+ initialize();
+ monitor.subTask("Preparing Tests");
+ testsWaiting = Collections.synchronizedList(new ArrayList<Resource>());
+ for (IResource resource : uniqueTests) {
+
+ IPath modelPath = ((IFile) resource).getFullPath();
+ URI aTestURI = URI.createPlatformResourceURI(modelPath.toString(), true);
+ Resource atestResource = resourceSet.getResource(aTestURI, true);
+ Model testmodel = (Model) atestResource.getContents().get(0);
+ if (testmodel.getContains().size() == 0) {
+ for (int i = 0; i < runsPerTest; i++) {
+ testsWaiting.add(atestResource);
+ }
+ } else {
+ for (TestMember member : testmodel.getContains()) {
+ Resource emfResource = resourceSet.getResource(URI.createURI(ATestInterpreter.convertURI(member)),
+ true);
+ for (int i = 0; i < runsPerTest; i++) {
+ testsWaiting.add(emfResource);
+ }
+ }
+ }
+ }
// Release the unique tests so that the underlying resources can be gc'd when individual tests are removed.
- uniqueTests = null;
- testRunCount = testsWaiting.size();
- testCompleteCount = 0;
- testSuccessCount = 0;
-
- fillThreads();
- while (testCompleteCount < testRunCount && !monitor.isCanceled()) {
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- }
- }
- if (!monitor.isCanceled()) {
- if (testSuccessCount == testRunCount) {
- runSet.setResult(ResultType.SUCCESS);
- } else {
- runSet.setResult(ResultType.FAILURE);
- }
- saveResults();
- }
- monitor.done();
- }
-
- private synchronized void fillThreads() {
- monitor.subTask("(Filling Threads)");
- while (testsWaiting.size() > 0 && testInFlightCount < MAX_THREADS && !monitor.isCanceled()) {
- final Resource nextATest = testsWaiting.remove(0);
- testInFlightCount++;
+ uniqueTests = null;
+ testRunCount = testsWaiting.size();
+ testCompleteCount = 0;
+ testSuccessCount = 0;
+
+ fillThreads();
+ while (testCompleteCount < testRunCount && !monitor.isCanceled()) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ }
+ }
+ if (!monitor.isCanceled()) {
+ if (testSuccessCount == testRunCount) {
+ runSet.setResult(ResultType.SUCCESS);
+ } else {
+ runSet.setResult(ResultType.FAILURE);
+ }
+ saveResults();
+ }
+ monitor.done();
+ }
+
+ private synchronized void fillThreads() {
+ monitor.subTask("(Filling Threads)");
+ while (testsWaiting.size() > 0 && testInFlightCount < MAX_THREADS && !monitor.isCanceled()) {
+ final Resource nextATest = testsWaiting.remove(0);
+ testInFlightCount++;
// We don't want to block on load interpreter
- new Thread() {
- public void run() {
- TestRun nextRun = new TestRun(TestRunSet.this, runSet, project, nextATest, aParPool);
- nextRun.runTest(monitor, status, false);
- };
- }.start();
- updateMonitor();
- }
- }
-
- public void run() {
- Job escapeRun = new Job("Run " + name) {
- protected IStatus run(IProgressMonitor monitor) {
- final MultiStatus status = new MultiStatus("org.eclipse.amp.amf.testing.ide", Status.OK,
- "Executing Tests", null);
- runTests(monitor, status);
- return status;
- }
- };
- escapeRun.setPriority(Job.LONG);
- escapeRun.schedule();
- }
-
- /**
- * @param thread
- */
- public void testComplete(TestRun run, Throwable failureCondition) {
- synchronized (this) {
- if (run.getRun() != null && run.getRun().getResult() == ResultType.SUCCESS) {
- testSuccessCount++;
- }
- testCompleteCount++;
- testInFlightCount--;
- if (failureCondition == null) {
- runSet.getRuns().add(run.getRun());
- }
- fillThreads();
- }
- saveResults();
- updateMonitor();
- monitor.worked(1);
- }
-
- private void updateMonitor() {
+ new Thread() {
+ public void run() {
+ TestRun nextRun = new TestRun(TestRunSet.this, runSet, project, nextATest, aParPool);
+ nextRun.runTest(monitor, status, false);
+ };
+ }.start();
+ updateMonitor();
+ }
+ }
+
+ public void run() {
+ Job escapeRun = new Job("Run " + name) {
+ protected IStatus run(IProgressMonitor monitor) {
+ final MultiStatus status = new MultiStatus("org.eclipse.amp.amf.testing.ide", Status.OK,
+ "Executing Tests", null);
+ runTests(monitor, status);
+ return status;
+ }
+ };
+ escapeRun.setPriority(Job.LONG);
+ escapeRun.schedule();
+ }
+
+ /**
+ * @param thread
+ */
+ public void testComplete(TestRun run, Throwable failureCondition) {
+ synchronized (this) {
+ if (run.getRun() != null && run.getRun().getResult() == ResultType.SUCCESS) {
+ testSuccessCount++;
+ }
+ testCompleteCount++;
+ testInFlightCount--;
+ if (failureCondition == null) {
+ runSet.getRuns().add(run.getRun());
+ }
+ fillThreads();
+ }
+ saveResults();
+ updateMonitor();
+ monitor.worked(1);
+ }
+
+ private void updateMonitor() {
// Don't block on ui monitor update
- monitor.subTask("Completed " + testCompleteCount + " of " + testRunCount + " ("
- + (testCompleteCount - testSuccessCount) + " failures)");
- }
-
- public RunSet getRunSet() {
- return runSet;
- }
-
- public XMLParserPool getParserPool() {
- return parserPool;
- }
-
- public Map getNameToFeatureMap() {
- return nameToFeatureMap;
- }
-
- public ResourceSet getResourceSet() {
- return resourceSet;
- }
-}
+ monitor.subTask("Completed " + testCompleteCount + " of " + testRunCount + " ("
+ + (testCompleteCount - testSuccessCount) + " failures)");
+ }
+
+ public RunSet getRunSet() {
+ return runSet;
+ }
+
+ public XMLParserPool getParserPool() {
+ return parserPool;
+ }
+
+ public Map getNameToFeatureMap() {
+ return nameToFeatureMap;
+ }
+
+ public ResourceSet getResourceSet() {
+ return resourceSet;
+ }
+}