/******************************************************************************* * Copyright (c) 2011, 2013 Marc-Andre Laperle 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: * Marc-Andre Laperle - Initial API and implementation * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.ui.tests.refactoring.utils; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ltk.core.refactoring.RefactoringDescriptor; import org.eclipse.ltk.core.refactoring.RefactoringStatus; import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; import org.eclipse.cdt.core.dom.ast.IASTDeclaration; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.ui.tests.refactoring.RefactoringTestBase; import org.eclipse.cdt.internal.ui.refactoring.CRefactoring; import org.eclipse.cdt.internal.ui.refactoring.CRefactoringContext; import org.eclipse.cdt.internal.ui.refactoring.ModificationCollector; import org.eclipse.cdt.internal.ui.refactoring.utils.DefinitionFinder; public class DefinitionFinderTest extends RefactoringTestBase { private static class DummyRefactoring extends CRefactoring { public DummyRefactoring(ICElement element, ISelection selection, ICProject project) { super(element, selection, project); } @Override protected RefactoringStatus checkFinalConditions(IProgressMonitor progressMonitor, CheckConditionsContext checkContext) throws CoreException, OperationCanceledException { return null; } @Override protected RefactoringDescriptor getRefactoringDescriptor() { return null; } @Override protected void collectModifications(IProgressMonitor pm, ModificationCollector collector) throws CoreException, OperationCanceledException { } } public DefinitionFinderTest() { super(); } public DefinitionFinderTest(String name) { super(name); } @Override protected CRefactoring createRefactoring() { return new DummyRefactoring(getSelectedTranslationUnit(), getSelection(), getCProject()); } //A.h //#ifndef A_H_ //#define A_H_ // //void foo(); // //#endif /*A_H_*/ //A.cpp //#include "A.h" // //void foo() { //} public void testFindFunctionDefinition() throws Exception { CRefactoringContext refactoringContext = new CRefactoringContext(createRefactoring()); try { IASTTranslationUnit ast = refactoringContext.getAST(getSelectedTranslationUnit(), null); for (IASTDeclaration declaration : ast.getDeclarations()) { if (declaration instanceof IASTSimpleDeclaration) { IASTName name = ((IASTSimpleDeclaration) declaration).getDeclarators()[0].getName(); assertNotNull(DefinitionFinder.getDefinition(name, refactoringContext, npm())); } } } finally { refactoringContext.dispose(); } } }