Daniel Jasper | c58c70e | 2014-09-15 11:21:46 +0000 | [diff] [blame] | 1 | //===- unittest/Format/FormatTestJava.cpp - Formatting tests for Java -----===// |
| 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | |
| 10 | #include "FormatTestUtils.h" |
| 11 | #include "clang/Format/Format.h" |
| 12 | #include "llvm/Support/Debug.h" |
| 13 | #include "gtest/gtest.h" |
| 14 | |
| 15 | #define DEBUG_TYPE "format-test" |
| 16 | |
| 17 | namespace clang { |
| 18 | namespace format { |
| 19 | |
| 20 | class FormatTestJava : public ::testing::Test { |
| 21 | protected: |
| 22 | static std::string format(llvm::StringRef Code, unsigned Offset, |
| 23 | unsigned Length, const FormatStyle &Style) { |
| 24 | DEBUG(llvm::errs() << "---\n"); |
| 25 | DEBUG(llvm::errs() << Code << "\n\n"); |
| 26 | std::vector<tooling::Range> Ranges(1, tooling::Range(Offset, Length)); |
| 27 | tooling::Replacements Replaces = reformat(Style, Code, Ranges); |
| 28 | std::string Result = applyAllReplacements(Code, Replaces); |
| 29 | EXPECT_NE("", Result); |
| 30 | DEBUG(llvm::errs() << "\n" << Result << "\n\n"); |
| 31 | return Result; |
| 32 | } |
| 33 | |
| 34 | static std::string format( |
| 35 | llvm::StringRef Code, |
| 36 | const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_Java)) { |
| 37 | return format(Code, 0, Code.size(), Style); |
| 38 | } |
| 39 | |
Daniel Jasper | 50b4bd7 | 2014-11-02 19:16:41 +0000 | [diff] [blame] | 40 | static FormatStyle getStyleWithColumns(unsigned ColumnLimit) { |
| 41 | FormatStyle Style = getGoogleStyle(FormatStyle::LK_Java); |
| 42 | Style.ColumnLimit = ColumnLimit; |
| 43 | return Style; |
| 44 | } |
| 45 | |
Daniel Jasper | c58c70e | 2014-09-15 11:21:46 +0000 | [diff] [blame] | 46 | static void verifyFormat( |
| 47 | llvm::StringRef Code, |
| 48 | const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_Java)) { |
| 49 | EXPECT_EQ(Code.str(), format(test::messUp(Code), Style)); |
| 50 | } |
| 51 | }; |
| 52 | |
Daniel Jasper | 30a2406 | 2014-11-14 09:02:28 +0000 | [diff] [blame] | 53 | TEST_F(FormatTestJava, NoAlternativeOperatorNames) { |
| 54 | verifyFormat("someObject.and();"); |
| 55 | } |
| 56 | |
Daniel Jasper | 4f56b0b | 2014-11-26 12:23:10 +0000 | [diff] [blame] | 57 | TEST_F(FormatTestJava, UnderstandsCasts) { |
| 58 | verifyFormat("a[b >> 1] = (byte) (c() << 4);"); |
| 59 | } |
| 60 | |
Daniel Jasper | a98b7b0 | 2014-11-25 10:05:17 +0000 | [diff] [blame] | 61 | TEST_F(FormatTestJava, FormatsInstanceOfLikeOperators) { |
| 62 | FormatStyle Style = getStyleWithColumns(50); |
| 63 | verifyFormat("return aaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" |
| 64 | " instanceof bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;", |
| 65 | Style); |
| 66 | Style.BreakBeforeBinaryOperators = FormatStyle::BOS_None; |
| 67 | verifyFormat("return aaaaaaaaaaaaaaaaaaaaaaaaaaaaa instanceof\n" |
| 68 | " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;", |
| 69 | Style); |
| 70 | } |
| 71 | |
Nico Weber | 450425c | 2014-11-26 16:43:18 +0000 | [diff] [blame] | 72 | TEST_F(FormatTestJava, Chromium) { |
| 73 | verifyFormat("class SomeClass {\n" |
| 74 | " void f() {}\n" |
| 75 | " int g() {\n" |
| 76 | " return 0;\n" |
| 77 | " }\n" |
| 78 | " void h() {\n" |
| 79 | " while (true) f();\n" |
| 80 | " for (;;) f();\n" |
| 81 | " if (true) f();\n" |
| 82 | " }\n" |
| 83 | "}", |
| 84 | getChromiumStyle(FormatStyle::LK_Java)); |
| 85 | } |
| 86 | |
Daniel Jasper | 8379107 | 2014-12-03 13:20:49 +0000 | [diff] [blame] | 87 | TEST_F(FormatTestJava, QualifiedNames) { |
| 88 | verifyFormat("public some.package.Type someFunction( // comment\n" |
| 89 | " int parameter) {}"); |
| 90 | } |
| 91 | |
Daniel Jasper | e5d7486 | 2014-11-26 08:17:08 +0000 | [diff] [blame] | 92 | TEST_F(FormatTestJava, ClassKeyword) { |
| 93 | verifyFormat("SomeClass.class.getName();"); |
| 94 | verifyFormat("Class c = SomeClass.class;"); |
| 95 | } |
| 96 | |
Daniel Jasper | c58c70e | 2014-09-15 11:21:46 +0000 | [diff] [blame] | 97 | TEST_F(FormatTestJava, ClassDeclarations) { |
| 98 | verifyFormat("public class SomeClass {\n" |
| 99 | " private int a;\n" |
| 100 | " private int b;\n" |
| 101 | "}"); |
| 102 | verifyFormat("public class A {\n" |
| 103 | " class B {\n" |
| 104 | " int i;\n" |
| 105 | " }\n" |
| 106 | " class C {\n" |
| 107 | " int j;\n" |
| 108 | " }\n" |
| 109 | "}"); |
Daniel Jasper | 4bf9d47 | 2014-10-21 09:31:29 +0000 | [diff] [blame] | 110 | verifyFormat("public class A extends B.C {}"); |
Daniel Jasper | 50b4bd7 | 2014-11-02 19:16:41 +0000 | [diff] [blame] | 111 | |
Daniel Jasper | 734d52b | 2014-11-14 10:15:56 +0000 | [diff] [blame] | 112 | verifyFormat("abstract class SomeClass\n" |
| 113 | " extends SomeOtherClass implements SomeInterface {}", |
| 114 | getStyleWithColumns(60)); |
Daniel Jasper | 50b4bd7 | 2014-11-02 19:16:41 +0000 | [diff] [blame] | 115 | verifyFormat("abstract class SomeClass extends SomeOtherClass\n" |
Daniel Jasper | 734d52b | 2014-11-14 10:15:56 +0000 | [diff] [blame] | 116 | " implements SomeInterfaceeeeeeeeeeeee {}", |
Daniel Jasper | 50b4bd7 | 2014-11-02 19:16:41 +0000 | [diff] [blame] | 117 | getStyleWithColumns(60)); |
| 118 | verifyFormat("abstract class SomeClass\n" |
| 119 | " extends SomeOtherClass\n" |
| 120 | " implements SomeInterface {}", |
| 121 | getStyleWithColumns(40)); |
| 122 | verifyFormat("abstract class SomeClass\n" |
| 123 | " extends SomeOtherClass\n" |
| 124 | " implements SomeInterface,\n" |
| 125 | " AnotherInterface {}", |
| 126 | getStyleWithColumns(40)); |
Daniel Jasper | 734d52b | 2014-11-14 10:15:56 +0000 | [diff] [blame] | 127 | verifyFormat("abstract class SomeClass\n" |
| 128 | " implements SomeInterface, AnotherInterface {}", |
| 129 | getStyleWithColumns(60)); |
Daniel Jasper | 39af6cd | 2014-11-03 02:27:28 +0000 | [diff] [blame] | 130 | verifyFormat("@SomeAnnotation()\n" |
Daniel Jasper | 734d52b | 2014-11-14 10:15:56 +0000 | [diff] [blame] | 131 | "abstract class aaaaaaaaaaaa\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 132 | " extends bbbbbbbbbbbbbbb implements cccccccccccc {}", |
Daniel Jasper | 39af6cd | 2014-11-03 02:27:28 +0000 | [diff] [blame] | 133 | getStyleWithColumns(76)); |
Daniel Jasper | 58fcf6d | 2014-11-04 10:53:14 +0000 | [diff] [blame] | 134 | verifyFormat("@SomeAnnotation()\n" |
Daniel Jasper | 734d52b | 2014-11-14 10:15:56 +0000 | [diff] [blame] | 135 | "abstract class aaaaaaaaa<a>\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 136 | " extends bbbbbbbbbbbb<b> implements cccccccccccc {}", |
Daniel Jasper | 58fcf6d | 2014-11-04 10:53:14 +0000 | [diff] [blame] | 137 | getStyleWithColumns(76)); |
Nico Weber | a644d7f | 2014-11-10 16:30:02 +0000 | [diff] [blame] | 138 | verifyFormat("interface SomeInterface<A> extends Foo, Bar {\n" |
| 139 | " void doStuff(int theStuff);\n" |
| 140 | " void doMoreStuff(int moreStuff);\n" |
| 141 | "}"); |
| 142 | verifyFormat("public interface SomeInterface {\n" |
| 143 | " void doStuff(int theStuff);\n" |
| 144 | " void doMoreStuff(int moreStuff);\n" |
| 145 | "}"); |
| 146 | verifyFormat("@interface SomeInterface {\n" |
| 147 | " void doStuff(int theStuff);\n" |
| 148 | " void doMoreStuff(int moreStuff);\n" |
| 149 | "}"); |
| 150 | verifyFormat("public @interface SomeInterface {\n" |
| 151 | " void doStuff(int theStuff);\n" |
| 152 | " void doMoreStuff(int moreStuff);\n" |
| 153 | "}"); |
Daniel Jasper | c58c70e | 2014-09-15 11:21:46 +0000 | [diff] [blame] | 154 | } |
| 155 | |
Daniel Jasper | df2ff00 | 2014-11-02 22:31:39 +0000 | [diff] [blame] | 156 | TEST_F(FormatTestJava, EnumDeclarations) { |
| 157 | verifyFormat("enum SomeThing { ABC, CDE }"); |
| 158 | verifyFormat("enum SomeThing {\n" |
| 159 | " ABC,\n" |
| 160 | " CDE,\n" |
| 161 | "}"); |
| 162 | verifyFormat("public class SomeClass {\n" |
| 163 | " enum SomeThing { ABC, CDE }\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 164 | " void f() {}\n" |
Daniel Jasper | df2ff00 | 2014-11-02 22:31:39 +0000 | [diff] [blame] | 165 | "}"); |
Daniel Jasper | 6be0f55 | 2014-11-13 15:56:28 +0000 | [diff] [blame] | 166 | verifyFormat("public class SomeClass implements SomeInterface {\n" |
| 167 | " enum SomeThing { ABC, CDE }\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 168 | " void f() {}\n" |
Daniel Jasper | 6be0f55 | 2014-11-13 15:56:28 +0000 | [diff] [blame] | 169 | "}"); |
| 170 | verifyFormat("enum SomeThing {\n" |
| 171 | " ABC,\n" |
| 172 | " CDE;\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 173 | " void f() {}\n" |
Daniel Jasper | 6be0f55 | 2014-11-13 15:56:28 +0000 | [diff] [blame] | 174 | "}"); |
| 175 | verifyFormat("enum SomeThing {\n" |
| 176 | " ABC(1, \"ABC\"),\n" |
| 177 | " CDE(2, \"CDE\");\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 178 | " Something(int i, String s) {}\n" |
Daniel Jasper | 6be0f55 | 2014-11-13 15:56:28 +0000 | [diff] [blame] | 179 | "}"); |
| 180 | verifyFormat("enum SomeThing {\n" |
Daniel Jasper | a0143fa | 2014-11-23 20:54:37 +0000 | [diff] [blame] | 181 | " ABC(new int[] {1, 2}),\n" |
| 182 | " CDE(new int[] {2, 3});\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 183 | " Something(int[] i) {}\n" |
Daniel Jasper | 6be0f55 | 2014-11-13 15:56:28 +0000 | [diff] [blame] | 184 | "}"); |
| 185 | verifyFormat("public enum SomeThing {\n" |
| 186 | " ABC {\n" |
| 187 | " public String toString() {\n" |
| 188 | " return \"ABC\";\n" |
| 189 | " }\n" |
| 190 | " },\n" |
| 191 | " CDE {\n" |
| 192 | " @Override\n" |
| 193 | " public String toString() {\n" |
| 194 | " return \"CDE\";\n" |
| 195 | " }\n" |
| 196 | " };\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 197 | " public void f() {}\n" |
Daniel Jasper | 6be0f55 | 2014-11-13 15:56:28 +0000 | [diff] [blame] | 198 | "}"); |
Daniel Jasper | ccb68b4 | 2014-11-19 22:38:18 +0000 | [diff] [blame] | 199 | verifyFormat("private enum SomeEnum implements Foo<?, B> {\n" |
| 200 | " ABC {\n" |
| 201 | " @Override\n" |
| 202 | " public String toString() {\n" |
| 203 | " return \"ABC\";\n" |
| 204 | " }\n" |
| 205 | " },\n" |
| 206 | " CDE {\n" |
| 207 | " @Override\n" |
| 208 | " public String toString() {\n" |
| 209 | " return \"CDE\";\n" |
| 210 | " }\n" |
| 211 | " };\n" |
| 212 | "}"); |
Daniel Jasper | df2ff00 | 2014-11-02 22:31:39 +0000 | [diff] [blame] | 213 | } |
| 214 | |
Daniel Jasper | a0143fa | 2014-11-23 20:54:37 +0000 | [diff] [blame] | 215 | TEST_F(FormatTestJava, ArrayInitializers) { |
| 216 | verifyFormat("new int[] {1, 2, 3, 4};"); |
| 217 | verifyFormat("new int[] {\n" |
| 218 | " 1, 2, 3, 4,\n" |
| 219 | "};"); |
Daniel Jasper | 13404da | 2014-11-27 14:40:48 +0000 | [diff] [blame] | 220 | |
| 221 | FormatStyle Style = getStyleWithColumns(65); |
| 222 | Style.Cpp11BracedListStyle = false; |
| 223 | verifyFormat( |
| 224 | "expected = new int[] { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,\n" |
| 225 | " 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };", |
| 226 | Style); |
Daniel Jasper | a0143fa | 2014-11-23 20:54:37 +0000 | [diff] [blame] | 227 | } |
| 228 | |
Daniel Jasper | f26c755 | 2014-10-17 13:36:14 +0000 | [diff] [blame] | 229 | TEST_F(FormatTestJava, ThrowsDeclarations) { |
| 230 | verifyFormat("public void doSooooooooooooooooooooooooooomething()\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 231 | " throws LooooooooooooooooooooooooooooongException {}"); |
Daniel Jasper | 375815d | 2014-11-26 12:31:19 +0000 | [diff] [blame] | 232 | verifyFormat("public void doSooooooooooooooooooooooooooomething()\n" |
| 233 | " throws LoooooooooongException, LooooooooooongException {}"); |
Daniel Jasper | f26c755 | 2014-10-17 13:36:14 +0000 | [diff] [blame] | 234 | } |
| 235 | |
Daniel Jasper | fab69ff | 2014-10-21 08:24:18 +0000 | [diff] [blame] | 236 | TEST_F(FormatTestJava, Annotations) { |
| 237 | verifyFormat("@Override\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 238 | "public String toString() {}"); |
Daniel Jasper | fab69ff | 2014-10-21 08:24:18 +0000 | [diff] [blame] | 239 | verifyFormat("@Override\n" |
| 240 | "@Nullable\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 241 | "public String getNameIfPresent() {}"); |
Daniel Jasper | 07013a4 | 2014-11-26 11:20:43 +0000 | [diff] [blame] | 242 | verifyFormat("@Override // comment\n" |
| 243 | "@Nullable\n" |
| 244 | "public String getNameIfPresent() {}"); |
Nico Weber | beb0393 | 2015-01-09 23:25:06 +0000 | [diff] [blame] | 245 | verifyFormat("@java.lang.Override // comment\n" |
| 246 | "@Nullable\n" |
| 247 | "public String getNameIfPresent() {}"); |
Daniel Jasper | f1f0c35 | 2014-10-21 09:25:39 +0000 | [diff] [blame] | 248 | |
| 249 | verifyFormat("@SuppressWarnings(value = \"unchecked\")\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 250 | "public void doSomething() {}"); |
Daniel Jasper | d78c422 | 2014-10-21 11:17:56 +0000 | [diff] [blame] | 251 | verifyFormat("@SuppressWarnings(value = \"unchecked\")\n" |
| 252 | "@Author(name = \"abc\")\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 253 | "public void doSomething() {}"); |
Daniel Jasper | f1f0c35 | 2014-10-21 09:25:39 +0000 | [diff] [blame] | 254 | |
Daniel Jasper | c7d024a | 2014-10-21 10:02:03 +0000 | [diff] [blame] | 255 | verifyFormat("DoSomething(new A() {\n" |
| 256 | " @Override\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 257 | " public String toString() {}\n" |
Daniel Jasper | c7d024a | 2014-10-21 10:02:03 +0000 | [diff] [blame] | 258 | "});"); |
| 259 | |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 260 | verifyFormat("void SomeFunction(@Nullable String something) {}"); |
Nico Weber | beb0393 | 2015-01-09 23:25:06 +0000 | [diff] [blame] | 261 | verifyFormat("void SomeFunction(@org.llvm.Nullable String something) {}"); |
Daniel Jasper | e9ab42d | 2014-10-31 18:23:49 +0000 | [diff] [blame] | 262 | |
Daniel Jasper | fab69ff | 2014-10-21 08:24:18 +0000 | [diff] [blame] | 263 | verifyFormat("@Partial @Mock DataLoader loader;"); |
Daniel Jasper | fd68191 | 2014-10-21 10:58:14 +0000 | [diff] [blame] | 264 | verifyFormat("@SuppressWarnings(value = \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\")\n" |
| 265 | "public static int iiiiiiiiiiiiiiiiiiiiiiii;"); |
Daniel Jasper | e9ab42d | 2014-10-31 18:23:49 +0000 | [diff] [blame] | 266 | |
| 267 | verifyFormat("@SomeAnnotation(\"With some really looooooooooooooong text\")\n" |
| 268 | "private static final long something = 0L;"); |
Nico Weber | beb0393 | 2015-01-09 23:25:06 +0000 | [diff] [blame] | 269 | verifyFormat("@org.llvm.Qualified(\"With some really looooooooooong text\")\n" |
| 270 | "private static final long something = 0L;"); |
Daniel Jasper | 211e132 | 2014-12-08 20:08:04 +0000 | [diff] [blame] | 271 | verifyFormat("@Mock\n" |
| 272 | "DataLoader loooooooooooooooooooooooader =\n" |
| 273 | " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;", |
| 274 | getStyleWithColumns(60)); |
Nico Weber | beb0393 | 2015-01-09 23:25:06 +0000 | [diff] [blame] | 275 | verifyFormat("@org.llvm.QualifiedMock\n" |
| 276 | "DataLoader loooooooooooooooooooooooader =\n" |
| 277 | " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;", |
| 278 | getStyleWithColumns(60)); |
Daniel Jasper | a831c58 | 2015-01-14 09:47:57 +0000 | [diff] [blame] | 279 | verifyFormat("@Test(a)\n" |
| 280 | "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa =\n" |
| 281 | " aaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaa);"); |
Daniel Jasper | 3e1bd14 | 2015-01-14 09:51:32 +0000 | [diff] [blame] | 282 | verifyFormat("@SomeAnnotation(\n" |
| 283 | " aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa)\n" |
| 284 | "int i;", |
| 285 | getStyleWithColumns(50)); |
Daniel Jasper | 404658a | 2015-01-14 10:00:20 +0000 | [diff] [blame^] | 286 | verifyFormat("@Test\n" |
| 287 | "ReturnType doSomething(\n" |
| 288 | " String aaaaaaaaaaaaa, String bbbbbbbbbbbbbbb) {}", |
| 289 | getStyleWithColumns(60)); |
Daniel Jasper | fab69ff | 2014-10-21 08:24:18 +0000 | [diff] [blame] | 290 | } |
| 291 | |
Daniel Jasper | 16b107e | 2014-10-21 09:57:09 +0000 | [diff] [blame] | 292 | TEST_F(FormatTestJava, Generics) { |
| 293 | verifyFormat("Iterable<?> a;"); |
| 294 | verifyFormat("Iterable<?> a;"); |
| 295 | verifyFormat("Iterable<? extends SomeObject> a;"); |
Daniel Jasper | 5ffcb7f | 2014-10-21 11:13:31 +0000 | [diff] [blame] | 296 | |
| 297 | verifyFormat("A.<B>doSomething();"); |
Daniel Jasper | 7bd618f | 2014-11-02 21:52:57 +0000 | [diff] [blame] | 298 | |
| 299 | verifyFormat("@Override\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 300 | "public Map<String, ?> getAll() {}"); |
Daniel Jasper | db9a7a2 | 2014-11-03 02:35:14 +0000 | [diff] [blame] | 301 | |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 302 | verifyFormat("public <R> ArrayList<R> get() {}"); |
| 303 | verifyFormat("protected <R> ArrayList<R> get() {}"); |
| 304 | verifyFormat("private <R> ArrayList<R> get() {}"); |
| 305 | verifyFormat("public static <R> ArrayList<R> get() {}"); |
Nico Weber | ed50166 | 2015-01-13 22:32:50 +0000 | [diff] [blame] | 306 | verifyFormat("public static native <R> ArrayList<R> get();"); |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 307 | verifyFormat("public final <X> Foo foo() {}"); |
Daniel Jasper | 82c9275 | 2014-11-21 12:19:07 +0000 | [diff] [blame] | 308 | verifyFormat("public abstract <X> Foo foo();"); |
Daniel Jasper | f056f45 | 2014-11-03 02:45:58 +0000 | [diff] [blame] | 309 | verifyFormat("<T extends B> T getInstance(Class<T> type);"); |
Daniel Jasper | 61d8197 | 2014-11-14 08:22:46 +0000 | [diff] [blame] | 310 | verifyFormat("Function<F, ? extends T> function;"); |
Daniel Jasper | 6761b42 | 2014-11-18 23:48:01 +0000 | [diff] [blame] | 311 | |
| 312 | verifyFormat("private Foo<X, Y>[] foos;"); |
| 313 | verifyFormat("Foo<X, Y>[] foos = this.foos;"); |
Daniel Jasper | 77ef2be | 2015-01-05 10:33:39 +0000 | [diff] [blame] | 314 | verifyFormat("return (a instanceof List<?>)\n" |
| 315 | " ? aaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaa)\n" |
| 316 | " : aaaaaaaaaaaaaaaaaaaaaaa;", |
| 317 | getStyleWithColumns(60)); |
Daniel Jasper | caf8685 | 2014-11-20 09:48:11 +0000 | [diff] [blame] | 318 | |
| 319 | verifyFormat( |
| 320 | "SomeLoooooooooooooooooooooongType name =\n" |
| 321 | " SomeType.foo(someArgument)\n" |
| 322 | " .<X>method()\n" |
| 323 | " .aaaaaaaaaaaaaaaaaaa()\n" |
| 324 | " .aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa();"); |
Daniel Jasper | 16b107e | 2014-10-21 09:57:09 +0000 | [diff] [blame] | 325 | } |
| 326 | |
Daniel Jasper | c012686 | 2014-10-21 11:34:53 +0000 | [diff] [blame] | 327 | TEST_F(FormatTestJava, StringConcatenation) { |
| 328 | verifyFormat("String someString = \"abc\"\n" |
Daniel Jasper | 3219e43 | 2014-12-02 13:24:51 +0000 | [diff] [blame] | 329 | " + \"cde\";"); |
Daniel Jasper | c012686 | 2014-10-21 11:34:53 +0000 | [diff] [blame] | 330 | } |
| 331 | |
Daniel Jasper | a3ddf86 | 2014-11-02 19:21:48 +0000 | [diff] [blame] | 332 | TEST_F(FormatTestJava, TryCatchFinally) { |
| 333 | verifyFormat("try {\n" |
| 334 | " Something();\n" |
| 335 | "} catch (SomeException e) {\n" |
| 336 | " HandleException(e);\n" |
| 337 | "}"); |
| 338 | verifyFormat("try {\n" |
| 339 | " Something();\n" |
| 340 | "} finally {\n" |
| 341 | " AlwaysDoThis();\n" |
| 342 | "}"); |
| 343 | verifyFormat("try {\n" |
| 344 | " Something();\n" |
| 345 | "} catch (SomeException e) {\n" |
| 346 | " HandleException(e);\n" |
| 347 | "} finally {\n" |
| 348 | " AlwaysDoThis();\n" |
| 349 | "}"); |
| 350 | |
| 351 | verifyFormat("try {\n" |
| 352 | " Something();\n" |
| 353 | "} catch (SomeException | OtherException e) {\n" |
| 354 | " HandleException(e);\n" |
| 355 | "}"); |
| 356 | } |
| 357 | |
Daniel Jasper | b9d3db6 | 2014-11-02 22:00:57 +0000 | [diff] [blame] | 358 | TEST_F(FormatTestJava, SynchronizedKeyword) { |
| 359 | verifyFormat("synchronized (mData) {\n" |
| 360 | " // ...\n" |
| 361 | "}"); |
| 362 | } |
| 363 | |
Daniel Jasper | 9b9e076 | 2014-11-26 18:03:42 +0000 | [diff] [blame] | 364 | TEST_F(FormatTestJava, PackageDeclarations) { |
| 365 | verifyFormat("package some.really.loooooooooooooooooooooong.package;", |
| 366 | getStyleWithColumns(50)); |
| 367 | } |
| 368 | |
Daniel Jasper | 5e7be1d | 2014-11-02 22:13:03 +0000 | [diff] [blame] | 369 | TEST_F(FormatTestJava, ImportDeclarations) { |
| 370 | verifyFormat("import some.really.loooooooooooooooooooooong.imported.Class;", |
| 371 | getStyleWithColumns(50)); |
| 372 | } |
| 373 | |
Daniel Jasper | 3aa9a6a | 2014-11-18 23:55:27 +0000 | [diff] [blame] | 374 | TEST_F(FormatTestJava, MethodDeclarations) { |
| 375 | verifyFormat("void methodName(Object arg1,\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 376 | " Object arg2, Object arg3) {}", |
Daniel Jasper | 3aa9a6a | 2014-11-18 23:55:27 +0000 | [diff] [blame] | 377 | getStyleWithColumns(40)); |
| 378 | verifyFormat("void methodName(\n" |
Daniel Jasper | 9e70935 | 2014-11-26 10:43:58 +0000 | [diff] [blame] | 379 | " Object arg1, Object arg2) {}", |
Daniel Jasper | 3aa9a6a | 2014-11-18 23:55:27 +0000 | [diff] [blame] | 380 | getStyleWithColumns(40)); |
| 381 | } |
| 382 | |
Daniel Jasper | fe2cf66 | 2014-11-19 14:11:11 +0000 | [diff] [blame] | 383 | TEST_F(FormatTestJava, CppKeywords) { |
| 384 | verifyFormat("public void union(Type a, Type b);"); |
| 385 | verifyFormat("public void struct(Object o);"); |
| 386 | verifyFormat("public void delete(Object o);"); |
| 387 | } |
| 388 | |
Daniel Jasper | 6cab678 | 2014-11-20 09:54:49 +0000 | [diff] [blame] | 389 | TEST_F(FormatTestJava, NeverAlignAfterReturn) { |
| 390 | verifyFormat("return aaaaaaaaaaaaaaaaaaa\n" |
| 391 | " && bbbbbbbbbbbbbbbbbbb\n" |
| 392 | " && ccccccccccccccccccc;", |
| 393 | getStyleWithColumns(40)); |
| 394 | verifyFormat("return (result == null)\n" |
| 395 | " ? aaaaaaaaaaaaaaaaa\n" |
| 396 | " : bbbbbbbbbbbbbbbbb;", |
| 397 | getStyleWithColumns(40)); |
| 398 | verifyFormat("return aaaaaaaaaaaaaaaaaaa()\n" |
| 399 | " .bbbbbbbbbbbbbbbbbbb()\n" |
| 400 | " .ccccccccccccccccccc();", |
| 401 | getStyleWithColumns(40)); |
Daniel Jasper | a536df4 | 2014-12-08 21:28:31 +0000 | [diff] [blame] | 402 | verifyFormat("return aaaaaaaaaaaaaaaaaaa()\n" |
| 403 | " .bbbbbbbbbbbbbbbbbbb(\n" |
| 404 | " ccccccccccccccc)\n" |
| 405 | " .ccccccccccccccccccc();", |
| 406 | getStyleWithColumns(40)); |
Daniel Jasper | 6cab678 | 2014-11-20 09:54:49 +0000 | [diff] [blame] | 407 | } |
| 408 | |
Daniel Jasper | 4b44449 | 2014-11-21 13:38:53 +0000 | [diff] [blame] | 409 | TEST_F(FormatTestJava, FormatsInnerBlocks) { |
| 410 | verifyFormat("someObject.someFunction(new Runnable() {\n" |
| 411 | " @Override\n" |
| 412 | " public void run() {\n" |
| 413 | " System.out.println(42);\n" |
| 414 | " }\n" |
| 415 | "}, someOtherParameter);"); |
Daniel Jasper | 5f1fa85 | 2015-01-04 20:40:51 +0000 | [diff] [blame] | 416 | verifyFormat("someFunction(new Runnable() {\n" |
| 417 | " public void run() {\n" |
| 418 | " System.out.println(42);\n" |
| 419 | " }\n" |
| 420 | "});"); |
Daniel Jasper | 4b44449 | 2014-11-21 13:38:53 +0000 | [diff] [blame] | 421 | verifyFormat("someObject.someFunction(\n" |
| 422 | " new Runnable() {\n" |
| 423 | " @Override\n" |
| 424 | " public void run() {\n" |
| 425 | " System.out.println(42);\n" |
| 426 | " }\n" |
| 427 | " },\n" |
| 428 | " new Runnable() {\n" |
| 429 | " @Override\n" |
| 430 | " public void run() {\n" |
| 431 | " System.out.println(43);\n" |
| 432 | " }\n" |
| 433 | " },\n" |
| 434 | " someOtherParameter);"); |
| 435 | } |
| 436 | |
Daniel Jasper | 8354ea8 | 2014-11-21 12:14:12 +0000 | [diff] [blame] | 437 | TEST_F(FormatTestJava, FormatsLambdas) { |
| 438 | verifyFormat("(aaaaaaaaaa, bbbbbbbbbb) -> aaaaaaaaaa + bbbbbbbbbb;"); |
| 439 | verifyFormat("(aaaaaaaaaa, bbbbbbbbbb)\n" |
| 440 | " -> aaaaaaaaaa + bbbbbbbbbb;", |
| 441 | getStyleWithColumns(40)); |
| 442 | verifyFormat("Runnable someLambda = () -> DoSomething();"); |
| 443 | verifyFormat("Runnable someLambda = () -> {\n" |
| 444 | " DoSomething();\n" |
| 445 | "}"); |
| 446 | |
| 447 | verifyFormat("Runnable someLambda =\n" |
| 448 | " (int aaaaa) -> DoSomething(aaaaa);", |
| 449 | getStyleWithColumns(40)); |
| 450 | } |
| 451 | |
Alexander Kornienko | ff2437f | 2014-12-12 13:03:22 +0000 | [diff] [blame] | 452 | TEST_F(FormatTestJava, BreaksStringLiterals) { |
| 453 | // FIXME: String literal breaking is currently disabled for Java and JS, as it |
| 454 | // requires strings to be merged using "+" which we don't support. |
| 455 | EXPECT_EQ("\"some text other\";", |
| 456 | format("\"some text other\";", getStyleWithColumns(14))); |
| 457 | } |
| 458 | |
Daniel Jasper | 428f0b1 | 2015-01-04 09:11:17 +0000 | [diff] [blame] | 459 | TEST_F(FormatTestJava, AlignsBlockComments) { |
| 460 | EXPECT_EQ("/*\n" |
| 461 | " * Really multi-line\n" |
| 462 | " * comment.\n" |
| 463 | " */\n" |
| 464 | "void f() {}", |
| 465 | format(" /*\n" |
| 466 | " * Really multi-line\n" |
| 467 | " * comment.\n" |
| 468 | " */\n" |
| 469 | " void f() {}")); |
| 470 | } |
| 471 | |
Daniel Jasper | c58c70e | 2014-09-15 11:21:46 +0000 | [diff] [blame] | 472 | } // end namespace tooling |
| 473 | } // end namespace clang |