/*******************************************************************************
* 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.CSearchResult;
import org.eclipse.cdt.internal.ui.search.CSearchTextSelectionQuery;
import org.eclipse.cdt.internal.ui.search.LineSearchElement;
import org.eclipse.cdt.internal.ui.search.LineSearchElement.Match;
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);
}
// #define waldo()
//
// struct S {
// void foo() {
// waldo();
// }
// };
// // empty file
public void testEnclosingDefinitionOfMacroReference_508216() throws Exception {
int offset = fHeaderContents.indexOf("define waldo") + 7;
CSearchQuery query = makeProjectQuery(offset, 5);
CSearchResult result = getSearchResult(query);
Object[] elements = result.getElements();
assertEquals(1, elements.length);
assertInstance(elements[0], LineSearchElement.class);
Match[] matches = ((LineSearchElement) elements[0]).getMatches();
assertEquals(1, matches.length);
assertNotNull(matches[0].getEnclosingElement());
}
// namespace N {
// void foo();
// }
// using N::foo;
// // empty file
public void testUsingDeclaration_399147() throws Exception {
int offset = fHeaderContents.indexOf("void foo") + 5;
CSearchQuery query = makeProjectQuery(offset, 3);
assertOccurrences(query, 1);
}
}