Navigation Menu

Skip to content

Commit

Permalink
Run eclipse tests in a deterministic order, separate test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
Thomas Degueule committed Sep 19, 2015
1 parent 1fdfe29 commit 777f6a3
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 8 deletions.
Expand Up @@ -18,7 +18,9 @@ Require-Bundle: fr.inria.diverse.melange.ui,
fr.inria.diverse.melange.tools.xtext.testing;bundle-version="0.1.0",
org.eclipse.e4.ui.workbench;bundle-version="1.2.2",
org.eclipse.core.expressions;bundle-version="3.4.600",
org.eclipse.jdt.ui;bundle-version="3.10.2"
org.eclipse.jdt.ui;bundle-version="3.10.2",
org.junit;bundle-version="4.11.0",
org.eclipse.emf.compare;bundle-version="3.2.0"
Import-Package: org.hamcrest.core,
org.junit;version="4.5.0",
org.junit.runner;version="4.5.0"
Expand Down
Expand Up @@ -8,35 +8,70 @@ import org.eclipse.xtext.junit4.AbstractXtextTests
import org.eclipse.xtext.junit4.InjectWith
import org.eclipse.xtext.junit4.XtextRunner
import org.eclipse.xtext.junit4.ui.util.IResourcesSetupUtil
import org.junit.After
import org.junit.Before
import org.junit.FixMethodOrder
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters

@RunWith(XtextRunner)
@InjectWith(MelangeUiInjectorProvider)
@FixMethodOrder(MethodSorters::NAME_ASCENDING)
public class SimpleFsmProject extends AbstractXtextTests
{
IProject melangeFsm
@Inject WorkspaceTestHelper helper
static final String PROJECT_NAME = "SimpleFsmProject"
static final String MELANGE_FILE =
"SimpleFsmProject/src/simplefsm/SimpleFsm.melange"

@Before
override setUp() {
super.setUp
helper.init
IResourcesSetupUtil::cleanWorkspace
melangeFsm = helper.deployMelangeProject("SimpleFsmProject",
"tests-inputs/SimpleFsmProject.zip")
IResourcesSetupUtil::reallyWaitForAutoBuild
// We don't want to regenerate everything for each test
if (!helper.projectExists(PROJECT_NAME)) {
super.setUp
helper.init
IResourcesSetupUtil::cleanWorkspace
melangeFsm = helper.deployMelangeProject(PROJECT_NAME,
"tests-inputs/SimpleFsmProject.zip")
IResourcesSetupUtil::reallyWaitForAutoBuild
helper.openEditor(MELANGE_FILE)
} else {
melangeFsm = helper.getProject(PROJECT_NAME)
}
}

@After
override tearDown() {
// Nope
}

@Test
def void testNoErrorsInWorkspace() {
def void test0NoErrorsInWorkspace() {
helper.assertNoMarkers
}

@Test
def void test1GeneratedModelTypes() {
helper.generateInterfaces(MELANGE_FILE)
helper.assertNoMarkers

val fsmMT = helper.getMT(melangeFsm, "FsmMT")
val tfsmMT = helper.getMT(melangeFsm, "TimedFsmMT")

helper.assertMatch(fsmMT, "tests-inputs/modelTypes/FsmMT.ecore")
helper.assertMatch(tfsmMT, "tests-inputs/modelTypes/TimedFsmMT.ecore")
}

@Test
def void test2GeneratedAdaptersCompile() {
helper.generateAdapters(MELANGE_FILE)
helper.assertNoMarkers
}

@Test
def void test3TransfoProducesExpectedOutput() {
val expected = '''
State 1
Transition a
Expand Down
Expand Up @@ -16,6 +16,17 @@ import org.eclipse.core.runtime.jobs.Job
import org.eclipse.debug.core.DebugPlugin
import org.eclipse.debug.core.ILaunchManager
import org.eclipse.debug.ui.IDebugUIConstants
import org.eclipse.emf.common.util.URI
import org.eclipse.emf.compare.EMFCompare
import org.eclipse.emf.compare.Match
import org.eclipse.emf.compare.diff.DefaultDiffEngine
import org.eclipse.emf.compare.diff.FeatureFilter
import org.eclipse.emf.compare.scope.DefaultComparisonScope
import org.eclipse.emf.ecore.EPackage
import org.eclipse.emf.ecore.EReference
import org.eclipse.emf.ecore.EStructuralFeature
import org.eclipse.emf.ecore.EcorePackage
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
import org.eclipse.jdt.core.JavaCore
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants
import org.eclipse.jdt.ui.JavaUI
Expand Down Expand Up @@ -50,6 +61,14 @@ class WorkspaceTestHelper {
closeWelcomePage
}

def IProject getProject(String projectName) {
return ResourcesPlugin::workspace.root.getProject(projectName)
}

def boolean projectExists(String projectName) {
return getProject(projectName).exists
}

def IProject deployMelangeProject(String projectName, String zipLocation) {
val newProject = JavaProjectSetupUtil::createJavaProject(projectName)
JavaProjectSetupUtil::addSourceFolder(newProject, "src")
Expand Down Expand Up @@ -228,4 +247,47 @@ class WorkspaceTestHelper {

return CharStreams::toString(CharStreams::newReaderSupplier([outputFile.contents], Charsets::UTF_8))
}

/**
* Returns the EPackage for generated model type {@link mtName}
* in {@link project}
*/
def EPackage getMT(IProject project, String mtName) {
val rs = new ResourceSetImpl
val res = rs.getResource(URI::createURI('''platform:/resource/«project.name»/model-gen/«mtName».ecore'''), true)

return res.contents.head as EPackage
}

def void assertMatch(EPackage pkg, String refEcore) {
val rs = new ResourceSetImpl
val uri = URI::createURI(refEcore)
val res = rs.getResource(uri, true)
val ref = res.contents.head as EPackage

val scope = new DefaultComparisonScope(pkg, ref, null)
// We don't want to take order into account
// We don't want to take eAnnotations (especially "aspect") into account
val comparison = EMFCompare.builder().setDiffEngine(
new DefaultDiffEngine() {
override def FeatureFilter createFeatureFilter() {
return new FeatureFilter() {
override boolean isIgnoredReference(Match match, EReference ref) {
return ref == EcorePackage.Literals.EMODEL_ELEMENT__EANNOTATIONS
|| super.isIgnoredReference(match, ref)
}

override boolean checkForOrderingChanges(EStructuralFeature f) {
return false
}
}
}
}
).build.compare(scope)

if (!comparison.differences.empty)
Assert::fail(comparison.differences.join(", "))

Assert::assertTrue(comparison.differences.empty)
}
}

0 comments on commit 777f6a3

Please sign in to comment.