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"