1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 01:36:01 +02:00

Bug 491343 - Find references with only polymorphic results

This commit also adds infrastructure for testing 'Find References'.

Change-Id: Ibe33dd00dd178587b202a9ebb1dd29315711f6fb
This commit is contained in:
Nathan Ridge 2016-12-05 16:33:52 -05:00
parent ade410bbe9
commit d45c9b4851
5 changed files with 140 additions and 38 deletions

View file

@ -35,55 +35,25 @@ import org.eclipse.search.ui.ISearchResult;
import org.eclipse.search.ui.ISearchResultPage;
import org.eclipse.search.ui.ISearchResultViewPart;
import org.eclipse.search.ui.NewSearchUI;
import org.osgi.framework.Bundle;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.IPDOMManager;
import org.eclipse.cdt.core.index.IIndexManager;
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.TestScannerProvider;
import org.eclipse.cdt.core.testplugin.util.TestSourceReader;
import org.eclipse.cdt.ui.testplugin.CTestPlugin;
import org.eclipse.cdt.ui.tests.BaseUITestCase;
import org.eclipse.cdt.internal.ui.search.CSearchPatternQuery;
import org.eclipse.cdt.internal.ui.search.CSearchQuery;
import org.eclipse.cdt.internal.ui.search.CSearchResult;
import org.eclipse.cdt.internal.ui.search.CSearchViewPage;
public class BasicSearchTest extends BaseUITestCase {
ICProject fCProject;
CharSequence[] testData;
public class BasicSearchTest extends SearchTestBase {
public static TestSuite suite() {
return suite(BasicSearchTest.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
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);
assertEquals("Incomplete test data", 2, testData.length);
IFile file = TestSourceReader.createFile(fCProject.getProject(), new Path("header.h"), testData[0].toString());
CCorePlugin.getIndexManager().setIndexerId(fCProject, IPDOMManager.ID_FAST_INDEXER);
waitForIndexer(fCProject);
IFile cppfile= TestSourceReader.createFile(fCProject.getProject(), new Path("references.cpp"), testData[1].toString());
waitForIndexer(fCProject);
}
@Override
protected void tearDown() throws Exception {
if (fCProject != null) {
fCProject.getProject().delete(true, npm());
}
super.tearDown();
}
// // empty
@ -307,12 +277,6 @@ public class BasicSearchTest extends BaseUITestCase {
return new CSearchPatternQuery(new ICElement[] {fCProject}, scope1, pattern, true, CSearchQuery.FIND_ALL_OCCURRENCES | CSearchPatternQuery.FIND_ALL_TYPES);
}
private void assertOccurrences(CSearchQuery query, int expected) {
query.run(npm());
CSearchResult result= (CSearchResult) query.getSearchResult();
assertEquals(expected, result.getMatchCount());
}
// void foo() {}
// void bar() {

View file

@ -0,0 +1,73 @@
/*******************************************************************************
* Copyright (c) 2016 Nathan Ridge.
* 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
*******************************************************************************/
package org.eclipse.cdt.ui.tests.search;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.ui.testplugin.EditorTestHelper;
import org.eclipse.cdt.internal.ui.editor.CEditor;
import org.eclipse.cdt.internal.ui.search.CSearchQuery;
import org.eclipse.cdt.internal.ui.search.CSearchTextSelectionQuery;
import junit.framework.TestSuite;
/**
* Test the "Find References" source navigation feature. The code implementing
* this feature is org.eclipse.cdt.internal.ui.search.actions.FindRefsAction,
* although this test operates one level lower, creating a
* CSearchTextSelectionQuery directly.
*/
public class FindReferencesTest extends SearchTestBase {
public static TestSuite suite() {
return suite(FindReferencesTest.class);
}
private CSearchQuery makeProjectQuery(int offset, int length) {
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IEditorPart part = null;
try {
part = page.openEditor(new FileEditorInput(fHeaderFile), "org.eclipse.cdt.ui.editor.CEditor"); //$NON-NLS-1$
} catch (PartInitException e) {
assertFalse(true);
}
assertInstance(part, CEditor.class);
CEditor editor = (CEditor) part;
EditorTestHelper.joinReconciler(EditorTestHelper.getSourceViewer(editor), 100, 5000, 10);
ITranslationUnit tu = editor.getInputCElement();
return new CSearchTextSelectionQuery(new ICElement[] { fCProject }, tu, new TextSelection(offset, length),
CSearchQuery.FIND_REFERENCES);
}
// struct A {
// virtual void waldo();
// };
//
// struct B : public A {
// virtual void waldo() override;
// };
//
// int main() {
// A* a = new B();
// a->waldo();
// }
// // empty file
public void testOnlyPolymorphicMatches_bug491343() throws Exception {
int offset = fHeaderContents.indexOf("waldo() override");
CSearchQuery query = makeProjectQuery(offset, 5);
assertOccurrences(query, 1);
}
}

View file

@ -0,0 +1,64 @@
/*******************************************************************************
* Copyright (c) 2016 Nathan Ridge 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
*******************************************************************************/
package org.eclipse.cdt.ui.tests.search;
import org.eclipse.core.resources.IFile;
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.ICProject;
import org.eclipse.cdt.core.testplugin.CProjectHelper;
import org.eclipse.cdt.core.testplugin.util.TestSourceReader;
import org.eclipse.cdt.ui.testplugin.CTestPlugin;
import org.eclipse.cdt.ui.tests.BaseUITestCase;
import org.eclipse.cdt.internal.ui.search.CSearchQuery;
import org.eclipse.cdt.internal.ui.search.CSearchResult;
/**
* Base class for tests that test functionality based on CSearchQuery.
*/
public abstract class SearchTestBase extends BaseUITestCase {
ICProject fCProject;
String fHeaderContents;
IFile fHeaderFile;
CharSequence[] testData;
@Override
protected void setUp() throws Exception {
super.setUp();
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);
assertEquals("Incomplete test data", 2, testData.length);
fHeaderContents = testData[0].toString();
fHeaderFile = TestSourceReader.createFile(fCProject.getProject(), new Path("header.h"), fHeaderContents);
CCorePlugin.getIndexManager().setIndexerId(fCProject, IPDOMManager.ID_FAST_INDEXER);
waitForIndexer(fCProject);
IFile cppfile= TestSourceReader.createFile(fCProject.getProject(), new Path("references.cpp"), testData[1].toString());
waitForIndexer(fCProject);
}
@Override
protected void tearDown() throws Exception {
if (fCProject != null) {
fCProject.getProject().delete(true, npm());
}
super.tearDown();
}
protected void assertOccurrences(CSearchQuery query, int expected) {
query.run(npm());
CSearchResult result= (CSearchResult) query.getSearchResult();
assertEquals(expected, result.getMatchCount());
}
}

View file

@ -22,5 +22,6 @@ public class SearchTestSuite extends TestSuite {
addTest(BasicSearchTest.suite());
addTest(LinkedNamesFinderTest.suite());
addTest(SearchReferencesAcrossLanguagesTest.suite());
addTest(FindReferencesTest.suite());
}
}

View file

@ -392,7 +392,7 @@ public abstract class CSearchQuery implements ISearchQuery {
}
}
if (!names.isEmpty()) {
if (!(names.isEmpty() && (polymorphicNames == null || polymorphicNames.isEmpty()))) {
collectNames(index, names, polymorphicNames);
}
}