| /******************************************************************************* |
| * Copyright (c) 2005, 2015 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 Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.text.tests; |
| |
| import java.util.ListResourceBundle; |
| |
| import junit.extensions.TestSetup; |
| import junit.framework.Test; |
| import junit.framework.TestCase; |
| import junit.framework.TestSuite; |
| |
| import org.eclipse.jdt.testplugin.JavaProjectHelper; |
| import org.eclipse.jdt.text.tests.performance.EditorTestHelper; |
| import org.eclipse.jdt.text.tests.performance.ResourceTestHelper; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| |
| import org.eclipse.jface.text.IDocument; |
| import org.eclipse.jface.text.source.SourceViewer; |
| |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jdt.core.JavaCore; |
| import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants; |
| |
| import org.eclipse.jdt.internal.ui.actions.IndentAction; |
| import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor; |
| |
| /** |
| * |
| * @since 3.2 |
| */ |
| public class IndentActionTest extends TestCase { |
| private static final String PROJECT= "IndentTests"; |
| |
| private static final class EmptyBundle extends ListResourceBundle { |
| @Override |
| protected Object[][] getContents() { |
| return new Object[0][]; |
| } |
| } |
| |
| protected static class IndentTestSetup extends TestSetup { |
| |
| private IJavaProject fJavaProject; |
| |
| public IndentTestSetup(Test test) { |
| super(test); |
| } |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| |
| fJavaProject= EditorTestHelper.createJavaProject(PROJECT, "testResources/indentation"); |
| fJavaProject.setOption(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.TAB); |
| fJavaProject.setOption(DefaultCodeFormatterConstants.FORMATTER_INDENT_EMPTY_LINES, DefaultCodeFormatterConstants.FALSE); |
| fJavaProject.setOption(DefaultCodeFormatterConstants.FORMATTER_NEVER_INDENT_BLOCK_COMMENTS_ON_FIRST_COLUMN, DefaultCodeFormatterConstants.TRUE); |
| fJavaProject.setOption(DefaultCodeFormatterConstants.FORMATTER_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN, DefaultCodeFormatterConstants.TRUE); |
| } |
| |
| @Override |
| protected void tearDown () throws Exception { |
| if (fJavaProject != null) |
| JavaProjectHelper.delete(fJavaProject); |
| |
| super.tearDown(); |
| } |
| |
| public static IJavaProject getProject() { |
| IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT); |
| return JavaCore.create(project); |
| } |
| } |
| |
| private static final Class<IndentActionTest> THIS= IndentActionTest.class; |
| public static Test suite() { |
| return new IndentTestSetup(new TestSuite(THIS)); |
| } |
| |
| private JavaEditor fEditor; |
| private SourceViewer fSourceViewer; |
| private IDocument fDocument; |
| |
| /* |
| * @see junit.framework.TestCase#setUp() |
| */ |
| @Override |
| protected void setUp() throws Exception { |
| String filename= createFileName("Before"); |
| fEditor= (JavaEditor) EditorTestHelper.openInEditor(ResourceTestHelper.findFile(filename), true); |
| fSourceViewer= EditorTestHelper.getSourceViewer(fEditor); |
| fDocument= fSourceViewer.getDocument(); |
| } |
| |
| /* |
| * @see junit.framework.TestCase#tearDown() |
| */ |
| @Override |
| protected void tearDown() throws Exception { |
| EditorTestHelper.closeEditor(fEditor); |
| fEditor= null; |
| fSourceViewer= null; |
| } |
| |
| private void assertIndentResult() throws Exception { |
| String afterFile= createFileName("Modified"); |
| String expected= ResourceTestHelper.read(afterFile).toString(); |
| |
| new IndentAction(new EmptyBundle(), "prefix", fEditor, false).run(); |
| |
| assertEquals(expected, fDocument.get()); |
| } |
| |
| private String createFileName(String qualifier) { |
| String name= getName(); |
| name= name.substring(4, 5).toLowerCase() + name.substring(5); |
| return "/" + PROJECT + "/src/" + name + "/" + qualifier + ".java"; |
| } |
| |
| private void selectAll() { |
| fSourceViewer.setSelectedRange(0, fDocument.getLength()); |
| } |
| |
| public void testUnchanged() throws Exception { |
| selectAll(); |
| assertIndentResult(); |
| } |
| |
| public void testBug122261() throws Exception { |
| selectAll(); |
| assertIndentResult(); |
| } |
| |
| public void testEmptySingleLineComment01() throws Exception { |
| selectAll(); |
| assertIndentResult(); |
| } |
| |
| public void testEmptySingleLineComment02() throws Exception { |
| IJavaProject project= IndentTestSetup.getProject(); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_INDENT_EMPTY_LINES, DefaultCodeFormatterConstants.TRUE); |
| try { |
| selectAll(); |
| assertIndentResult(); |
| } finally { |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_INDENT_EMPTY_LINES, DefaultCodeFormatterConstants.FALSE); |
| } |
| } |
| |
| public void testEmptySingleLineComment03() throws Exception { |
| IJavaProject project= IndentTestSetup.getProject(); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_INDENT_EMPTY_LINES, DefaultCodeFormatterConstants.TRUE); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_NEVER_INDENT_BLOCK_COMMENTS_ON_FIRST_COLUMN, DefaultCodeFormatterConstants.FALSE); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN, DefaultCodeFormatterConstants.FALSE); |
| try { |
| selectAll(); |
| assertIndentResult(); |
| } finally { |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_INDENT_EMPTY_LINES, DefaultCodeFormatterConstants.FALSE); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_NEVER_INDENT_BLOCK_COMMENTS_ON_FIRST_COLUMN, DefaultCodeFormatterConstants.TRUE); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN, DefaultCodeFormatterConstants.TRUE); |
| } |
| } |
| |
| public void testBug424772() throws Exception { |
| selectAll(); |
| assertIndentResult(); |
| } |
| |
| public void testBug428384() throws Exception { |
| selectAll(); |
| assertIndentResult(); |
| } |
| |
| public void testBug439582_1() throws Exception { |
| IJavaProject project= IndentTestSetup.getProject(); |
| String value= project.getOption(DefaultCodeFormatterConstants.FORMATTER_CONTINUATION_INDENTATION_FOR_ARRAY_INITIALIZER, true); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_CONTINUATION_INDENTATION_FOR_ARRAY_INITIALIZER, "1"); |
| try { |
| selectAll(); |
| assertIndentResult(); |
| } finally { |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_CONTINUATION_INDENTATION_FOR_ARRAY_INITIALIZER, value); |
| } |
| } |
| |
| public void testBug439582_2() throws Exception { |
| selectAll(); |
| assertIndentResult(); |
| } |
| |
| public void testBug439582_3() throws Exception { |
| selectAll(); |
| assertIndentResult(); |
| } |
| |
| public void testBug439582_4() throws Exception { |
| selectAll(); |
| assertIndentResult(); |
| } |
| |
| public void testBug439582_5() throws Exception { |
| selectAll(); |
| assertIndentResult(); |
| } |
| |
| public void testBug400670_1() throws Exception { |
| // With formatter profile from https://bugs.eclipse.org/bugs/show_bug.cgi?id=400670#c0 |
| String indentOnColumn= DefaultCodeFormatterConstants.createAlignmentValue(true, DefaultCodeFormatterConstants.WRAP_NEXT_PER_LINE, DefaultCodeFormatterConstants.INDENT_ON_COLUMN); |
| IJavaProject project= IndentTestSetup.getProject(); |
| String value1= project.getOption(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ENUM_CONSTANTS, true); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ENUM_CONSTANTS, indentOnColumn); |
| String value2= project.getOption(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_METHOD_INVOCATION, true); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_METHOD_INVOCATION, indentOnColumn); |
| String value3= project.getOption(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_EXPRESSIONS_IN_ARRAY_INITIALIZER, true); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_EXPRESSIONS_IN_ARRAY_INITIALIZER, indentOnColumn); |
| try { |
| selectAll(); |
| assertIndentResult(); |
| } finally { |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ENUM_CONSTANTS, value1); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_ARGUMENTS_IN_METHOD_INVOCATION, value2); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_ALIGNMENT_FOR_EXPRESSIONS_IN_ARRAY_INITIALIZER, value3); |
| } |
| } |
| |
| public void testBug400670_2() throws Exception { |
| // With default formatter profile |
| selectAll(); |
| assertIndentResult(); |
| } |
| |
| public void testBug458763() throws Exception { |
| IJavaProject project= IndentTestSetup.getProject(); |
| String value= project.getOption(DefaultCodeFormatterConstants.FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_SWITCH, true); |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_SWITCH, DefaultCodeFormatterConstants.FALSE); |
| try { |
| selectAll(); |
| assertIndentResult(); |
| } finally { |
| project.setOption(DefaultCodeFormatterConstants.FORMATTER_INDENT_SWITCHSTATEMENTS_COMPARE_TO_SWITCH, value); |
| } |
| } |
| } |