Test harness and fix for Bug 347546 - [model] role creation wizard leaks working copies
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/RoleCreationTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/RoleCreationTests.java
index 460b3bd..3af833a 100644
--- a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/RoleCreationTests.java
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/RoleCreationTests.java
@@ -32,6 +32,8 @@
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.core.DefaultWorkingCopyOwner;
+import org.eclipse.jdt.internal.core.JavaModelManager;
 import org.eclipse.objectteams.otdt.core.IOTType;
 import org.eclipse.objectteams.otdt.core.IRoleType;
 import org.eclipse.objectteams.otdt.core.OTModelManager;
@@ -81,6 +83,18 @@
         _roleCreator = new RoleCreator();
     }
     
+    @Override
+    protected void tearDown() throws Exception {
+    	ICompilationUnit[] primaryWCs = JavaModelManager.getJavaModelManager().getWorkingCopies(DefaultWorkingCopyOwner.PRIMARY, false);
+    	try {
+    		assertEquals("All working copies should be discarded", 0, primaryWCs == null ? 0 : primaryWCs.length);
+    	} finally { 
+    		if (primaryWCs != null)
+    			for (int i = 0; i < primaryWCs.length; i++)
+    				primaryWCs[i].discardWorkingCopy();
+    		super.tearDown();
+    	}
+    }
 //	  /**
 //	  * only for debug purposes
 //	  * if created directory is not deleted after a test run
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/TeamCreationTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/TeamCreationTests.java
index 0589bd9..315f8b9 100644
--- a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/TeamCreationTests.java
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/typecreator/TeamCreationTests.java
@@ -28,12 +28,13 @@
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IInitializer;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.core.DefaultWorkingCopyOwner;
+import org.eclipse.jdt.internal.core.JavaModelManager;
 import org.eclipse.objectteams.otdt.core.IOTType;
 import org.eclipse.objectteams.otdt.core.OTModelManager;
 import org.eclipse.objectteams.otdt.internal.ui.wizards.typecreation.TeamCreator;
@@ -81,6 +82,19 @@
         super.setUp();
         _teamCreator = new TeamCreator();
     }
+    
+    @Override
+    protected void tearDown() throws Exception {
+    	ICompilationUnit[] primaryWCs = JavaModelManager.getJavaModelManager().getWorkingCopies(DefaultWorkingCopyOwner.PRIMARY, false);
+    	try {
+    		assertEquals("All working copies should be discarded", 0, primaryWCs == null ? 0 : primaryWCs.length);
+    	} finally { 
+    		if (primaryWCs != null)
+    			for (int i = 0; i < primaryWCs.length; i++)
+    				primaryWCs[i].discardWorkingCopy();
+    		super.tearDown();
+    	}
+    }
 
 //    /**
 //     * only for debug purposes