Bug 399665: Part references leak view/editor site after part is disposed
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTest.java
index 54247dc..4c000b8 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTest.java
@@ -10,6 +10,18 @@
*******************************************************************************/
package org.eclipse.jdt.ui.tests.search;
+import org.eclipse.jdt.testplugin.util.DisplayHelper;
+
+import org.eclipse.swt.widgets.Display;
+
+import org.eclipse.ui.editors.text.TextEditor;
+
+import org.eclipse.search.internal.ui.text.FileSearchPage;
+import org.eclipse.search.internal.ui.text.FileSearchQuery;
+import org.eclipse.search.ui.ISearchResultViewPart;
+import org.eclipse.search.ui.NewSearchUI;
+import org.eclipse.search.ui.text.FileTextSearchScope;
+
import junit.framework.Test;
import junit.framework.TestSuite;
@@ -18,10 +30,12 @@
import org.eclipse.jdt.ui.leaktest.LeakTestCase;
import org.eclipse.jdt.ui.leaktest.LeakTestSetup;
+import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.search.JavaSearchQuery;
import org.eclipse.jdt.internal.ui.search.JavaSearchResult;
/**
+ * XXX: Every test in this class needs a delegate method in {@link SearchLeakTestWrapper}!
*/
public class SearchLeakTest extends LeakTestCase {
@@ -57,10 +71,33 @@
query2= null;
assertInstanceCount(JavaSearchResult.class, 0);
}
+
public void testRemoveAllQueries() throws Exception {
SearchTestHelper.runMethodRefQuery("junit.framework.Test", "countTestCases", new String[0]);
SearchTestHelper.runMethodRefQuery("junit.framework.TestCase", "countTestCases", new String[0]);
InternalSearchUI.getInstance().removeAllQueries();
assertInstanceCount(JavaSearchResult.class, 0);
}
+
+ public void testSearchResultEditorClose() throws Exception {
+ assertInstanceCount(TextEditor.class, 0);
+
+ FileTextSearchScope scope= FileTextSearchScope.newWorkspaceScope(null, false);
+ FileSearchQuery query= new FileSearchQuery("projectDescription", false, false, scope);
+ NewSearchUI.runQueryInForeground(null, query);
+ ISearchResultViewPart view= NewSearchUI.getSearchResultView();
+ FileSearchPage page= (FileSearchPage) view.getActivePage();
+
+ DisplayHelper.sleep(Display.getDefault(), 2000);
+ page.gotoNextMatch();
+
+ assertInstanceCount(TextEditor.class, 1);
+
+ assertTrue(JavaPlugin.getActivePage().closeAllEditors(false));
+
+ assertInstanceCount(TextEditor.class, 0);
+
+ NewSearchUI.removeQuery(query);
+ }
+
}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTestWrapper.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTestWrapper.java
index e56eb72..03b1635 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTestWrapper.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTestWrapper.java
@@ -61,4 +61,8 @@
public void testRemoveAllQueries() throws Exception {
fTest.testRemoveAllQueries();
}
+
+ public void testSearchResultEditorClose() throws Exception {
+ fTest.testSearchResultEditorClose();
+ }
}