blob: cc2ba1a1fedd9c645d384ef42e06a79b97976ab5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2011 Wind River Systems, Inc. and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Anton Leherbauer (Wind River Systems) - initial API and implementation
* Andrew Gvozdev
*******************************************************************************/
package org.eclipse.cdt.ui.tests.text;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.formatter.DefaultCodeFormatterConstants;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.testplugin.CProjectHelper;
import org.eclipse.cdt.internal.core.model.ext.SourceRange;
import org.eclipse.cdt.internal.ui.editor.CEditor;
import org.eclipse.cdt.ui.testplugin.EditorTestHelper;
import org.eclipse.cdt.ui.testplugin.ResourceTestHelper;
import org.eclipse.cdt.ui.tests.BaseUITestCase;
import org.eclipse.cdt.ui.tests.text.AddBlockCommentTest.LinePosition;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.text.IDocument;
import junit.framework.TestSuite;
/**
* Tests for the RemoveBlockCommentAction.
*
* @since 5.0
*/
public class RemoveBlockCommentTest extends BaseUITestCase {
private ICProject fCProject;
public static TestSuite suite() {
return suite(RemoveBlockCommentTest.class, "_");
}
private CEditor fEditor;
private IDocument fDocument;
@Override
protected void setUp() throws Exception {
super.setUp();
final String PROJECT = "BlockComment";
// Using any existing file just to open CEditor, the content is not used
final String filename = "/BlockComment/src/sample/Before.cpp";
fCProject = EditorTestHelper.createCProject(PROJECT, "resources/formatter");
fCProject.setOption(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, CCorePlugin.TAB);
fEditor = (CEditor) EditorTestHelper.openInEditor(ResourceTestHelper.findFile(filename), true);
fDocument = EditorTestHelper.getSourceViewer(fEditor).getDocument();
// Delete contents
fDocument.set("");
}
@Override
protected void tearDown() throws Exception {
EditorTestHelper.closeEditor(fEditor);
if (fCProject != null)
CProjectHelper.delete(fCProject);
super.tearDown();
}
/**
* Run an action to comment block defined by line positions
* and assert that the result matches the expected result.
* "Before" and "After" are taken from test comments.
*
* @param startLinePosition
* @param endLinePosition
* @throws Exception
*/
protected void assertFormatterResult(LinePosition startLinePosition, LinePosition endLinePosition)
throws Exception {
CharSequence[] contents = getContentsForTest(2);
String before = contents[0].toString();
String after = contents[1].toString();
fDocument.set(before);
SourceRange range = new SourceRange(startLinePosition.getOffset(),
endLinePosition.getOffset() - startLinePosition.getOffset());
fEditor.setSelection(range, true);
IAction commentAction = fEditor.getAction("RemoveBlockComment");
assertNotNull("No RemoveBlockComment action", commentAction);
commentAction.setEnabled(true);
commentAction.run();
String expected = after;
assertEquals(expected, fDocument.get());
}
/**
* Run an action to comment block defined by line positions
* and assert that the result matches the expected result.
* "Before" and "After" are taken from test comments.
*
* @param startLinePosition
* @param endLinePosition
* @param before editor contents before the operation
* @param after expected editor contents after the operation
* @throws Exception
*/
protected void assertFormatterResult(LinePosition startLinePosition, LinePosition endLinePosition, String before,
String after) throws Exception {
fDocument.set(before);
SourceRange range = new SourceRange(startLinePosition.getOffset(),
endLinePosition.getOffset() - startLinePosition.getOffset());
fEditor.setSelection(range, true);
IAction commentAction = fEditor.getAction("RemoveBlockComment");
assertNotNull("No RemoveBlockComment action", commentAction);
commentAction.setEnabled(true);
commentAction.run();
String expected = after;
assertEquals(expected, fDocument.get());
}
//int i, /*j,*/ k;
//int i, j, k;
public void testUncommentPlain() throws Exception {
LinePosition startSelection = new LinePosition(1, 10, fDocument);
LinePosition endSelection = new LinePosition(1, 11, fDocument);
assertFormatterResult(startSelection, endSelection);
}
//int /*j,*/ k;
//int j, k;
public void testRightBorderIn() throws Exception {
LinePosition startSelection = new LinePosition(1, 10, fDocument);
LinePosition endSelection = new LinePosition(1, 11, fDocument);
assertFormatterResult(startSelection, endSelection);
}
//int /*j,*/ k;
//int /*j,*/ k;
public void testRightBorderOut() throws Exception {
LinePosition startSelection = new LinePosition(1, 11, fDocument);
LinePosition endSelection = new LinePosition(1, 12, fDocument);
assertFormatterResult(startSelection, endSelection);
}
//123456789-123
//int /*j,*/ k;
//int j, k;
public void testLeftBorderIn() throws Exception {
LinePosition startSelection = new LinePosition(1, 5, fDocument);
LinePosition endSelection = new LinePosition(1, 6, fDocument);
assertFormatterResult(startSelection, endSelection);
}
//int /*j,*/ k;
//int /*j,*/ k;
public void testLeftBorderOut() throws Exception {
LinePosition startSelection = new LinePosition(1, 4, fDocument);
LinePosition endSelection = new LinePosition(1, 5, fDocument);
assertFormatterResult(startSelection, endSelection);
}
//int /*i,
// j,*/
// k;
//int i,
// j,
// k;
public void testUncommentPartialLines1() throws Exception {
LinePosition startSelection = new LinePosition(1, 7, fDocument);
LinePosition endSelection = new LinePosition(2, 2, fDocument);
assertFormatterResult(startSelection, endSelection);
}
//int i,
///* j,
// k*/;
//int i,
// j,
// k;
public void testUncommentPartialLines2() throws Exception {
LinePosition startSelection = new LinePosition(2, 1, fDocument);
LinePosition endSelection = new LinePosition(3, 8, fDocument);
assertFormatterResult(startSelection, endSelection);
}
//int i;
///*int j;*/
//int k;
//int i;
//int j;
//int k;
public void testUncommentExactlyOneLineNoLoopingPlease() throws Exception {
LinePosition startSelection = new LinePosition(2, 1, fDocument);
LinePosition endSelection = new LinePosition(3, 1, fDocument);
assertFormatterResult(startSelection, endSelection);
}
//int i;
///*
//int j;
//int k;
//*/
//int l;
//int i;
//int j;
//int k;
//int l;
public void testUncommentTwoOrMoreLines() throws Exception {
LinePosition startSelection = new LinePosition(2, 1, fDocument);
LinePosition endSelection = new LinePosition(4, 1, fDocument);
assertFormatterResult(startSelection, endSelection);
}
///*const*/ int i;
//const int i;
public void testUncommentFirstCharacterInFile() throws Exception {
LinePosition startSelection = new LinePosition(1, 1, fDocument);
LinePosition endSelection = new LinePosition(1, 6, fDocument);
assertFormatterResult(startSelection, endSelection);
}
///*#include <x>*/
//#include <y>
//#include <x>
//#include <y>
public void testUncommentPreprocessorFirstLine() throws Exception {
LinePosition startSelection = new LinePosition(1, 1, fDocument);
LinePosition endSelection = new LinePosition(1, 6, fDocument);
assertFormatterResult(startSelection, endSelection);
}
//int i; /*// comment*/
//int j;
//int i; // comment
//int j;
public void testUncommentCppComment() throws Exception {
LinePosition startSelection = new LinePosition(1, 10, fDocument);
LinePosition endSelection = new LinePosition(1, 12, fDocument);
assertFormatterResult(startSelection, endSelection);
}
//#include <x>
///*#include <y>*/
//#include <z>
//#include <x>
//#include <y>
//#include <z>
public void testUncommentSpecialPartition() throws Exception {
LinePosition startSelection = new LinePosition(2, 1, fDocument);
LinePosition endSelection = new LinePosition(3, 1, fDocument);
assertFormatterResult(startSelection, endSelection);
}
//#include <x>
///*
// #include \
// <y>
//*/
//#include <z>
//#include <x>
// #include \
// <y>
//#include <z>
public void testUncommentSpecialPartitionExtra() throws Exception {
LinePosition startSelection = new LinePosition(3, 8, fDocument);
LinePosition endSelection = new LinePosition(3, 10, fDocument);
assertFormatterResult(startSelection, endSelection);
}
///*int i;*/
///*int j;*/
//int k;
//int i;
//int j;
//int k;
public void testUncommentConnectedComments() throws Exception {
LinePosition startSelection = new LinePosition(1, 5, fDocument);
LinePosition endSelection = new LinePosition(2, 5, fDocument);
assertFormatterResult(startSelection, endSelection);
}
//
///*
//
//*/
//
//
public void testUncommentEndOfFile() throws Exception {
LinePosition startSelection = new LinePosition(3, 1, fDocument);
LinePosition endSelection = new LinePosition(5, 2, fDocument);
assertFormatterResult(startSelection, endSelection);
}
public void testMixedEOLs() throws Exception {
String before = "/*\r\n" + "int i;\r\n" + "int j;\n" + "*/\n" + "int k;";
String after = "int i;\r\n" + "int j;\n" + "int k;";
LinePosition startSelection = new LinePosition(2, 1, fDocument);
LinePosition endSelection = new LinePosition(3, 1, fDocument);
assertFormatterResult(startSelection, endSelection, before, after);
}
}