/*******************************************************************************
* Copyright (c) 2012, 2014 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, CompareType.ID);
}
//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, CompareType.ID);
}
//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, CompareType.ID);
}
//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, CompareType.ID);
}
//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, CompareType.ID);
}
//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, CompareType.ID);
}
//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, CompareType.ID);
}
//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, CompareType.ID);
}
//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, CompareType.ID);
}
}