Refactored tests to use new test support

The new test support bundle introduced in a previous change is now
used by all test bundles in Eclipse Capra. This makes them more
modular and less dependent on the testsuite project.
This change thus also introduces some adaptations of the
requirements of each test bundle.

Change-Id: I88785843e4e82459014a784d8ebd4c9eb964c7fc
diff --git a/tests/org.eclipse.capra.handler.cdt.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.capra.handler.cdt.tests/META-INF/MANIFEST.MF
index 48cc4ae..edc9029 100644
--- a/tests/org.eclipse.capra.handler.cdt.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.capra.handler.cdt.tests/META-INF/MANIFEST.MF
@@ -11,7 +11,6 @@
  org.junit,
  org.eclipse.cdt.managedbuilder.core,
  org.eclipse.cdt.core,
- org.eclipse.capra.generic.tracemodel,
  org.eclipse.capra.generic.persistence,
  org.eclipse.capra.generic.artifactmodel,
  org.eclipse.cdt.managedbuilder.gnu.ui
diff --git a/tests/org.eclipse.capra.handler.featureide.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.capra.handler.featureide.tests/META-INF/MANIFEST.MF
index 54d755f..ef3ca0c 100644
--- a/tests/org.eclipse.capra.handler.featureide.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.capra.handler.featureide.tests/META-INF/MANIFEST.MF
@@ -10,7 +10,7 @@
  org.eclipse.capra.generic.tracemodel,
  org.eclipse.capra.handler.featureide,
  org.eclipse.capra.ui,
- org.eclipse.capra.testsuite,
+ org.eclipse.capra.testsupport,
  org.eclipse.core.resources,
  org.eclipse.core.runtime,
  org.eclipse.ui,
diff --git a/tests/org.eclipse.capra.handler.featureide.tests/src/org/eclipse/capra/handler/featureide/tests/TestFeatureIDETraces.java b/tests/org.eclipse.capra.handler.featureide.tests/src/org/eclipse/capra/handler/featureide/tests/TestFeatureIDETraces.java
index 9509d4a..270c66d 100644
--- a/tests/org.eclipse.capra.handler.featureide.tests/src/org/eclipse/capra/handler/featureide/tests/TestFeatureIDETraces.java
+++ b/tests/org.eclipse.capra.handler.featureide.tests/src/org/eclipse/capra/handler/featureide/tests/TestFeatureIDETraces.java
@@ -10,8 +10,8 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.featureide.tests;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -25,7 +25,7 @@
 import org.eclipse.capra.core.helpers.ArtifactHelper;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
-import org.eclipse.capra.testsuite.TestHelper;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
diff --git a/tests/org.eclipse.capra.handler.jdt.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.capra.handler.jdt.tests/META-INF/MANIFEST.MF
index 832e535..1538455 100644
--- a/tests/org.eclipse.capra.handler.jdt.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.capra.handler.jdt.tests/META-INF/MANIFEST.MF
@@ -12,7 +12,6 @@
  org.eclipse.jdt.launching,
  org.eclipse.jdt.core,
  org.eclipse.capra.generic.persistence,
- org.eclipse.capra.generic.tracemodel,
  org.eclipse.capra.generic.artifactmodel
 Export-Package: org.eclipse.capra.handler.jdt;x-internal:=true
 Automatic-Module-Name: org.eclipse.capra.handler.jdt.tests
diff --git a/tests/org.eclipse.capra.handler.uml.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.capra.handler.uml.tests/META-INF/MANIFEST.MF
index 1a94ea3..92920b5 100644
--- a/tests/org.eclipse.capra.handler.uml.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.capra.handler.uml.tests/META-INF/MANIFEST.MF
@@ -8,10 +8,11 @@
 Require-Bundle: 
  org.eclipse.capra.core,
  org.eclipse.capra.generic.tracemodel,
+ org.eclipse.capra.generic.priority,
  org.eclipse.capra.handler.uml,
+ org.eclipse.capra.testsupport,
  org.eclipse.capra.ui,
  org.eclipse.capra.ui.plantuml,
- org.eclipse.capra.testsuite,
  org.eclipse.core.resources,
  org.eclipse.core.runtime,
  org.eclipse.ui,
diff --git a/tests/org.eclipse.capra.handler.uml.tests/src/org/eclipse/capra/handler/uml/tests/TestUMLInternalLinks.java b/tests/org.eclipse.capra.handler.uml.tests/src/org/eclipse/capra/handler/uml/tests/TestUMLInternalLinks.java
index e0d5392..881ab0a 100644
--- a/tests/org.eclipse.capra.handler.uml.tests/src/org/eclipse/capra/handler/uml/tests/TestUMLInternalLinks.java
+++ b/tests/org.eclipse.capra.handler.uml.tests/src/org/eclipse/capra/handler/uml/tests/TestUMLInternalLinks.java
@@ -10,8 +10,8 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.uml.tests;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -26,7 +26,7 @@
 import org.eclipse.capra.core.helpers.EditingDomainHelper;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
-import org.eclipse.capra.testsuite.TestHelper;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.capra.ui.plantuml.DiagramTextProviderHandler;
 import org.eclipse.capra.ui.plantuml.DisplayInternalLinksHandler;
 import org.eclipse.capra.ui.plantuml.ToggleTransitivityHandler;
diff --git a/tests/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF b/tests/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
index 84fd424..4b88cef 100644
--- a/tests/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
@@ -6,8 +6,7 @@
 Bundle-SymbolicName: org.eclipse.capra.testsuite;singleton:=true
 Bundle-Version: 0.8.2.qualifier
 Export-Package: org.eclipse.capra.testsuite,
- org.eclipse.capra.testsuite.extension;x-internal:=true,
- org.eclipse.capra.testsuite.notification;x-internal:=true
+ org.eclipse.capra.testsuite.notification
 Require-Bundle: org.junit,
  org.eclipse.equinox.registry,
  org.eclipse.core.resources,
@@ -32,6 +31,7 @@
  org.eclipse.capra.generic.tracemodel,
  org.eclipse.capra.generic.priority,
  org.eclipse.capra.core,
+ org.eclipse.capra.testsupport,
  org.eclipse.capra.ui.plantuml,
  org.eclipse.capra.handler.jdt,
  org.eclipse.capra.handler.cdt,
diff --git a/tests/org.eclipse.capra.testsuite/plugin.xml b/tests/org.eclipse.capra.testsuite/plugin.xml
index aeaf4a8..c8a6e82 100644
--- a/tests/org.eclipse.capra.testsuite/plugin.xml
+++ b/tests/org.eclipse.capra.testsuite/plugin.xml
@@ -18,7 +18,7 @@
    <extension
          point="org.eclipse.capra.ui.transfers">
       <transfer
-            class="org.eclipse.capra.testsuite.extension.UiTransferExtensionDummy">
+            class="org.eclipse.capra.testsupport.extension.UiTransferExtensionDummy">
       </transfer>
    </extension>
 
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTrace.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTrace.java
index fbcd655..49d800d 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTrace.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTrace.java
@@ -13,20 +13,20 @@
  *******************************************************************************/
 package org.eclipse.capra.testsuite;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createCDTProject;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
-import static org.eclipse.capra.testsuite.TestHelper.createJavaProjectWithASingleJavaClass;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.getProject;
-import static org.eclipse.capra.testsuite.TestHelper.load;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.save;
-import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createCDTProject;
+import static org.eclipse.capra.testsupport.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createEcoreModel;
+import static org.eclipse.capra.testsupport.TestHelper.createJavaProjectWithASingleJavaClass;
+import static org.eclipse.capra.testsupport.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsupport.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsupport.TestHelper.getProject;
+import static org.eclipse.capra.testsupport.TestHelper.load;
+import static org.eclipse.capra.testsupport.TestHelper.projectExists;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.save;
+import static org.eclipse.capra.testsupport.TestHelper.thereIsATraceBetween;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -34,6 +34,7 @@
 import java.io.IOException;
 
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.cdt.core.model.ICProject;
 import org.eclipse.cdt.managedbuilder.core.BuildException;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTraceOperation.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTraceOperation.java
index d08b0cf..f5f9ef3 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTraceOperation.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTraceOperation.java
@@ -13,16 +13,16 @@
  *******************************************************************************/
 package org.eclipse.capra.testsuite;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.getProject;
-import static org.eclipse.capra.testsuite.TestHelper.load;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.save;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createEcoreModel;
+import static org.eclipse.capra.testsupport.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsupport.TestHelper.getProject;
+import static org.eclipse.capra.testsupport.TestHelper.load;
+import static org.eclipse.capra.testsupport.TestHelper.projectExists;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.save;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -38,6 +38,7 @@
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
 import org.eclipse.capra.core.helpers.TraceHelper;
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.capra.ui.operations.CreateTraceOperation;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.core.commands.ExecutionException;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestDuplicateLinks.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestDuplicateLinks.java
index aa47e53..9a00bb9 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestDuplicateLinks.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestDuplicateLinks.java
@@ -13,17 +13,17 @@
  *******************************************************************************/
 package org.eclipse.capra.testsuite;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.getProject;
-import static org.eclipse.capra.testsuite.TestHelper.load;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.save;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createEcoreModel;
+import static org.eclipse.capra.testsupport.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsupport.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsupport.TestHelper.getProject;
+import static org.eclipse.capra.testsupport.TestHelper.load;
+import static org.eclipse.capra.testsupport.TestHelper.projectExists;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.save;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
@@ -42,6 +42,7 @@
 import org.eclipse.capra.generic.tracemodel.RelatedTo;
 import org.eclipse.capra.generic.tracemodel.TracemodelFactory;
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestEMFArtifactHelper.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestEMFArtifactHelper.java
index 51fb426..b54c0bd 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestEMFArtifactHelper.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestEMFArtifactHelper.java
@@ -1,17 +1,17 @@
 package org.eclipse.capra.testsuite;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createEmptyFileInProject;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.getProject;
-import static org.eclipse.capra.testsuite.TestHelper.load;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.save;
-import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createEmptyFileInProject;
+import static org.eclipse.capra.testsupport.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsupport.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsupport.TestHelper.getProject;
+import static org.eclipse.capra.testsupport.TestHelper.load;
+import static org.eclipse.capra.testsupport.TestHelper.projectExists;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.save;
+import static org.eclipse.capra.testsupport.TestHelper.thereIsATraceBetween;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
@@ -31,6 +31,7 @@
 import org.eclipse.capra.generic.tracemodel.RelatedTo;
 import org.eclipse.capra.generic.tracemodel.TracemodelFactory;
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java
index 2550a4f..0dcba99 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java
@@ -13,20 +13,20 @@
  *******************************************************************************/
 package org.eclipse.capra.testsuite;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createCDTProject;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
-import static org.eclipse.capra.testsuite.TestHelper.createJavaProjectWithASingleJavaClass;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.getProject;
-import static org.eclipse.capra.testsuite.TestHelper.load;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.save;
-import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createCDTProject;
+import static org.eclipse.capra.testsupport.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createEcoreModel;
+import static org.eclipse.capra.testsupport.TestHelper.createJavaProjectWithASingleJavaClass;
+import static org.eclipse.capra.testsupport.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsupport.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsupport.TestHelper.getProject;
+import static org.eclipse.capra.testsupport.TestHelper.load;
+import static org.eclipse.capra.testsupport.TestHelper.projectExists;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.save;
+import static org.eclipse.capra.testsupport.TestHelper.thereIsATraceBetween;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -40,6 +40,7 @@
 import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.capra.ui.plantuml.DiagramTextProviderHandler;
 import org.eclipse.capra.ui.plantuml.ToggleTransitivityHandler;
 import org.eclipse.capra.ui.views.SelectionView;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestHelper.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestHelper.java
deleted file mode 100644
index ae2bbe6..0000000
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestHelper.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v20.html
- *  
- * SPDX-License-Identifier: EPL-2.0
- *  
- * Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *      Chalmers | University of Gothenburg - additional features, updated API
- *******************************************************************************/
-package org.eclipse.capra.testsuite;
-
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
-import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
-import org.eclipse.capra.core.adapters.Connection;
-import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
-import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
-import org.eclipse.capra.core.helpers.ArtifactHelper;
-import org.eclipse.capra.core.helpers.EditingDomainHelper;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.capra.generic.artifactmodel.ArtifactWrapperContainer;
-import org.eclipse.capra.generic.tracemodel.GenericTraceModel;
-import org.eclipse.capra.ui.operations.CreateTraceOperation;
-import org.eclipse.capra.ui.plantuml.ToggleTransitivityHandler;
-import org.eclipse.capra.ui.views.SelectionView;
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.CProjectNature;
-import org.eclipse.cdt.core.model.CoreModel;
-import org.eclipse.cdt.core.model.ICProject;
-import org.eclipse.cdt.core.model.ISourceRoot;
-import org.eclipse.cdt.core.model.ITranslationUnit;
-import org.eclipse.cdt.core.settings.model.ICProjectDescription;
-import org.eclipse.cdt.managedbuilder.core.BuildException;
-import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
-import org.eclipse.cdt.managedbuilder.internal.core.Configuration;
-import org.eclipse.cdt.managedbuilder.internal.core.ManagedProject;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EcoreFactory;
-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.transaction.RecordingCommand;
-import org.eclipse.emf.transaction.RollbackException;
-import org.eclipse.emf.transaction.TransactionalCommandStack;
-import org.eclipse.emf.transaction.TransactionalEditingDomain;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * A helper class for writing JUnit tests for the Capra tool.
- */
-@SuppressWarnings("restriction")
-public class TestHelper {
-
-	/**
-	 * The package in which new Java classes will be created.
-	 */
-	private static final String JAVA_PACKAGE_NAME = "org.eclipse.capra.test";
-
-	/**
-	 * A standard waiting time that can be used whenever the IDE needs to
-	 * asynchronously complete a task that the test should wait for, e.g., create or
-	 * delete a resource, generate a marker, etc.
-	 */
-	public static final int UI_REACTION_WAITING_TIME = 1000;
-
-	private TestHelper() {
-		// Deliberately do nothing
-	}
-
-	/**
-	 * ID of Capra custom marker for reporting a generic problem.
-	 */
-	public static final String CAPRA_PROBLEM_MARKER_ID = "org.eclipse.capra.ui.notification.capraProblemMarker";
-
-	/**
-	 * Creates an empty project
-	 *
-	 * @param projectName the name of the project
-	 * @throws CoreException
-	 */
-	public static IProject createSimpleProject(String projectName) throws CoreException {
-		IProject project = getProject(projectName);
-
-		// Create project
-		IProgressMonitor progressMonitor = new NullProgressMonitor();
-		project.create(progressMonitor);
-		project.open(progressMonitor);
-		return project;
-	}
-
-	/**
-	 * Creates a Java project and a Java class declaration inside it.
-	 *
-	 * @param projectName the name of the project
-	 * @return the created Java class
-	 * @throws CoreException
-	 */
-	public static IType createJavaProjectWithASingleJavaClass(String projectName) throws CoreException {
-		IProject project = createSimpleProject(projectName);
-		IJavaProject javaProject = createJavaProject(project);
-		IFolder sourceFolder = createSourceFolder(project);
-		return createJavaClassInFolder(javaProject, sourceFolder, "TestClass");
-	}
-
-	/**
-	 * Creates a &quot;src&quot; folder inside the given project.
-	 * 
-	 * @param project the project for which to create a &quot;src&quot;
-	 * @return the created folder
-	 * @throws CoreException
-	 */
-	protected static IFolder createSourceFolder(IProject project) throws CoreException {
-		// Create a src file
-		IFolder sourceFolder = project.getFolder("src");
-		sourceFolder.create(false, true, null);
-		return sourceFolder;
-	}
-
-	/**
-	 * Turns the given project into a {@link IJavaProject} instance by adding the
-	 * Java nature and creating and setting the build path.
-	 * 
-	 * @param project the project to turn into a {@code IJavaProject}
-	 * @return the newly created Java project
-	 * @throws CoreException
-	 * @throws JavaModelException
-	 */
-	protected static IJavaProject createJavaProject(IProject project) throws CoreException, JavaModelException {
-		// Add Java nature
-		IProjectDescription description = project.getDescription();
-		description.setNatureIds(new String[] { JavaCore.NATURE_ID });
-		project.setDescription(description, null);
-
-		// Create as Java project and set up build path etc.
-		IJavaProject javaProject = JavaCore.create(project);
-		IFolder binFolder = project.getFolder("bin");
-		binFolder.create(false, true, null);
-		javaProject.setOutputLocation(binFolder.getFullPath(), null);
-		List<IClasspathEntry> entries = new ArrayList<IClasspathEntry>();
-
-		javaProject.setRawClasspath(entries.toArray(new IClasspathEntry[entries.size()]), null);
-		return javaProject;
-	}
-
-	/**
-	 * Creates a java class with the specified name in the provided folder of the
-	 * provided project. The new class will be created in a package specified by
-	 * (@code JAVA_PACKAGE_NAME}.
-	 * 
-	 * @param javaProject  the project in which to create the class
-	 * @param sourceFolder the folder in which to create the class
-	 * @return the newly created class
-	 * @throws JavaModelException
-	 */
-	protected static IType createJavaClassInFolder(IJavaProject javaProject, IFolder sourceFolder, String className)
-			throws JavaModelException {
-		IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(sourceFolder);
-		Set<IClasspathEntry> classPathEntries = new HashSet<>(Arrays.asList(javaProject.getRawClasspath()));
-		classPathEntries.add(JavaCore.newSourceEntry(root.getPath()));
-		IClasspathEntry[] classPathEntryArray = new IClasspathEntry[classPathEntries.size()];
-		classPathEntries.toArray(classPathEntryArray);
-		javaProject.setRawClasspath(classPathEntryArray, null);
-
-		IPackageFragment pack = javaProject.getPackageFragmentRoot(sourceFolder)
-				.createPackageFragment(JAVA_PACKAGE_NAME, false, null);
-
-		StringBuffer buffer = new StringBuffer();
-		buffer.append("package " + pack.getElementName() + ";\n");
-		buffer.append("\n");
-		buffer.append("public class " + className + " { public void doNothing(){ } }");
-
-		ICompilationUnit icu = pack.createCompilationUnit(className + ".java", buffer.toString(), false, null);
-		return icu.getType(className);
-	}
-
-	/**
-	 * Clears the active workspace by deleting all the contents.
-	 *
-	 * @throws CoreException
-	 */
-	public static void clearWorkspace() throws CoreException {
-		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-		for (IProject p : root.getProjects()) {
-			p.delete(true, new NullProgressMonitor());
-		}
-	}
-
-	/**
-	 * Checks if the project with the provided name exists.
-	 *
-	 * @param projectName the name of the project
-	 * @return true if the project exists in the active workspace, false otherwise
-	 */
-	public static boolean projectExists(String projectName) {
-		return getProject(projectName).exists();
-	}
-
-	/**
-	 * Returns a handle to the project resource with the given name.
-	 *
-	 * @param projectName the name of the project
-	 * @return a handle to the project resource
-	 */
-	public static IProject getProject(String projectName) {
-		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-		return root.getProject(projectName);
-	}
-
-	/**
-	 * Creates an empty Ecore model.
-	 *
-	 * @param name the name of the model
-	 * @return
-	 */
-	public static EPackage createEcoreModel(String name) {
-		EPackage p = EcoreFactory.eINSTANCE.createEPackage();
-		p.setName(name);
-		return p;
-	}
-
-	/**
-	 * Creates an EClass entity in the provided model.
-	 *
-	 * @param p    an Ecore model
-	 * @param name the name of the created EClass entity
-	 */
-	public static void createEClassInEPackage(EPackage p, String name) {
-		EClass c = EcoreFactory.eINSTANCE.createEClass();
-		c.setName(name);
-		p.getEClassifiers().add(c);
-	}
-
-	/**
-	 * Nests a new EPackage inside the provided EPackage.
-	 *
-	 * @param p    a new EPackage
-	 * @param name the name of the created EPackage
-	 */
-	public static void createEPackageInEPackage(EPackage p, String name) {
-		EPackage pkg = EcoreFactory.eINSTANCE.createEPackage();
-		pkg.setName(name);
-		p.getESubpackages().add(pkg);
-	}
-
-	/**
-	 * Persists (saves) the provided Ecore model in the specified project.
-	 *
-	 * @param project a handle to the project in which the model is to be persisted
-	 * @param pack    the Ecore model to be persisted
-	 * @throws IOException
-	 */
-	public static void save(IProject project, EPackage pack) throws IOException {
-		ResourceSet rs = new ResourceSetImpl();
-		URI path = URI.createFileURI(project.getLocation().toString() + "/" + pack.getName() + ".ecore");
-		Resource r = rs.createResource(path);
-		r.getContents().add(pack);
-		r.save(null);
-	}
-
-	/**
-	 * Returns an Ecore model entity from the specified project.
-	 *
-	 * @param project the project containing the model
-	 * @param p       the name of the model
-	 * @param rs      the provided ResourceSet instance
-	 * @return an Ecore model entity
-	 * @throws IOException
-	 */
-	public static EPackage load(IProject project, String p, ResourceSet rs) throws IOException {
-		URI path = URI.createFileURI(project.getLocation().toString() + "/" + p);
-		return (EPackage) rs.getResource(path, true).getContents().get(0);
-	}
-
-	public static CreateTraceOperation prepareCreateTraceOperationForCurrentSelectionOfType(EClass traceType) {
-		CreateTraceOperation operation = new CreateTraceOperation("Create trace link",
-				Arrays.asList(SelectionView.getOpenedView().getSelection().get(0)), SelectionView.getOpenedView()
-						.getSelection().subList(1, SelectionView.getOpenedView().getSelection().size()));
-		operation.setChooseTraceType((traceTypes, selection) -> {
-			if (traceTypes.contains(traceType)) {
-				return Optional.of(traceType);
-			} else {
-				return Optional.empty();
-			}
-		});
-		return operation;
-	}
-
-	/**
-	 * Creates a trace between the objects that are in the Selection view.
-	 *
-	 * @param traceType the type of the trace that is to connect the objects
-	 */
-	public static void createTraceForCurrentSelectionOfType(EClass traceType) {
-		CreateTraceOperation operation = prepareCreateTraceOperationForCurrentSelectionOfType(traceType);
-		Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
-		operation.createTrace(shell);
-	}
-
-	/**
-	 * Checks if there is a trace between the provided {@link EObject} instances.
-	 *
-	 * @param firstObject  first {@code EObject}
-	 * @param secondObject second {@code EObject}
-	 * @return {@code true} if a trace exists between the two objects, {@code false}
-	 *         otherwise
-	 */
-	public static boolean thereIsATraceBetween(Object firstObject, Object secondObject) {
-		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-		TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
-		ResourceSet resourceSet = EditingDomainHelper.getResourceSet();
-		EObject traceModel = persistenceAdapter.getTraceModel(resourceSet);
-		ArtifactHelper artifactHelper = new ArtifactHelper(persistenceAdapter.getArtifactWrappers(resourceSet));
-		if (firstObject instanceof EObject && secondObject instanceof EObject) {
-			if (traceModel != null) {
-				return traceAdapter.isThereATraceBetween((EObject) firstObject, (EObject) secondObject, traceModel);
-			}
-		}
-		if (firstObject instanceof EObject && !(secondObject instanceof EObject)) {
-			EObject wrapper_b = artifactHelper.createWrapper(secondObject);
-			if (traceModel != null) {
-				return traceAdapter.isThereATraceBetween((EObject) firstObject, wrapper_b, traceModel);
-			}
-		}
-		if (!(firstObject instanceof EObject) && secondObject instanceof EObject) {
-			EObject wrapper_a = artifactHelper.createWrapper(firstObject);
-			if (traceModel != null) {
-				return traceAdapter.isThereATraceBetween(wrapper_a, (EObject) secondObject, traceModel);
-			}
-		}
-		if (!(firstObject instanceof EObject) && !(secondObject instanceof EObject)) {
-			EObject wrapper_a = artifactHelper.createWrapper(firstObject);
-			EObject wrapper_b = artifactHelper.createWrapper(secondObject);
-			if (traceModel != null) {
-				return traceAdapter.isThereATraceBetween(wrapper_a, wrapper_b, traceModel);
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * Gets the first trace between the two given objects that can be found in the
-	 * trace model. Returns {@code null} if no such trace exists.
-	 * 
-	 * @param origin the origin of the trace
-	 * @param target the target of the trace
-	 * @return a trace between {@code origin} and {@code target} or {@code null}
-	 */
-	public static EObject getTraceBetween(Object origin, Object target) {
-		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-		TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
-		ResourceSet resourceSet = EditingDomainHelper.getResourceSet();
-		EObject traceModel = persistenceAdapter.getTraceModel(resourceSet);
-		ArtifactHelper artifactHelper = new ArtifactHelper(persistenceAdapter.getArtifactWrappers(resourceSet));
-		List<Connection> connections = traceAdapter.getConnectedElements(artifactHelper.createWrapper(origin),
-				traceModel);
-		for (Connection conn : connections) {
-			if (conn.getTargets().contains(artifactHelper.createWrapper(target))) {
-				return conn.getTlink();
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Creates an empty C or C++ project.
-	 *
-	 * @param projectName the name of the project to be created
-	 * @return a handle to the created project
-	 * @throws CoreException
-	 * @throws BuildException
-	 */
-	public static ICProject createCDTProject(String projectName) throws CoreException, BuildException {
-		IProject project = getProject(projectName);
-		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		IProjectDescription description = workspace.newProjectDescription(projectName);
-		project = CCorePlugin.getDefault().createCDTProject(description, project, new NullProgressMonitor());
-
-		// Create build info and managed project
-		ICProjectDescription cProjectDescription = CoreModel.getDefault().createProjectDescription(project, false);
-		ManagedBuildManager.createBuildInfo(project);
-		Configuration config = new Configuration(new ManagedProject(cProjectDescription), null, "myId", "myName");
-		config.getEditableBuilder().setManagedBuildOn(false);
-		cProjectDescription.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID,
-				config.getConfigurationData());
-
-		CoreModel.getDefault().setProjectDescription(project, cProjectDescription);
-		CProjectNature.addCNature(project, new NullProgressMonitor());
-
-		return CoreModel.getDefault().create(project);
-	}
-
-	/**
-	 * Creates a C source file in the provided C project.
-	 *
-	 * @param fileName the name of the C source file to be created in the project
-	 * @param cProject the project in which the file is to be created
-	 * @return the created TranslationUnit
-	 * @throws CoreException
-	 */
-	public static ITranslationUnit createCSourceFileInProject(String fileName, ICProject cProject)
-			throws CoreException, InterruptedException {
-
-		StringBuffer buffer = new StringBuffer();
-		buffer.append("#include <stdio.h>\n");
-		buffer.append("\n");
-		buffer.append("int main() {\n");
-		buffer.append("\tprintf(\"Hello, World!\");\n");
-		buffer.append("\treturn 0;\n");
-		buffer.append("}\n");
-		IFile cSourceFile = cProject.getProject().getFile(fileName);
-
-		cSourceFile.create(new ByteArrayInputStream(buffer.toString().getBytes()), true, new NullProgressMonitor());
-
-		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
-		return ((ISourceRoot) (cProject.getChildren()[0])).getTranslationUnits()[0];
-	}
-
-	/**
-	 * Creates an empty file in the project with the provided name.
-	 *
-	 * @param fileName    the name of the created file
-	 * @param projectName the name of the project in which the file is to be created
-	 * @return a handle to the created file
-	 * @throws CoreException
-	 */
-	public static IFile createEmptyFileInProject(String fileName, String projectName) throws CoreException {
-		IProject project = getProject(projectName);
-		IFile f = project.getFile(fileName);
-		f.create(new ByteArrayInputStream("hello world!".getBytes()), true, new NullProgressMonitor());
-
-		return f;
-	}
-
-	/**
-	 * Resets the selection view by emptying it.
-	 */
-	public static void resetSelectionView() {
-		SelectionView.getOpenedView().clearSelection();
-		ToggleTransitivityHandler.setTraceViewTransitive(true);
-		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
-	}
-
-	/**
-	 * Removes all existing trace links and artifacts from the trace model and the
-	 * artifact model.
-	 */
-	public static void purgeModels() {
-		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-		ResourceSet resourceSet = EditingDomainHelper.getResourceSet();
-		GenericTraceModel traceModel = (GenericTraceModel) persistenceAdapter.getTraceModel(resourceSet);
-
-		// Purge traces
-		TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
-		traceAdapter.deleteTrace(traceAdapter.getAllTraceLinks(traceModel), traceModel);
-
-		// Purge artifacts
-		EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
-		ArtifactMetaModelAdapter artifactAdapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
-		List<EObject> allArtifacts = artifactAdapter.getAllArtifacts(artifactModel);
-		ArtifactWrapperContainer container = (ArtifactWrapperContainer) artifactModel;
-		TransactionalEditingDomain editingDomain = EditingDomainHelper.getEditingDomain();
-		// We're saving the trace model and the artifact model in the same transaction
-		Command cmd = new RecordingCommand(editingDomain, "Purge artifacts") {
-			@Override
-			protected void doExecute() {
-				container.getArtifacts().removeAll(allArtifacts);
-			}
-		};
-
-		try {
-			((TransactionalCommandStack) editingDomain.getCommandStack()).execute(cmd, null); // default options
-		} catch (RollbackException e) {
-			throw new IllegalStateException("Adding a trace link was rolled back.", e);
-		} catch (InterruptedException e) {
-			throw new IllegalStateException("Adding a trace link was interrupted.", e);
-		}
-	}
-}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestRetry.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestRetry.java
deleted file mode 100644
index 628c00d..0000000
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestRetry.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v20.html
- *  
- * SPDX-License-Identifier: EPL-2.0
- *  
- * Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *      Chalmers | University of Gothenburg - additional features, updated API
- *******************************************************************************/
-
-package org.eclipse.capra.testsuite;
-
-import org.junit.rules.TestRule;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A JUnit rule that allows the JUnit tests to re-run for a specified amount of
- * times in case of failure.
- *
- * @author Dusan Kalanj
- *
- */
-public class TestRetry implements TestRule {
-
-	private static final Logger LOG = LoggerFactory.getLogger(TestRetry.class);
-
-	
-	private int retryCount;
-
-	/**
-	 * A constructor that specifies the amount of times that a JUnit test is
-	 * re-run in case of failure.
-	 *
-	 * @param retryCount
-	 *            the amount of retries
-	 */
-	public TestRetry(int retryCount) {
-		this.retryCount = retryCount;
-	}
-
-	@Override
-	public Statement apply(Statement base, Description description) {
-		return modifyStatement(base, description);
-	}
-
-	private Statement modifyStatement(Statement base, Description description) {
-		return new Statement() {
-
-			@Override
-			public void evaluate() throws Throwable {
-				Throwable caughtThrowable = null;
-
-				for (int i = 0; i < retryCount; i++) {
-					try {
-						base.evaluate();
-						return;
-					} catch (Throwable t) {
-						caughtThrowable = t;
-						LOG.error("{}: run {} failed", description.getDisplayName(), (i + 1));
-					}
-				}
-				LOG.error("{}: giving up after {} failures", description.getDisplayName(), retryCount);
-				throw caughtThrowable;
-			}
-		};
-	}
-}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceHelper.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceHelper.java
index 3768c26..21abe8d 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceHelper.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceHelper.java
@@ -13,12 +13,12 @@
  *******************************************************************************/
 package org.eclipse.capra.testsuite;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createEmptyFileInProject;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createEmptyFileInProject;
+import static org.eclipse.capra.testsupport.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsupport.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.thereIsATraceBetween;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceabiltyMatrix.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceabiltyMatrix.java
index e5895ec..cb9d7cc 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceabiltyMatrix.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceabiltyMatrix.java
@@ -13,18 +13,18 @@
  *******************************************************************************/
 package org.eclipse.capra.testsuite;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.getProject;
-import static org.eclipse.capra.testsuite.TestHelper.load;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.save;
-import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createEcoreModel;
+import static org.eclipse.capra.testsupport.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsupport.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsupport.TestHelper.getProject;
+import static org.eclipse.capra.testsupport.TestHelper.load;
+import static org.eclipse.capra.testsupport.TestHelper.projectExists;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.save;
+import static org.eclipse.capra.testsupport.TestHelper.thereIsATraceBetween;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -37,6 +37,7 @@
 import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.capra.ui.plantuml.DiagramTextProviderHandler;
 import org.eclipse.capra.ui.plantuml.ToggleDisplayGraphHandler;
 import org.eclipse.capra.ui.plantuml.ToggleTransitivityHandler;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTransitiveElementsInternalAndConnected.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTransitiveElementsInternalAndConnected.java
index 47d115f..1255214 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTransitiveElementsInternalAndConnected.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTransitiveElementsInternalAndConnected.java
@@ -1,15 +1,15 @@
 package org.eclipse.capra.testsuite;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.getProject;
-import static org.eclipse.capra.testsuite.TestHelper.load;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.save;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createEcoreModel;
+import static org.eclipse.capra.testsupport.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsupport.TestHelper.getProject;
+import static org.eclipse.capra.testsupport.TestHelper.load;
+import static org.eclipse.capra.testsupport.TestHelper.projectExists;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.save;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
@@ -29,6 +29,7 @@
 import org.eclipse.capra.generic.tracemodel.GenericTraceModel;
 import org.eclipse.capra.generic.tracemodel.RelatedTo;
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java
index e682569..cb8ddeb 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java
@@ -18,7 +18,7 @@
 import java.util.stream.Collectors;
 
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.capra.testsuite.extension.UiTransferExtensionDummy;
+import org.eclipse.capra.testsupport.extension.UiTransferExtensionDummy;
 import org.eclipse.swt.dnd.Transfer;
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUnitCoreAdaptersConnection.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUnitCoreAdaptersConnection.java
index 18056fd..d5ed201 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUnitCoreAdaptersConnection.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUnitCoreAdaptersConnection.java
@@ -1,14 +1,14 @@
 package org.eclipse.capra.testsuite;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.getProject;
-import static org.eclipse.capra.testsuite.TestHelper.load;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.save;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsupport.TestHelper.getProject;
+import static org.eclipse.capra.testsupport.TestHelper.load;
+import static org.eclipse.capra.testsupport.TestHelper.projectExists;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.save;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertTrue;
@@ -21,6 +21,7 @@
 import org.eclipse.capra.core.adapters.Connection;
 import org.eclipse.capra.generic.tracemodel.RelatedTo;
 import org.eclipse.capra.generic.tracemodel.TracemodelFactory;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.emf.ecore.EClass;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUnwrapWrapper.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUnwrapWrapper.java
index d3e40c6..3b04ebe 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUnwrapWrapper.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUnwrapWrapper.java
@@ -13,16 +13,16 @@
  *******************************************************************************/
 package org.eclipse.capra.testsuite;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createCDTProject;
-import static org.eclipse.capra.testsuite.TestHelper.createCSourceFileInProject;
-import static org.eclipse.capra.testsuite.TestHelper.createJavaProjectWithASingleJavaClass;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createCDTProject;
+import static org.eclipse.capra.testsupport.TestHelper.createCSourceFileInProject;
+import static org.eclipse.capra.testsupport.TestHelper.createJavaProjectWithASingleJavaClass;
+import static org.eclipse.capra.testsupport.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsupport.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsupport.TestHelper.projectExists;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.thereIsATraceBetween;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -32,6 +32,7 @@
 import org.eclipse.capra.core.helpers.EditingDomainHelper;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.cdt.core.model.ICElement;
 import org.eclipse.cdt.core.model.ICProject;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TraceHelperCheckArtifactModelAndTraceElement.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TraceHelperCheckArtifactModelAndTraceElement.java
index 387ae77..63113ef 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TraceHelperCheckArtifactModelAndTraceElement.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TraceHelperCheckArtifactModelAndTraceElement.java
@@ -1,13 +1,13 @@
 package org.eclipse.capra.testsuite;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createEmptyFileInProject;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createEmptyFileInProject;
+import static org.eclipse.capra.testsupport.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsupport.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.thereIsATraceBetween;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
@@ -25,6 +25,7 @@
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
 import org.eclipse.capra.core.helpers.TraceHelper;
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.CoreException;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/extension/UiTransferExtensionDummy.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/extension/UiTransferExtensionDummy.java
deleted file mode 100644
index 84b08dc..0000000
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/extension/UiTransferExtensionDummy.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v20.html
- *  
- * SPDX-License-Identifier: EPL-2.0
- *  
- * Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *      Chalmers | University of Gothenburg - additional features, updated API
- *******************************************************************************/
-package org.eclipse.capra.testsuite.extension;
-
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.dnd.TransferData;
-
-public class UiTransferExtensionDummy extends Transfer {
-	
-	private static final String MIME_TYPE = "UiTransferExtensionDummy";
-	private static final int MIME_TYPE_ID = registerType(MIME_TYPE);
-
-	@Override
-	public TransferData[] getSupportedTypes() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	@Override
-	public boolean isSupportedType(TransferData transferData) {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	protected int[] getTypeIds() {
-		return new int[] { MIME_TYPE_ID };
-	}
-
-	@Override
-	protected String[] getTypeNames() {
-		return new String[] { MIME_TYPE };
-	}
-
-	@Override
-	protected void javaToNative(Object object, TransferData transferData) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	protected Object nativeToJava(TransferData transferData) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationCMethod.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationCMethod.java
index f30ade3..dd81f4b 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationCMethod.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationCMethod.java
@@ -14,17 +14,17 @@
 
 package org.eclipse.capra.testsuite.notification;
 
-import static org.eclipse.capra.testsuite.TestHelper.UI_REACTION_WAITING_TIME;
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createCDTProject;
-import static org.eclipse.capra.testsuite.TestHelper.createCSourceFileInProject;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.getProject;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.save;
-import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.eclipse.capra.testsupport.TestHelper.UI_REACTION_WAITING_TIME;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createCDTProject;
+import static org.eclipse.capra.testsupport.TestHelper.createCSourceFileInProject;
+import static org.eclipse.capra.testsupport.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsupport.TestHelper.getProject;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.save;
+import static org.eclipse.capra.testsupport.TestHelper.thereIsATraceBetween;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -33,8 +33,8 @@
 import java.util.concurrent.TimeUnit;
 
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
-import org.eclipse.capra.testsuite.TestHelper;
-import org.eclipse.capra.testsuite.TestRetry;
+import org.eclipse.capra.testsupport.TestHelper;
+import org.eclipse.capra.testsupport.TestRetry;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.cdt.core.model.ICProject;
 import org.eclipse.cdt.core.model.IFunction;
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationEObject.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationEObject.java
index 236c89e..1060168 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationEObject.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationEObject.java
@@ -14,18 +14,18 @@
 
 package org.eclipse.capra.testsuite.notification;
 
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createEPackageInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
-import static org.eclipse.capra.testsuite.TestHelper.createJavaProjectWithASingleJavaClass;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.getProject;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.save;
-import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createEPackageInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createEcoreModel;
+import static org.eclipse.capra.testsupport.TestHelper.createJavaProjectWithASingleJavaClass;
+import static org.eclipse.capra.testsupport.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsupport.TestHelper.getProject;
+import static org.eclipse.capra.testsupport.TestHelper.projectExists;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.save;
+import static org.eclipse.capra.testsupport.TestHelper.thereIsATraceBetween;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -35,8 +35,8 @@
 import java.util.concurrent.TimeUnit;
 
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
-import org.eclipse.capra.testsuite.TestHelper;
-import org.eclipse.capra.testsuite.TestRetry;
+import org.eclipse.capra.testsupport.TestHelper;
+import org.eclipse.capra.testsupport.TestRetry;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.core.filesystem.EFS;
 import org.eclipse.core.filesystem.IFileStore;
@@ -96,8 +96,8 @@
 	public TestRetry retry = new TestRetry(NUMBER_OF_RETRIES);
 
 	/**
-	 * Tests if a marker appears after deleting a model element that is
-	 * referenced in the trace model.
+	 * Tests if a marker appears after deleting a model element that is referenced
+	 * in the trace model.
 	 * 
 	 * @throws CoreException
 	 * @throws IOException
@@ -170,8 +170,8 @@
 	}
 
 	/**
-	 * Tests if a marker appears after renaming a model element that is
-	 * referenced in the trace model.
+	 * Tests if a marker appears after renaming a model element that is referenced
+	 * in the trace model.
 	 * 
 	 * @throws CoreException
 	 * @throws IOException
@@ -246,8 +246,8 @@
 	}
 
 	/**
-	 * Tests if a marker appears after moving a model element that is referenced
-	 * in the trace model.
+	 * Tests if a marker appears after moving a model element that is referenced in
+	 * the trace model.
 	 * 
 	 * @throws CoreException
 	 * @throws IOException
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationFile.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationFile.java
index 2246c10..b411f6b 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationFile.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationFile.java
@@ -14,15 +14,15 @@
 
 package org.eclipse.capra.testsuite.notification;
 
-import static org.eclipse.capra.testsuite.TestHelper.UI_REACTION_WAITING_TIME;
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createEmptyFileInProject;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.eclipse.capra.testsupport.TestHelper.UI_REACTION_WAITING_TIME;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createEmptyFileInProject;
+import static org.eclipse.capra.testsupport.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsupport.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsupport.TestHelper.projectExists;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.thereIsATraceBetween;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -32,7 +32,7 @@
 import java.util.concurrent.TimeUnit;
 
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
-import org.eclipse.capra.testsuite.TestHelper;
+import org.eclipse.capra.testsupport.TestHelper;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
@@ -138,8 +138,8 @@
 	}
 
 	/**
-	 * Tests if a marker appears after moving a file that is referenced in the
-	 * trace model.
+	 * Tests if a marker appears after moving a file that is referenced in the trace
+	 * model.
 	 * 
 	 * @throws CoreException
 	 * @throws IOException
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationJavaMethod.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationJavaMethod.java
index 0fc0553..e3a8cfd 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationJavaMethod.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationJavaMethod.java
@@ -14,17 +14,17 @@
 
 package org.eclipse.capra.testsuite.notification;
 
-import static org.eclipse.capra.testsuite.TestHelper.UI_REACTION_WAITING_TIME;
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createJavaProjectWithASingleJavaClass;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.getProject;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.purgeModels;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.save;
-import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.eclipse.capra.testsupport.TestHelper.UI_REACTION_WAITING_TIME;
+import static org.eclipse.capra.testsupport.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsupport.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsupport.TestHelper.createJavaProjectWithASingleJavaClass;
+import static org.eclipse.capra.testsupport.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsupport.TestHelper.getProject;
+import static org.eclipse.capra.testsupport.TestHelper.projectExists;
+import static org.eclipse.capra.testsupport.TestHelper.purgeModels;
+import static org.eclipse.capra.testsupport.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsupport.TestHelper.save;
+import static org.eclipse.capra.testsupport.TestHelper.thereIsATraceBetween;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -35,8 +35,8 @@
 import java.util.concurrent.TimeUnit;
 
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
-import org.eclipse.capra.testsuite.TestHelper;
-import org.eclipse.capra.testsuite.TestRetry;
+import org.eclipse.capra.testsupport.TestHelper;
+import org.eclipse.capra.testsupport.TestRetry;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
@@ -82,8 +82,8 @@
 	public TestRetry retry = new TestRetry(NUMBER_OF_RETRIES);
 
 	/**
-	 * Tests if a marker appears after deleting a Java method that is referenced
-	 * in the trace model.
+	 * Tests if a marker appears after deleting a Java method that is referenced in
+	 * the trace model.
 	 * 
 	 * @throws CoreException
 	 * @throws IOException
@@ -141,8 +141,8 @@
 	}
 
 	/**
-	 * Tests if a marker appears after renaming a Java method that is referenced
-	 * in the trace model.
+	 * Tests if a marker appears after renaming a Java method that is referenced in
+	 * the trace model.
 	 * 
 	 * @throws CoreException
 	 * @throws IOException
@@ -197,8 +197,8 @@
 	}
 
 	/**
-	 * Tests if a marker appears after editing a Java method that is referenced
-	 * in the trace model.
+	 * Tests if a marker appears after editing a Java method that is referenced in
+	 * the trace model.
 	 * 
 	 * @throws CoreException
 	 * @throws IOException
diff --git a/tests/org.eclipse.capra.testsupport/META-INF/MANIFEST.MF b/tests/org.eclipse.capra.testsupport/META-INF/MANIFEST.MF
index 018ef44..a93134c 100644
--- a/tests/org.eclipse.capra.testsupport/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.capra.testsupport/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@
 Bundle-SymbolicName: org.eclipse.capra.testsupport;singleton:=true
 Bundle-Version: 0.8.2.qualifier
 Export-Package: org.eclipse.capra.testsupport,
- org.eclipse.capra.testsupport.extension;x-internal:=true
+ org.eclipse.capra.testsupport.extension
 Require-Bundle: org.junit,
  org.eclipse.equinox.registry,
  org.eclipse.core.resources,
diff --git a/tests/org.eclipse.capra.testsupport/src/org/eclipse/capra/testsupport/TestHelper.java b/tests/org.eclipse.capra.testsupport/src/org/eclipse/capra/testsupport/TestHelper.java
index f967805..17cf767 100644
--- a/tests/org.eclipse.capra.testsupport/src/org/eclipse/capra/testsupport/TestHelper.java
+++ b/tests/org.eclipse.capra.testsupport/src/org/eclipse/capra/testsupport/TestHelper.java
@@ -19,11 +19,14 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.Connection;
 import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
 import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
 import org.eclipse.capra.core.helpers.ArtifactHelper;
@@ -74,6 +77,7 @@
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.PlatformUI;
 
@@ -84,6 +88,11 @@
 public class TestHelper {
 
 	/**
+	 * The package in which new Java classes will be created.
+	 */
+	private static final String JAVA_PACKAGE_NAME = "org.eclipse.capra.test";
+
+	/**
 	 * A standard waiting time that can be used whenever the IDE needs to
 	 * asynchronously complete a task that the test should wait for, e.g., create or
 	 * delete a resource, generate a marker, etc.
@@ -108,6 +117,7 @@
 	public static IProject createSimpleProject(String projectName) throws CoreException {
 		IProject project = getProject(projectName);
 
+		// Create project
 		IProgressMonitor progressMonitor = new NullProgressMonitor();
 		project.create(progressMonitor);
 		project.open(progressMonitor);
@@ -122,13 +132,36 @@
 	 * @throws CoreException
 	 */
 	public static IType createJavaProjectWithASingleJavaClass(String projectName) throws CoreException {
-		IProject project = getProject(projectName);
+		IProject project = createSimpleProject(projectName);
+		IJavaProject javaProject = createJavaProject(project);
+		IFolder sourceFolder = createSourceFolder(project);
+		return createJavaClassInFolder(javaProject, sourceFolder, "TestClass");
+	}
 
-		// Create project
-		IProgressMonitor progressMonitor = new NullProgressMonitor();
-		project.create(progressMonitor);
-		project.open(progressMonitor);
+	/**
+	 * Creates a &quot;src&quot; folder inside the given project.
+	 * 
+	 * @param project the project for which to create a &quot;src&quot;
+	 * @return the created folder
+	 * @throws CoreException
+	 */
+	public static IFolder createSourceFolder(IProject project) throws CoreException {
+		// Create a src file
+		IFolder sourceFolder = project.getFolder("src");
+		sourceFolder.create(false, true, null);
+		return sourceFolder;
+	}
 
+	/**
+	 * Turns the given project into a {@link IJavaProject} instance by adding the
+	 * Java nature and creating and setting the build path.
+	 * 
+	 * @param project the project to turn into a {@code IJavaProject}
+	 * @return the newly created Java project
+	 * @throws CoreException
+	 * @throws JavaModelException
+	 */
+	public static IJavaProject createJavaProject(IProject project) throws CoreException, JavaModelException {
 		// Add Java nature
 		IProjectDescription description = project.getDescription();
 		description.setNatureIds(new String[] { JavaCore.NATURE_ID });
@@ -142,27 +175,38 @@
 		List<IClasspathEntry> entries = new ArrayList<IClasspathEntry>();
 
 		javaProject.setRawClasspath(entries.toArray(new IClasspathEntry[entries.size()]), null);
+		return javaProject;
+	}
 
-		// Create a src file
-		IFolder sourceFolder = project.getFolder("src");
-		sourceFolder.create(false, true, null);
+	/**
+	 * Creates a java class with the specified name in the provided folder of the
+	 * provided project. The new class will be created in a package specified by
+	 * (@code JAVA_PACKAGE_NAME}.
+	 * 
+	 * @param javaProject  the project in which to create the class
+	 * @param sourceFolder the folder in which to create the class
+	 * @return the newly created class
+	 * @throws JavaModelException
+	 */
+	public static IType createJavaClassInFolder(IJavaProject javaProject, IFolder sourceFolder, String className)
+			throws JavaModelException {
 		IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(sourceFolder);
-		IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
-		IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
-		System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
-		newEntries[oldEntries.length] = JavaCore.newSourceEntry(root.getPath());
-		javaProject.setRawClasspath(newEntries, null);
+		Set<IClasspathEntry> classPathEntries = new HashSet<>(Arrays.asList(javaProject.getRawClasspath()));
+		classPathEntries.add(JavaCore.newSourceEntry(root.getPath()));
+		IClasspathEntry[] classPathEntryArray = new IClasspathEntry[classPathEntries.size()];
+		classPathEntries.toArray(classPathEntryArray);
+		javaProject.setRawClasspath(classPathEntryArray, null);
 
 		IPackageFragment pack = javaProject.getPackageFragmentRoot(sourceFolder)
-				.createPackageFragment("org.eclipse.capra.test", false, null);
+				.createPackageFragment(JAVA_PACKAGE_NAME, false, null);
 
 		StringBuffer buffer = new StringBuffer();
 		buffer.append("package " + pack.getElementName() + ";\n");
 		buffer.append("\n");
-		buffer.append("public class TestClass { public void doNothing(){ } }");
+		buffer.append("public class " + className + " { public void doNothing(){ } }");
 
-		ICompilationUnit icu = pack.createCompilationUnit("TestClass.java", buffer.toString(), false, null);
-		return icu.getType("TestClass");
+		ICompilationUnit icu = pack.createCompilationUnit(className + ".java", buffer.toString(), false, null);
+		return icu.getType(className);
 	}
 
 	/**
@@ -330,6 +374,30 @@
 	}
 
 	/**
+	 * Gets the first trace between the two given objects that can be found in the
+	 * trace model. Returns {@code null} if no such trace exists.
+	 * 
+	 * @param origin the origin of the trace
+	 * @param target the target of the trace
+	 * @return a trace between {@code origin} and {@code target} or {@code null}
+	 */
+	public static EObject getTraceBetween(Object origin, Object target) {
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+		ResourceSet resourceSet = EditingDomainHelper.getResourceSet();
+		EObject traceModel = persistenceAdapter.getTraceModel(resourceSet);
+		ArtifactHelper artifactHelper = new ArtifactHelper(persistenceAdapter.getArtifactWrappers(resourceSet));
+		List<Connection> connections = traceAdapter.getConnectedElements(artifactHelper.createWrapper(origin),
+				traceModel);
+		for (Connection conn : connections) {
+			if (conn.getTargets().contains(artifactHelper.createWrapper(target))) {
+				return conn.getTlink();
+			}
+		}
+		return null;
+	}
+
+	/**
 	 * Creates an empty C or C++ project.
 	 *
 	 * @param projectName the name of the project to be created