/******************************************************************************* * Copyright (c) 2008, 2011 Wind River Systems, Inc. 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: * Anton Leherbauer (Wind River Systems) - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.ui.tests.text; import java.util.HashMap; import junit.framework.TestSuite; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.templates.DocumentTemplateContext; import org.eclipse.jface.text.templates.GlobalTemplateVariables; import org.eclipse.jface.text.templates.Template; import org.eclipse.jface.text.templates.TemplateBuffer; import org.eclipse.jface.text.templates.TemplateContext; import org.eclipse.jface.text.templates.TemplateContextType; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.formatter.DefaultCodeFormatterConstants; import org.eclipse.cdt.ui.tests.BaseUITestCase; import org.eclipse.cdt.internal.corext.template.c.CFormatter; /** * Tests for the template formatter (CFormatter). * * @since 5.0 */ public class TemplateFormatterTest extends BaseUITestCase { private static class TestTemplateContextType extends TemplateContextType { TestTemplateContextType() { super("test"); addResolver(new GlobalTemplateVariables.Cursor()); addResolver(new GlobalTemplateVariables.WordSelection()); addResolver(new GlobalTemplateVariables.LineSelection()); addResolver(new GlobalTemplateVariables.Dollar()); addResolver(new GlobalTemplateVariables.Date()); addResolver(new GlobalTemplateVariables.Year()); addResolver(new GlobalTemplateVariables.Time()); addResolver(new GlobalTemplateVariables.User()); } } public static TestSuite suite() { return suite(TemplateFormatterTest.class, "_"); } private TemplateContextType fTemplateContextType; private String fSelection; private HashMap<String, String> fDefaultOptions; @Override protected void setUp() throws Exception { super.setUp(); fTemplateContextType= new TestTemplateContextType(); fSelection= "while (true) {\n\tdoSomething();\n}"; fDefaultOptions= CCorePlugin.getDefaultOptions(); } @Override protected void tearDown() throws Exception { CCorePlugin.setOptions(fDefaultOptions); super.tearDown(); } private void setOption(String key, String value) { HashMap<String, String> options= new HashMap<String, String>(1); options.put(key, value); CCorePlugin.setOptions(options); } protected void assertFormatterResult() throws Exception { assertFormatterResult(false); } protected void assertFormatterResult(boolean useFormatter) throws Exception { CharSequence[] contents= getContentsForTest(2); String before= contents[0].toString().replaceAll("\\r\\n", "\n"); String expected= contents[1].toString(); final Document document = new Document(before); TemplateContext context= new DocumentTemplateContext(fTemplateContextType, document, 0, document.getLength()); context.setVariable(GlobalTemplateVariables.SELECTION, fSelection); Template template= new Template("test", "descr", fTemplateContextType.getId(), before, false); TemplateBuffer buffer= context.evaluate(template); CFormatter formatter= new CFormatter("\n", 0, useFormatter, null); formatter.format(buffer, context); assertEquals(expected, buffer.getString()); } //for(int var=0; var<max; var++) { // ${cursor} //} //for(int var=0; var<max; var++) { // //} public void testForLoopTemplateDefault() throws Exception { assertFormatterResult(); } //for(int var=0; var<max; var++) { // ${cursor} //} //for(int var=0; var<max; var++) { // //} public void testForLoopTemplateMixedIndent() throws Exception { setOption(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, DefaultCodeFormatterConstants.MIXED); setOption(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, Integer.toString(8)); assertFormatterResult(); } //for(int var=0; var<max; var++) { // ${line_selection} //} //for(int var=0; var<max; var++) { // while (true) { // doSomething(); // } //} public void testSourroundWithForLoopTemplateDefault() throws Exception { assertFormatterResult(); } //for(int var=0; var<max; var++) { // ${line_selection} //} //for(int var=0; var<max; var++) { // while (true) { // doSomething(); // } //} public void testSourroundWithForLoopTemplateMixedIndent() throws Exception { setOption(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, DefaultCodeFormatterConstants.MIXED); setOption(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, Integer.toString(8)); fSelection= "while (true) {\n doSomething();\n}"; assertFormatterResult(); } ///*! // * \brief ShortFunctionDescription${cursor}. // * // * \return ReturnedValueDescription. // */ ///*! // * \brief ShortFunctionDescription. // * // * \return ReturnedValueDescription. // */ public void _testIndentationProblemWithBackslashInComment_Bug274973() throws Exception { assertFormatterResult(true); } }