Patch for Henshin Test Framework by Daniel StrĂ¼ber
Change-Id: Ie6ff8799f29ec5a71889963f80abd90f6c685938
Signed-off-by: cbodenbender <Christian_bodenbender@gmx.de>
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinLoaders.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinLoaders.java
index cd445c4..a70053a 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinLoaders.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinLoaders.java
@@ -1,75 +1,91 @@
-/**
- * <copyright>
- * Copyright (c) 2010-2014 Henshin developers. All rights reserved.
- * This program and the accompanying materials are made available
- * under the terms of the Eclipse Public License v1.0 which
- * accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * </copyright>
- */
-package org.eclipse.emf.henshin.tests.framework;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
-import org.eclipse.emf.henshin.interpreter.EGraph;
-import org.eclipse.emf.henshin.interpreter.InterpreterFactory;
-import org.eclipse.emf.henshin.interpreter.impl.EGraphImpl;
-import org.eclipse.emf.henshin.model.Module;
-import org.eclipse.emf.henshin.model.resource.HenshinResourceSet;
-
-/**
- * Methods for loading test Henshin files, models and graphs.
- *
- * @see Tools
- * @author Felix Rieger
- * @author Stefan Jurack
- *
- */
-public class HenshinLoaders {
-
- /**
- * Load a Henshin file.
- *
- * @param fileName Path to the Henshin file
- * @return Module Loaded module
- */
- public static Module loadHenshin(String fileName) {
- HenshinResourceSet resourceSet = new HenshinResourceSet();
- return resourceSet.getModule(fileName, false);
- }
-
- /**
- * Load model from file and create an {@link EGraph}.
- *
- * @param modelFileName Path to the model file
- * @param modelFileExt model file extension
- * @return EmfGraph
- */
- public static EGraph loadGraph(String modelFileName, String modelFileExt) {
- HenshinResourceSet resourceSet = new HenshinResourceSet();
- resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("testmodel",
- new XMIResourceFactoryImpl());
- resourceSet.registerXMIResourceFactories(modelFileExt);
- Resource resource = resourceSet.getResource(modelFileName);
- return new EGraphImpl(resource);
- }
-
- /**
- * Load a graph.
- *
- * @param graphUri URI to the model file
- * @return The loaded file
- */
- public static EGraph loadGraph(URI graphUri) {
- ResourceSetImpl resourceSet = new ResourceSetImpl();
- resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("testmodel",
- new XMIResourceFactoryImpl());
- Resource resource = resourceSet.getResource(graphUri, true);
- EGraph graph = InterpreterFactory.INSTANCE.createEGraph();
- graph.addTree(resource.getContents().get(0));
- return graph;
- }
-
-}
+/**
+ * <copyright>
+ * Copyright (c) 2010-2014 Henshin developers. All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * </copyright>
+ */
+package org.eclipse.emf.henshin.tests.framework;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.emf.henshin.interpreter.EGraph;
+import org.eclipse.emf.henshin.interpreter.InterpreterFactory;
+import org.eclipse.emf.henshin.interpreter.impl.EGraphImpl;
+import org.eclipse.emf.henshin.model.Module;
+import org.eclipse.emf.henshin.model.resource.HenshinResourceSet;
+
+/**
+ * Methods for loading test Henshin files, models and graphs.
+ *
+ * @see Tools
+ * @author Felix Rieger
+ * @author Stefan Jurack
+ *
+ */
+public class HenshinLoaders {
+
+ /**
+ * Load a Henshin file.
+ *
+ * @param fileName Path to the Henshin file
+ * @return Module Loaded module
+ */
+ public static Module loadHenshin(String fileName) {
+ HenshinResourceSet resourceSet = new HenshinResourceSet();
+ return resourceSet.getModule(fileName, false);
+ }
+
+ /**
+ * Load a Henshin file.
+ *
+ * @param fileName Path to the Henshin file
+ * @return Module Loaded module
+ */
+ public static Module loadHenshin(String fileName, HenshinResourceSet resourceSet) {
+ return resourceSet.getModule(fileName, false);
+ }
+
+ /**
+ * Load model from file and create an {@link EGraph}.
+ *
+ * @param modelFileName Path to the model file
+ * @param modelFileExt model file extension
+ * @return EmfGraph
+ */
+ public static EGraph loadGraph(String modelFileName, String modelFileExt) {
+ HenshinResourceSet resourceSet = new HenshinResourceSet();
+ resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("testmodel",
+ new XMIResourceFactoryImpl());
+ resourceSet.registerXMIResourceFactories(modelFileExt);
+ Resource resource = resourceSet.getResource(modelFileName);
+ return new EGraphImpl(resource);
+ }
+
+ /**
+ * Load a graph.
+ *
+ * @param graphUri URI to the model file
+ * @return The loaded file
+ */
+ public static EGraph loadGraph(URI graphUri) {
+ return loadGraph(graphUri, new HenshinResourceSet());
+ }
+
+ /**
+ * Load a graph.
+ *
+ * @param graphUri URI to the model file
+ * @return The loaded file
+ */
+ public static EGraph loadGraph(URI graphUri, HenshinResourceSet resourceSet) {
+ Resource resource = resourceSet.getResource(graphUri, true);
+ EGraph graph = InterpreterFactory.INSTANCE.createEGraph();
+ graph.addTree(resource.getContents().get(0));
+ return graph;
+ }
+}
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinTest.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinTest.java
index e473190..f73f2ba 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinTest.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/HenshinTest.java
@@ -17,6 +17,8 @@
import java.util.Map.Entry;
import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.emf.henshin.interpreter.EGraph;
import org.eclipse.emf.henshin.interpreter.Engine;
import org.eclipse.emf.henshin.interpreter.InterpreterFactory;
@@ -26,6 +28,8 @@
import org.eclipse.emf.henshin.model.Rule;
import org.eclipse.emf.henshin.model.Unit;
import org.eclipse.emf.henshin.model.resource.HenshinResource;
+import org.eclipse.emf.henshin.model.resource.HenshinResourceSet;
+import org.eclipse.emf.henshin.tests.testmodel.TestmodelFactory;
import org.junit.After;
/**
@@ -48,6 +52,11 @@
public class HenshinTest {
/**
+ * Resource set which has been automatically created for you to use.
+ */
+ protected HenshinResourceSet resourceSet;
+
+ /**
* Module which has been automatically loaded and set-up for you to use.
*/
protected Module htModule;
@@ -111,10 +120,20 @@
* @param henshinFile Henshin file to be loaded.
*/
protected void init(String henshinFile) {
- htModule = (Module) HenshinLoaders.loadHenshin(henshinFile);
+ if (resourceSet == null)
+ resourceSet = new HenshinResourceSet();
+ htModule = (Module) HenshinLoaders.loadHenshin(henshinFile, resourceSet);
htEngine = InterpreterFactory.INSTANCE.createEngine();
}
+
+
+ protected void initFactory(String extension, XMIResourceFactoryImpl xmiResourceFactoryImpl) {
+ if (resourceSet == null)
+ resourceSet = new HenshinResourceSet();
+ resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(extension, xmiResourceFactoryImpl);
+ }
+
/**
* Initialize the tests. Loads a module, a model graph and creates an engine.
*
@@ -268,7 +287,7 @@
protected void loadEGraph(String graphName) {
URI graphURI = URI.createFileURI(new File(graphBasePath + graphName + "." + graphFileExtension)
.getAbsolutePath());
- loadEGraph(HenshinLoaders.loadGraph(graphURI));
+ loadEGraph(HenshinLoaders.loadGraph(graphURI, resourceSet));
}
/**
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/Matches.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/Matches.java
index 5fa492e..f4de886 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/Matches.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/framework/Matches.java
@@ -9,8 +9,10 @@
*/
package org.eclipse.emf.henshin.tests.framework;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.List;
import java.util.Map.Entry;
import org.eclipse.emf.ecore.EObject;
@@ -19,7 +21,9 @@
import org.eclipse.emf.henshin.interpreter.Match;
import org.eclipse.emf.henshin.interpreter.RuleApplication;
import org.eclipse.emf.henshin.interpreter.UnitApplication;
+import org.eclipse.emf.henshin.interpreter.util.InterpreterUtil;
import org.eclipse.emf.henshin.model.Rule;
+import org.junit.internal.runners.statements.Fail;
/**
* Assertions for everything related to matches, e.g. matches produced by {@link RuleApplication}s,
@@ -345,5 +349,30 @@
}
}
}
+
+ public static void assertOverlappingMultiMatchesRemoved(Rule rule, EGraph graph, Match partialMatch, Engine engine,
+ Collection<? extends EObject> group) throws AssertionError {
+
+ //Just trying to print information on matches
+ System.out.println("RUNNING FILTER TEST");
+ List<Match> matches = new ArrayList<Match>();
+ int count = 0;
+ for(Rule r : rule.getAllMultiRules()){
+ System.out.println("Is Multirule? " + r.isMultiRule());
+ if(r.isMultiRule()){
+ for (Match m : engine.findMatches(rule, graph, null)) {
+ matches = InterpreterUtil.removeOverlappingMultiMatches(m, r);
+ for (Match m2 : matches){//m.getMultiMatches(r)){
+ System.out.println(m2.toString());
+ count = count + 1;
+ }
+ }
+ }
+ }
+ System.out.println(count);
+ /*if(!group.containsAll(matches)){
+ throw new AssertionError("expected: group contains all target nodes, but not all target nodes were contained");
+ }*/
+ }
}
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Node.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Node.java
index b452ef7..ddae9de 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Node.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Node.java
@@ -27,13 +27,13 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.emf.henshin.tests.testmodel.Node#getHasVals <em>Has Vals</em>}</li>
* <li>{@link org.eclipse.emf.henshin.tests.testmodel.Node#getParentNode <em>Parent Node</em>}</li>
* <li>{@link org.eclipse.emf.henshin.tests.testmodel.Node#getChildNodes <em>Child Nodes</em>}</li>
* <li>{@link org.eclipse.emf.henshin.tests.testmodel.Node#getNodename <em>Nodename</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getNode()
* @model kind="class"
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Val.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Val.java
index 3babd29..caca445 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Val.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/Val.java
@@ -23,12 +23,12 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.emf.henshin.tests.testmodel.Val#getIntvl <em>Intvl</em>}</li>
* <li>{@link org.eclipse.emf.henshin.tests.testmodel.Val#getValname <em>Valname</em>}</li>
* <li>{@link org.eclipse.emf.henshin.tests.testmodel.Val#getIntlist <em>Intlist</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getVal()
* @model kind="class"
diff --git a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/cont.java b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/cont.java
index 166882f..721e853 100644
--- a/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/cont.java
+++ b/plugins/org.eclipse.emf.henshin.tests/src/org/eclipse/emf/henshin/tests/testmodel/cont.java
@@ -24,11 +24,11 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.emf.henshin.tests.testmodel.cont#getContainsNode <em>Contains Node</em>}</li>
* <li>{@link org.eclipse.emf.henshin.tests.testmodel.cont#getContainsVal <em>Contains Val</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.emf.henshin.tests.testmodel.TestmodelPackage#getcont()
* @model kind="class"