From d122e22f3de684fec0701e025fd5dbc872c08dea Mon Sep 17 00:00:00 2001 From: Andrew Ferguson Date: Wed, 11 Jul 2007 16:40:38 +0000 Subject: [PATCH] bug 196163: "Search again" does not clear previous results --- .../eclipse/cdt/ui/tests/AutomatedSuite.java | 4 + .../cdt/ui/tests/search/BasicSearchTest.java | 114 ++++++++++++++++++ .../cdt/ui/tests/search/SearchTestSuite.java | 25 ++++ .../internal/ui/search/PDOMSearchQuery.java | 3 + 4 files changed, 146 insertions(+) create mode 100644 core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/search/BasicSearchTest.java create mode 100644 core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/search/SearchTestSuite.java diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java index 11169fe3568..892c9f4b79e 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java @@ -19,6 +19,7 @@ import org.eclipse.cdt.refactoring.tests.RenameRegressionTests; import org.eclipse.cdt.ui.tests.buildconsole.BuildConsoleTests; import org.eclipse.cdt.ui.tests.callhierarchy.CallHierarchyTestSuite; import org.eclipse.cdt.ui.tests.includebrowser.IncludeBrowserTestSuite; +import org.eclipse.cdt.ui.tests.search.SearchTestSuite; import org.eclipse.cdt.ui.tests.text.TextTestSuite; import org.eclipse.cdt.ui.tests.text.contentassist.ContentAssistTestSuite; import org.eclipse.cdt.ui.tests.text.contentassist2.ContentAssist2TestSuite; @@ -73,6 +74,9 @@ public class AutomatedSuite extends TestSuite { // tests from package org.eclipse.cdt.ui.tests.buildconsole addTest(BuildConsoleTests.suite()); + + // tests from package org.eclipse.cdt.ui.tests.search + addTest(SearchTestSuite.suite()); } } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/search/BasicSearchTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/search/BasicSearchTest.java new file mode 100644 index 00000000000..277fd4ac4af --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/search/BasicSearchTest.java @@ -0,0 +1,114 @@ +/******************************************************************************* + * Copyright (c) 2007 Symbian Software Systems and others. + * 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 + * + * Contributors: + * Andrew Ferguson (Symbian) - Initial implementation + *******************************************************************************/ +package org.eclipse.cdt.ui.tests.search; + +import java.io.ByteArrayInputStream; + +import junit.framework.TestSuite; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Path; +import org.osgi.framework.Bundle; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.dom.IPDOMManager; +import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.testplugin.CProjectHelper; +import org.eclipse.cdt.core.testplugin.util.BaseTestCase; +import org.eclipse.cdt.core.testplugin.util.TestSourceReader; +import org.eclipse.cdt.ui.testplugin.CTestPlugin; + +import org.eclipse.cdt.internal.ui.search.PDOMSearchPatternQuery; +import org.eclipse.cdt.internal.ui.search.PDOMSearchQuery; +import org.eclipse.cdt.internal.ui.search.PDOMSearchResult; + +public class BasicSearchTest extends BaseTestCase { + ICProject fCProject; + StringBuffer[] testData; + + public static TestSuite suite() { + return suite(BasicSearchTest.class); + } + + protected void setUp() throws Exception { + fCProject = CProjectHelper.createCCProject(getName()+System.currentTimeMillis(), "bin", IPDOMManager.ID_NO_INDEXER); + Bundle b = CTestPlugin.getDefault().getBundle(); + testData = TestSourceReader.getContentsForTest(b, "ui", this.getClass(), getName(), 2); + + IFile file = TestSourceReader.createFile(fCProject.getProject(), new Path("header.h"), testData[0].toString()); + CCorePlugin.getIndexManager().setIndexerId(fCProject, IPDOMManager.ID_FAST_INDEXER); + assertTrue(CCorePlugin.getIndexManager().joinIndexer(360000, new NullProgressMonitor())); + + IFile cppfile= TestSourceReader.createFile(fCProject.getProject(), new Path("references.cpp"), testData[1].toString()); + assertTrue(CCorePlugin.getIndexManager().joinIndexer(360000, new NullProgressMonitor())); + } + + protected void tearDown() throws Exception { + if(fCProject != null) { + fCProject.getProject().delete(true, NPM); + } + } + + // void foo() {} + + // void bar() { + // foo(); + // } + public void testNewResultsOnSearchAgainA() throws Exception { + PDOMSearchQuery query= makeProjectQuery("foo"); + assertOccurences(query, 2); + assertOccurences(query, 2); + + String newContent= "void bar() {}"; + IFile file = fCProject.getProject().getFile(new Path("references.cpp")); + file.setContents(new ByteArrayInputStream(newContent.getBytes()), IResource.FORCE, NPM); + assertTrue(CCorePlugin.getIndexManager().joinIndexer(360000, new NullProgressMonitor())); + + assertOccurences(query, 1); + } + + // void foo() {} + + // void bar() {foo();foo();foo();} + public void testNewResultsOnSearchAgainB() throws Exception { + PDOMSearchQuery query= makeProjectQuery("foo"); + assertOccurences(query, 4); + assertOccurences(query, 4); + + // whitespace s.t. new match offset is same as older + String newContent= "void bar() { foo(); }"; + IFile file = fCProject.getProject().getFile(new Path("references.cpp")); + file.setContents(new ByteArrayInputStream(newContent.getBytes()), IResource.FORCE, NPM); + assertTrue(CCorePlugin.getIndexManager().joinIndexer(360000, new NullProgressMonitor())); + + assertOccurences(query, 2); + + String newContent2= "void bar() {foo(); foo();}"; + file.setContents(new ByteArrayInputStream(newContent2.getBytes()), IResource.FORCE, NPM); + assertTrue(CCorePlugin.getIndexManager().joinIndexer(360000, new NullProgressMonitor())); + + assertOccurences(query, 3); + } + + protected PDOMSearchQuery makeProjectQuery(String pattern) { + String scope1= "Human Readable Description"; + return new PDOMSearchPatternQuery(new ICElement[] {fCProject}, scope1, pattern, true, PDOMSearchQuery.FIND_ALL_OCCURANCES | PDOMSearchPatternQuery.FIND_ALL_TYPES); + } + + protected void assertOccurences(PDOMSearchQuery query, int expected) { + query.run(NPM); + PDOMSearchResult result= (PDOMSearchResult) query.getSearchResult(); + assertEquals(expected, result.getMatchCount()); + } +} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/search/SearchTestSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/search/SearchTestSuite.java new file mode 100644 index 00000000000..eeccda84627 --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/search/SearchTestSuite.java @@ -0,0 +1,25 @@ +/******************************************************************************* + * Copyright (c) 2007 Symbian Software Systems and others. + * 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 + * + * Contributors: + * Andrew Ferguson (Symbian) - Initial implementation + *******************************************************************************/ + +package org.eclipse.cdt.ui.tests.search; + +import junit.framework.TestSuite; + +public class SearchTestSuite extends TestSuite { + public static TestSuite suite() { + return new SearchTestSuite(); + } + + public SearchTestSuite() { + super(SearchTestSuite.class.getName()); + addTest(BasicSearchTest.suite()); + } +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchQuery.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchQuery.java index d678435b3a7..05f0f81121a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchQuery.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchQuery.java @@ -128,6 +128,9 @@ public abstract class PDOMSearchQuery implements ISearchQuery { } public final IStatus run(IProgressMonitor monitor) throws OperationCanceledException { + PDOMSearchResult result= (PDOMSearchResult) getSearchResult(); + result.removeAll(); + try { IIndex index= CCorePlugin.getIndexManager().getIndex(projects, 0); try {