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

Bug 304482 - Add tests for template proposals

This commit is contained in:
Marc-Andre Laperle 2012-01-16 01:25:06 -05:00
parent 1e12841459
commit b0d05b60ce
3 changed files with 249 additions and 5 deletions

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2010 IBM Corporation and others.
* Copyright (c) 2004, 2012 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
@ -98,9 +98,8 @@ public abstract class AbstractContentAssistTest extends BaseUITestCase {
fCFile= null;
super.tearDown();
}
protected void assertContentAssistResults(int offset, String[] expected, boolean isCompletion, int compareType) throws Exception {
protected void assertContentAssistResults(int offset, int length, String[] expected, boolean isCompletion, boolean isTemplate, int compareType) throws Exception {
if (CTestPlugin.getDefault().isDebugging()) {
System.out.println("\n\n\n\n\nTesting "+this.getClass().getName());
}
@ -112,13 +111,18 @@ public abstract class AbstractContentAssistTest extends BaseUITestCase {
ContentAssistant assistant = new ContentAssistant();
CContentAssistProcessor processor = new CContentAssistProcessor(fEditor, assistant, contentType);
long startTime= System.currentTimeMillis();
sourceViewer.setSelectedRange(offset, length);
Object[] results = isCompletion
? (Object[]) processor.computeCompletionProposals(sourceViewer, offset)
: (Object[]) processor.computeContextInformation(sourceViewer, offset);
long endTime= System.currentTimeMillis();
assertTrue(results != null);
results= filterResults(results, isCode);
if(isTemplate) {
results= filterResultsKeepTemplates(results);
} else {
results= filterResults(results, isCode);
}
String[] resultStrings= toStringArray(results, compareType);
Arrays.sort(expected);
Arrays.sort(resultStrings);
@ -161,6 +165,10 @@ public abstract class AbstractContentAssistTest extends BaseUITestCase {
}
protected void assertContentAssistResults(int offset, String[] expected, boolean isCompletion, int compareType) throws Exception {
assertContentAssistResults(offset, 0, expected, isCompletion, false, compareType);
}
/**
* Filter out template and keyword proposals.
* @param results
@ -193,6 +201,20 @@ public abstract class AbstractContentAssistTest extends BaseUITestCase {
return filtered.toArray();
}
/**
* Filter out proposals, keep only templates
*/
private Object[] filterResultsKeepTemplates(Object[] results) {
List<Object> filtered= new ArrayList<Object>();
for (int i = 0; i < results.length; i++) {
Object result = results[i];
if (result instanceof TemplateProposal) {
filtered.add(result);
}
}
return filtered.toArray();
}
private String[] toStringArray(Object[] results, int compareType) {
String[] strings= new String[results.length];
for(int i=0; i< results.length; i++){

View file

@ -73,5 +73,7 @@ public class ContentAssist2TestSuite extends TestSuite {
addTest(ParameterHintTests.suite());
addTest(ShowCamelCasePreferenceTest.suite());
addTest(TemplateProposalTest.suite());
}
}

View file

@ -0,0 +1,220 @@
/*******************************************************************************
* Copyright (c) 2012 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
*******************************************************************************/
package org.eclipse.cdt.ui.tests.text.contentassist2;
import junit.framework.Test;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData;
import org.eclipse.jface.text.templates.persistence.TemplateStore;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.internal.corext.template.c.CContextType;
public class TemplateProposalTest extends AbstractContentAssistTest {
public TemplateProposalTest(String name) {
super(name, true);
}
public TemplateProposalTest(String name, boolean isCpp) {
super(name, isCpp);
}
public static Test suite() {
return BaseTestCase.suite(TemplateProposalTest.class, "_");
}
@Override
protected void setUp() throws Exception {
super.setUp();
// Remove all the default templates. Tests will add templates as necessary.
TemplateStore templateStore = CUIPlugin.getDefault().getTemplateStore();
TemplatePersistenceData[] templateData = templateStore.getTemplateData(false);
for (TemplatePersistenceData templatePersistenceData : templateData) {
templateStore.delete(templatePersistenceData);
}
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
// Restore the default templates
CUIPlugin.getDefault().getTemplateStore().restoreDefaults();
}
private static final String HEADER_FILE_NAME = "CompletionTest.h";
private static final String SOURCE_FILE_NAME = "CompletionTest.cpp";
private static final String SELECTION_START_TAG = "/*sel-start*/";
private static final String SELECTION_END_TAG = "/*sel-end*/";
private static final String TEMPLATE_NAME_WORD_SELECTION = "word selection template";
private static final String TEMPLATE_NAME_WORD_SELECTION_DISP = TEMPLATE_NAME_WORD_SELECTION + " - ";
private static final String TEMPLATE_NAME_LINE_SELECTION = "line selection template";
private static final String TEMPLATE_NAME_LINE_SELECTION_DISP = TEMPLATE_NAME_LINE_SELECTION + " - ";
protected int fSelectionOffset;
protected int fSelectionLength;
private IProject fProject;
@Override
protected IFile setUpProjectContent(IProject project) throws Exception {
fProject= project;
StringBuilder sourceContent= getContentsForTest(1)[0];
fSelectionOffset= sourceContent.indexOf(SELECTION_START_TAG);
assertTrue("No selection start specified", fSelectionOffset >= 0);
sourceContent.delete(fSelectionOffset, fSelectionOffset + SELECTION_START_TAG.length());
int selEndOffset = sourceContent.indexOf(SELECTION_END_TAG);
if (selEndOffset >= 0) {
sourceContent.delete(selEndOffset, selEndOffset + SELECTION_END_TAG.length());
fSelectionLength = selEndOffset - fSelectionOffset;
} else {
fSelectionLength = 0;
}
return createFile(project, SOURCE_FILE_NAME, sourceContent.toString());
}
private void addWordSelectionTemplate() {
Template newTemplate = new Template(TEMPLATE_NAME_WORD_SELECTION, "", CContextType.ID, "cout << ${word_selection};", true);
TemplatePersistenceData data= new TemplatePersistenceData(newTemplate, true);
CUIPlugin.getDefault().getTemplateStore().add(data);
}
private void addLineSelectionTemplate() {
Template newTemplate = new Template(TEMPLATE_NAME_LINE_SELECTION, "", CContextType.ID, "cout << ${line_selection};", true);
TemplatePersistenceData data= new TemplatePersistenceData(newTemplate, true);
CUIPlugin.getDefault().getTemplateStore().add(data);
}
//void func() {
///*sel-start*/test foo bar/*sel-end*/
//}
public void testFullLineSelection() throws Exception {
addLineSelectionTemplate();
addWordSelectionTemplate();
final String[] expected= {
TEMPLATE_NAME_LINE_SELECTION_DISP
};
assertContentAssistResults(fSelectionOffset, fSelectionLength, expected, true, true, AbstractContentAssistTest.COMPARE_ID_STRINGS);
}
//void func() {
///*sel-start*/test foo bar
//test foo bar/*sel-end*/
//}
public void testMultiLineSelection() throws Exception {
addLineSelectionTemplate();
addWordSelectionTemplate();
final String[] expected= {
TEMPLATE_NAME_LINE_SELECTION_DISP
};
assertContentAssistResults(fSelectionOffset, fSelectionLength, expected, true, true, AbstractContentAssistTest.COMPARE_ID_STRINGS);
}
//void func() {
//foo /*sel-start*/test/*sel-end*/
//}
public void testWordSelection() throws Exception {
addLineSelectionTemplate();
addWordSelectionTemplate();
final String[] expected= {
TEMPLATE_NAME_WORD_SELECTION_DISP
};
assertContentAssistResults(fSelectionOffset, fSelectionLength, expected, true, true, AbstractContentAssistTest.COMPARE_ID_STRINGS);
}
//void func() {
//foo/*sel-start*/test/*sel-end*/
//}
public void testPartialLineWordSelection() throws Exception {
addLineSelectionTemplate();
addWordSelectionTemplate();
final String[] expected= {
TEMPLATE_NAME_WORD_SELECTION_DISP
};
assertContentAssistResults(fSelectionOffset, fSelectionLength, expected, true, true, AbstractContentAssistTest.COMPARE_ID_STRINGS);
}
//void func() {
//test foo/*sel-start*/bar
//test foo /*sel-end*/bar
//}
public void testWordSelectionOverMultiLine() throws Exception {
addLineSelectionTemplate();
addWordSelectionTemplate();
final String[] expected= {
TEMPLATE_NAME_WORD_SELECTION_DISP
};
assertContentAssistResults(fSelectionOffset, fSelectionLength, expected, true, true, AbstractContentAssistTest.COMPARE_ID_STRINGS);
}
//void func() {
// /*sel-start*/test/*sel-end*/
//}
public void testBug298554_lineSelectedWithoutWhitespaces() throws Exception {
addLineSelectionTemplate();
final String[] expected= {
TEMPLATE_NAME_LINE_SELECTION_DISP
};
assertContentAssistResults(fSelectionOffset, fSelectionLength, expected, true, true, AbstractContentAssistTest.COMPARE_ID_STRINGS);
}
//void func() {
// /*sel-start*/test foo bar
//test foo bar/*sel-end*/
//}
public void testBug298554_multiLineSelectedWithoutWhitespaces() throws Exception {
addWordSelectionTemplate();
addLineSelectionTemplate();
final String[] expected= {
TEMPLATE_NAME_LINE_SELECTION_DISP
};
assertContentAssistResults(fSelectionOffset, fSelectionLength, expected, true, true, AbstractContentAssistTest.COMPARE_ID_STRINGS);
}
//void func() {
// /*sel-start*/test/*sel-end*/
//}
public void testBug304482_onlyWordOnLine() throws Exception {
addLineSelectionTemplate();
addWordSelectionTemplate();
final String[] expected= {
TEMPLATE_NAME_LINE_SELECTION_DISP,
TEMPLATE_NAME_WORD_SELECTION_DISP
};
assertContentAssistResults(fSelectionOffset, fSelectionLength, expected, true, true, AbstractContentAssistTest.COMPARE_ID_STRINGS);
}
//void func() {
///*sel-start*/test/*sel-end*/
//}
public void testBug304482_onlyWordOnLineStartOfLine() throws Exception {
addLineSelectionTemplate();
addWordSelectionTemplate();
final String[] expected= {
TEMPLATE_NAME_LINE_SELECTION_DISP,
TEMPLATE_NAME_WORD_SELECTION_DISP
};
assertContentAssistResults(fSelectionOffset, fSelectionLength, expected, true, true, AbstractContentAssistTest.COMPARE_ID_STRINGS);
}
}