32f3dcb1645a9b44a10e9566cabeb1410cce2152
[idea/community.git] / java / java-tests / testSrc / com / intellij / java / psi / formatter / java / JavaFormatterNewLineTest.java
1 /*
2  * Copyright 2000-2017 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.java.psi.formatter.java;
17
18 import com.intellij.openapi.fileTypes.StdFileTypes;
19 import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
20 import com.intellij.util.IncorrectOperationException;
21
22 /**
23  * Is intended to hold specific java formatting tests for <code>'Place on New Line'</code> settings (
24  * <code>Project Settings - Code Style - Alignment and Braces - Place on New Line</code>).
25  *
26  * @author Denis Zhdanov
27  * @since Apr 28, 2010 12:12:13 PM
28  */
29 public class JavaFormatterNewLineTest extends AbstractJavaFormatterTest {
30
31   public void testAutomaticElseWrapping() {
32     getSettings().ELSE_ON_NEW_LINE = true;
33
34     doMethodTest(
35       "if (b) {\n" +
36       "} else {\n" +
37       "}",
38
39       "if (b) {\n" +
40       "}\n" +
41       "else {\n" +
42       "}"
43     );
44   }
45
46   public void testAutomaticElseUnwrapping() {
47     getSettings().ELSE_ON_NEW_LINE = false;
48     getSettings().KEEP_LINE_BREAKS = true;
49
50     // Inspired by IDEA-47809
51     doMethodTest(
52       "if (b) {\n" +
53       "}\n" +
54       "else {\n" +
55       "}",
56
57       "if (b) {\n" +
58       "} else {\n" +
59       "}"
60     );
61   }
62
63   public void testAutomaticCatchWrapping() {
64     getSettings().CATCH_ON_NEW_LINE = true;
65
66     doMethodTest(
67       "try {\n" +
68       "} catch (Exception e) {\n" +
69       "}",
70
71       "try {\n" +
72       "}\n" +
73       "catch (Exception e) {\n" +
74       "}"
75     );
76   }
77
78   public void testAutomaticCatchUnwrapping() {
79     getSettings().CATCH_ON_NEW_LINE = false;
80     getSettings().KEEP_LINE_BREAKS = true;
81
82     // Inspired by IDEA-47809
83     doMethodTest(
84       "try {\n" +
85       "}\n" +
86       "catch (Exception e) {\n" +
87       "}",
88
89       "try {\n" +
90       "} catch (Exception e) {\n" +
91       "}"
92     );
93   }
94
95   public void testAutomaticFinallyWrapping() {
96     getSettings().FINALLY_ON_NEW_LINE = true;
97
98     doMethodTest(
99       "try {\n" +
100       "} finally {\n" +
101       "}",
102
103       "try {\n" +
104       "}\n" +
105       "finally {\n" +
106       "}"
107     );
108   }
109
110   public void testAutomaticFinallyUnwrapping() {
111     getSettings().FINALLY_ON_NEW_LINE = false;
112     getSettings().KEEP_LINE_BREAKS = true;
113
114     // Inspired by IDEA-47809
115     doMethodTest(
116       "try {\n" +
117       "}\n" +
118       "finally {\n" +
119       "}",
120
121       "try {\n" +
122       "} finally {\n" +
123       "}"
124     );
125   }
126
127   public void testAutomaticCatchFinallyUnwrapping() {
128     // Inspired by IDEA-47809
129     getSettings().CATCH_ON_NEW_LINE = false;
130     getSettings().FINALLY_ON_NEW_LINE = false;
131     getSettings().KEEP_LINE_BREAKS = true;
132
133     doMethodTest(
134       "try {\n" +
135       "}\n" +
136       "catch (Exception e) {\n" +
137       "}\n" +
138       "finally {\n" +
139       "}",
140
141       "try {\n" +
142       "} catch (Exception e) {\n" +
143       "} finally {\n" +
144       "}"
145     );
146   }
147
148   public void testClassInitializationBlockBracesPlacement() {
149     // Inspired by IDEA-54191
150     getSettings().getRootSettings().getIndentOptions(StdFileTypes.JAVA).INDENT_SIZE = 4;
151     getSettings().KEEP_SIMPLE_BLOCKS_IN_ONE_LINE = false;
152     doMethodTest(
153       "new Expectations() {\n" +
154       "    {foo();}};",
155
156       "new Expectations() {\n" +
157       "    {\n" +
158       "        foo();\n" +
159       "    }\n" +
160       "};"
161     );
162   }
163
164   public void testBlockOfMethodWithAnnotatedParameter() {
165     // Inspired by IDEA-17870
166     doClassTest("public Test(@Qualifier(\"blah\") AType blah){}", "public Test(@Qualifier(\"blah\") AType blah) {\n" + "}");
167   }
168
169   public void testArrayInitializer() throws IncorrectOperationException {
170     // Inspired by IDEADEV-6787
171     getSettings().ARRAY_INITIALIZER_WRAP = CommonCodeStyleSettings.WRAP_ALWAYS;
172     getSettings().ARRAY_INITIALIZER_LBRACE_ON_NEXT_LINE = true;
173     getSettings().ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE = true;
174     doTextTest(
175                "public @interface Ann\n" +
176                "{\n" +
177                "int[] x = { 1, 2 };\n" +
178                "\n" +
179                "Mode[] modes () default { @Mode(value = 1), @Mode(value = 2) };\n" +
180                "}",
181
182                "public @interface Ann {\n" +
183                "    int[] x = {\n" +
184                "            1,\n" +
185                "            2\n" +
186                "    };\n" +
187                "\n" +
188                "    Mode[] modes() default {\n" +
189                "            @Mode(value = 1),\n" +
190                "            @Mode(value = 2)\n" +
191                "    };\n" +
192                "}"
193     );
194   }
195
196   public void testSimpleAnnotatedMethodAndBraceOnNextLineStyle() {
197     // Inspired by IDEA-53542
198     getSettings().METHOD_BRACE_STYLE = CommonCodeStyleSettings.NEXT_LINE;
199     getSettings().KEEP_SIMPLE_METHODS_IN_ONE_LINE = true;
200     getSettings().KEEP_LINE_BREAKS = true;
201     getSettings().KEEP_BLANK_LINES_IN_CODE = 2;
202
203     String methodWithAnnotation = "@Override\n" +
204                                   "void foo() {}";
205
206     String methodWithAnnotationAndVisibility = "@Override\n" +
207                                                "public void foo() {}";
208
209     // Don't expect that simple method to be spread on multiple lines.
210     doClassTest(methodWithAnnotation, methodWithAnnotation);
211     doClassTest(methodWithAnnotationAndVisibility, methodWithAnnotationAndVisibility);
212   }
213 }