mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 02:06:01 +02:00
Implemented the first unit test for CCompletionProcessor2, based on the framework for CCompletionProcessor.
This commit is contained in:
parent
4b49083517
commit
277149fc3f
2 changed files with 362 additions and 0 deletions
|
@ -0,0 +1,222 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2004, 2005 IBM Corporation 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:
|
||||||
|
* IBM Rational Software - Initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.ui.tests.text.contentassist2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author hamer
|
||||||
|
*
|
||||||
|
* This abstract class is the base class for all completion proposals test cases
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCProjectNature;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.ASTCompletionNode;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTNode;
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||||
|
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||||
|
import org.eclipse.cdt.internal.core.browser.cache.TypeCacheManager;
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||||
|
import org.eclipse.cdt.internal.ui.text.contentassist.CCompletionProcessor2;
|
||||||
|
import org.eclipse.cdt.ui.testplugin.CTestPlugin;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IProjectDescription;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.Path;
|
||||||
|
import org.eclipse.jface.action.IAction;
|
||||||
|
import org.eclipse.jface.text.Document;
|
||||||
|
import org.eclipse.jface.text.contentassist.ICompletionProposal;
|
||||||
|
import org.eclipse.ui.IEditorPart;
|
||||||
|
import org.eclipse.ui.IWorkbenchPage;
|
||||||
|
import org.eclipse.ui.PlatformUI;
|
||||||
|
import org.eclipse.ui.part.FileEditorInput;
|
||||||
|
|
||||||
|
public abstract class CompletionProposalsBaseTest extends TestCase{
|
||||||
|
protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
|
||||||
|
private final String projectName = "TestProject1"; //$NON-NLS-1$
|
||||||
|
private final String projectType = "bin"; //$NON-NLS-1$
|
||||||
|
private ICProject fCProject;
|
||||||
|
private IFile fCFile;
|
||||||
|
private IFile fHeaderFile;
|
||||||
|
private NullProgressMonitor monitor;
|
||||||
|
private ITranslationUnit tu = null;
|
||||||
|
private String buffer = EMPTY_STRING;
|
||||||
|
private Document document = null;
|
||||||
|
|
||||||
|
|
||||||
|
public CompletionProposalsBaseTest(String name) {
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Derived classes have to provide there abstract methods
|
||||||
|
*/
|
||||||
|
protected abstract String getFileName();
|
||||||
|
protected abstract String getFileFullPath();
|
||||||
|
protected abstract String getHeaderFileName();
|
||||||
|
protected abstract String getHeaderFileFullPath();
|
||||||
|
protected abstract int getCompletionPosition();
|
||||||
|
protected abstract String getExpectedScopeClassName();
|
||||||
|
protected abstract String getExpectedContextClassName();
|
||||||
|
protected abstract String getExpectedPrefix();
|
||||||
|
protected abstract IASTCompletionNode.CompletionKind getExpectedKind();
|
||||||
|
protected abstract String[] getExpectedResultsValues();
|
||||||
|
protected String getFunctionOrConstructorName() { return EMPTY_STRING; }
|
||||||
|
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
monitor = new NullProgressMonitor();
|
||||||
|
|
||||||
|
fCProject= CProjectHelper.createCProject(projectName, projectType);
|
||||||
|
fHeaderFile = fCProject.getProject().getFile(getHeaderFileName());
|
||||||
|
String fileName = getFileName();
|
||||||
|
fCFile = fCProject.getProject().getFile(fileName);
|
||||||
|
if ( (!fCFile.exists()) &&( !fHeaderFile.exists() )) {
|
||||||
|
try{
|
||||||
|
FileInputStream headerFileIn = new FileInputStream(
|
||||||
|
CTestPlugin.getDefault().getFileInPlugin(new Path(getHeaderFileFullPath())));
|
||||||
|
fHeaderFile.create(headerFileIn,false, monitor);
|
||||||
|
FileInputStream bodyFileIn = new FileInputStream(
|
||||||
|
CTestPlugin.getDefault().getFileInPlugin(new Path(getFileFullPath())));
|
||||||
|
fCFile.create(bodyFileIn,false, monitor);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!fCProject.getProject().hasNature(CCProjectNature.CC_NATURE_ID)) {
|
||||||
|
addNatureToProject(fCProject.getProject(), CCProjectNature.CC_NATURE_ID, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TEMPORARY: Disable type cache
|
||||||
|
TypeCacheManager typeCacheManager = TypeCacheManager.getInstance();
|
||||||
|
typeCacheManager.setProcessTypeCacheEvents(false);
|
||||||
|
|
||||||
|
// use the new indexer
|
||||||
|
//IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void addNatureToProject(IProject proj, String natureId, IProgressMonitor monitor) throws CoreException {
|
||||||
|
IProjectDescription description = proj.getDescription();
|
||||||
|
String[] prevNatures= description.getNatureIds();
|
||||||
|
String[] newNatures= new String[prevNatures.length + 1];
|
||||||
|
System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length);
|
||||||
|
newNatures[prevNatures.length]= natureId;
|
||||||
|
description.setNatureIds(newNatures);
|
||||||
|
proj.setDescription(description, monitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tearDown() {
|
||||||
|
CProjectHelper.delete(fCProject);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCompletionProposals() throws Exception {
|
||||||
|
// setup the translation unit, the buffer and the document
|
||||||
|
//ITranslationUnit header = (ITranslationUnit)CoreModel.getDefault().create(fHeaderFile);
|
||||||
|
ITranslationUnit tu = (ITranslationUnit)CoreModel.getDefault().create(fCFile);
|
||||||
|
buffer = tu.getBuffer().getContents();
|
||||||
|
// document = new Document(buffer);
|
||||||
|
|
||||||
|
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
|
||||||
|
FileEditorInput editorInput = new FileEditorInput(fCFile);
|
||||||
|
IEditorPart editorPart = page.openEditor(editorInput, "org.eclipse.cdt.ui.editor.CEditor");
|
||||||
|
|
||||||
|
CEditor editor = (CEditor) editorPart ;
|
||||||
|
IAction completionAction = editor.getAction("ContentAssistProposal");
|
||||||
|
|
||||||
|
CCompletionProcessor2 completionProcessor = new CCompletionProcessor2(editorPart);
|
||||||
|
// IWorkingCopy wc = null;
|
||||||
|
// try{
|
||||||
|
// wc = tu.getWorkingCopy();
|
||||||
|
// }catch (CModelException e){
|
||||||
|
// fail("Failed to get working copy"); //$NON-NLS-1$
|
||||||
|
// }
|
||||||
|
|
||||||
|
// call the CompletionProcessor
|
||||||
|
// ICompletionProposal[] results = completionProcessor.evalProposals(document, pos, wc, null);
|
||||||
|
ICompletionProposal[] results = completionProcessor.computeCompletionProposals(editor.getCSourceViewer(), getCompletionPosition()); // (document, pos, wc, null);
|
||||||
|
assertTrue(results != null);
|
||||||
|
|
||||||
|
// check the completion node
|
||||||
|
ASTCompletionNode currentCompletionNode = completionProcessor.getCurrentCompletionNode();
|
||||||
|
IASTName[] names = currentCompletionNode.getNames();
|
||||||
|
IASTName currentName = names[0];
|
||||||
|
// IASTCompletionNode completionNode = (IASTCompletionNode) currentCompletionNode ;
|
||||||
|
// assertNotNull(completionNode);
|
||||||
|
assertNotNull(currentCompletionNode);
|
||||||
|
// scope
|
||||||
|
// IASTScope scope = completionNode.getCompletionScope();
|
||||||
|
// assertNotNull(scope);
|
||||||
|
// assertTrue(scope.getClass().getName().endsWith(getExpectedScopeClassName()));
|
||||||
|
// // context
|
||||||
|
// IASTNode context = completionNode.getCompletionContext();
|
||||||
|
// if(context == null)
|
||||||
|
// assertTrue(getExpectedContextClassName().equals("null")); //$NON-NLS-1$
|
||||||
|
// else
|
||||||
|
// assertTrue(context.getClass().getName().endsWith(getExpectedContextClassName()));
|
||||||
|
// // kind
|
||||||
|
// IASTCompletionNode.CompletionKind kind = completionNode.getCompletionKind();
|
||||||
|
// assertTrue(kind == getExpectedKind());
|
||||||
|
// prefix
|
||||||
|
// String prefix = completionNode.getCompletionPrefix();
|
||||||
|
String prefix = currentCompletionNode.getPrefix();
|
||||||
|
assertEquals(prefix, getExpectedPrefix());
|
||||||
|
|
||||||
|
// assertEquals( completionNode.getFunctionName(), getFunctionOrConstructorName() );
|
||||||
|
|
||||||
|
String[] expected = getExpectedResultsValues();
|
||||||
|
assertTrue(results.length >= expected.length);
|
||||||
|
|
||||||
|
for (int i = 0; i< expected.length; i++){
|
||||||
|
boolean found = false;
|
||||||
|
for(int j = 0; j< results.length; j++){
|
||||||
|
ICompletionProposal proposal = results[j];
|
||||||
|
String displayString = proposal.getDisplayString();
|
||||||
|
if(expected[i].equals(displayString)){
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertTrue( "Lookup failed for " + expected[i], found ); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Returns the buffer.
|
||||||
|
*/
|
||||||
|
public String getBuffer() {
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Returns the document.
|
||||||
|
*/
|
||||||
|
public Document getDocument() {
|
||||||
|
return document;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Returns the tu.
|
||||||
|
*/
|
||||||
|
public ITranslationUnit getTranslationUnit() {
|
||||||
|
return tu;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,140 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2004 IBM Corporation 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:
|
||||||
|
* IBM Rational Software - Initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.ui.tests.text.contentassist2;
|
||||||
|
|
||||||
|
|
||||||
|
import junit.framework.Test;
|
||||||
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author hamer
|
||||||
|
*
|
||||||
|
* Testing Single_Name_Reference in parameter passing
|
||||||
|
* Bug#
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class CompletionTest_FunctionReference_Prefix extends CompletionProposalsBaseTest{
|
||||||
|
private final String fileName = "CompletionTestStart36.cpp";
|
||||||
|
private final String fileFullPath ="resources/contentassist/" + fileName;
|
||||||
|
private final String headerFileName = "CompletionTestStart.h";
|
||||||
|
private final String headerFileFullPath ="resources/contentassist/" + headerFileName;
|
||||||
|
private final String expectedScopeName = "ASTMethod";
|
||||||
|
private final String expectedContextName = "null";
|
||||||
|
private final CompletionKind expectedKind = CompletionKind.FUNCTION_REFERENCE;
|
||||||
|
private final String expectedPrefix = "x";
|
||||||
|
private final String[] expectedResults = {
|
||||||
|
"xLocal", // TODO: should be "xLocal : int",
|
||||||
|
"xAClassField", // TODO: should be "xAClassField : float",
|
||||||
|
"xVariable", // TODO: should be "xVariable : int",
|
||||||
|
"xAClassMethod(int x) void",
|
||||||
|
"xFunction(void) bool",
|
||||||
|
"xOtherFunction(void) void",
|
||||||
|
"xNamespace",
|
||||||
|
"xOtherClass",
|
||||||
|
"xFirstEnum",
|
||||||
|
"xSecondEnum",
|
||||||
|
"xThirdEnum",
|
||||||
|
"xEnumeration",
|
||||||
|
/* FIXME: DOM search is currently case sensitive?
|
||||||
|
"XMacro(x,y)" */
|
||||||
|
};
|
||||||
|
|
||||||
|
public CompletionTest_FunctionReference_Prefix(String name) {
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Test suite() {
|
||||||
|
TestSuite suite= new TestSuite(CompletionTest_FunctionReference_Prefix.class.getName());
|
||||||
|
suite.addTest(new CompletionTest_FunctionReference_Prefix("testCompletionProposals"));
|
||||||
|
return suite;
|
||||||
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getCompletionPosition()
|
||||||
|
*/
|
||||||
|
protected int getCompletionPosition() {
|
||||||
|
return getBuffer().indexOf(" x ") + 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedScope()
|
||||||
|
*/
|
||||||
|
protected String getExpectedScopeClassName() {
|
||||||
|
return expectedScopeName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedContext()
|
||||||
|
*/
|
||||||
|
protected String getExpectedContextClassName() {
|
||||||
|
return expectedContextName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedKind()
|
||||||
|
*/
|
||||||
|
protected CompletionKind getExpectedKind() {
|
||||||
|
return expectedKind;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedPrefix()
|
||||||
|
*/
|
||||||
|
protected String getExpectedPrefix() {
|
||||||
|
return expectedPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getExpectedResultsValues()
|
||||||
|
*/
|
||||||
|
protected String[] getExpectedResultsValues() {
|
||||||
|
return expectedResults;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getFileName()
|
||||||
|
*/
|
||||||
|
protected String getFileName() {
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getFileFullPath()
|
||||||
|
*/
|
||||||
|
protected String getFileFullPath() {
|
||||||
|
return fileFullPath;
|
||||||
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getHeaderFileFullPath()
|
||||||
|
*/
|
||||||
|
protected String getHeaderFileFullPath() {
|
||||||
|
return headerFileFullPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getHeaderFileName()
|
||||||
|
*/
|
||||||
|
protected String getHeaderFileName() {
|
||||||
|
return headerFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest#getFunctionOrConstructorName()
|
||||||
|
*/
|
||||||
|
protected String getFunctionOrConstructorName() {
|
||||||
|
return "xAClassMethod";
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue