1c58c70e2SDaniel Jasper //===- unittest/Format/FormatTestJava.cpp - Formatting tests for Java -----===//
2c58c70e2SDaniel Jasper //
3c58c70e2SDaniel Jasper //                     The LLVM Compiler Infrastructure
4c58c70e2SDaniel Jasper //
5c58c70e2SDaniel Jasper // This file is distributed under the University of Illinois Open Source
6c58c70e2SDaniel Jasper // License. See LICENSE.TXT for details.
7c58c70e2SDaniel Jasper //
8c58c70e2SDaniel Jasper //===----------------------------------------------------------------------===//
9c58c70e2SDaniel Jasper 
10c58c70e2SDaniel Jasper #include "FormatTestUtils.h"
11c58c70e2SDaniel Jasper #include "clang/Format/Format.h"
12c58c70e2SDaniel Jasper #include "llvm/Support/Debug.h"
13c58c70e2SDaniel Jasper #include "gtest/gtest.h"
14c58c70e2SDaniel Jasper 
15c58c70e2SDaniel Jasper #define DEBUG_TYPE "format-test"
16c58c70e2SDaniel Jasper 
17c58c70e2SDaniel Jasper namespace clang {
18c58c70e2SDaniel Jasper namespace format {
19c58c70e2SDaniel Jasper 
20c58c70e2SDaniel Jasper class FormatTestJava : public ::testing::Test {
21c58c70e2SDaniel Jasper protected:
22c58c70e2SDaniel Jasper   static std::string format(llvm::StringRef Code, unsigned Offset,
23c58c70e2SDaniel Jasper                             unsigned Length, const FormatStyle &Style) {
24c58c70e2SDaniel Jasper     DEBUG(llvm::errs() << "---\n");
25c58c70e2SDaniel Jasper     DEBUG(llvm::errs() << Code << "\n\n");
26c58c70e2SDaniel Jasper     std::vector<tooling::Range> Ranges(1, tooling::Range(Offset, Length));
27c58c70e2SDaniel Jasper     tooling::Replacements Replaces = reformat(Style, Code, Ranges);
28c58c70e2SDaniel Jasper     std::string Result = applyAllReplacements(Code, Replaces);
29c58c70e2SDaniel Jasper     EXPECT_NE("", Result);
30c58c70e2SDaniel Jasper     DEBUG(llvm::errs() << "\n" << Result << "\n\n");
31c58c70e2SDaniel Jasper     return Result;
32c58c70e2SDaniel Jasper   }
33c58c70e2SDaniel Jasper 
34c58c70e2SDaniel Jasper   static std::string format(
35c58c70e2SDaniel Jasper       llvm::StringRef Code,
36c58c70e2SDaniel Jasper       const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_Java)) {
37c58c70e2SDaniel Jasper     return format(Code, 0, Code.size(), Style);
38c58c70e2SDaniel Jasper   }
39c58c70e2SDaniel Jasper 
4050b4bd7cSDaniel Jasper   static FormatStyle getStyleWithColumns(unsigned ColumnLimit) {
4150b4bd7cSDaniel Jasper     FormatStyle Style = getGoogleStyle(FormatStyle::LK_Java);
4250b4bd7cSDaniel Jasper     Style.ColumnLimit = ColumnLimit;
4350b4bd7cSDaniel Jasper     return Style;
4450b4bd7cSDaniel Jasper   }
4550b4bd7cSDaniel Jasper 
46c58c70e2SDaniel Jasper   static void verifyFormat(
47c58c70e2SDaniel Jasper       llvm::StringRef Code,
48c58c70e2SDaniel Jasper       const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_Java)) {
49c58c70e2SDaniel Jasper     EXPECT_EQ(Code.str(), format(test::messUp(Code), Style));
50c58c70e2SDaniel Jasper   }
51c58c70e2SDaniel Jasper };
52c58c70e2SDaniel Jasper 
5330a2406eSDaniel Jasper TEST_F(FormatTestJava, NoAlternativeOperatorNames) {
5430a2406eSDaniel Jasper   verifyFormat("someObject.and();");
5530a2406eSDaniel Jasper }
5630a2406eSDaniel Jasper 
574f56b0bbSDaniel Jasper TEST_F(FormatTestJava, UnderstandsCasts) {
584f56b0bbSDaniel Jasper   verifyFormat("a[b >> 1] = (byte) (c() << 4);");
594f56b0bbSDaniel Jasper }
604f56b0bbSDaniel Jasper 
61a98b7b01SDaniel Jasper TEST_F(FormatTestJava, FormatsInstanceOfLikeOperators) {
62a98b7b01SDaniel Jasper   FormatStyle Style = getStyleWithColumns(50);
63a98b7b01SDaniel Jasper   verifyFormat("return aaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
64a98b7b01SDaniel Jasper                "    instanceof bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;",
65a98b7b01SDaniel Jasper                Style);
66a98b7b01SDaniel Jasper   Style.BreakBeforeBinaryOperators = FormatStyle::BOS_None;
67a98b7b01SDaniel Jasper   verifyFormat("return aaaaaaaaaaaaaaaaaaaaaaaaaaaaa instanceof\n"
68a98b7b01SDaniel Jasper                "    bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;",
69a98b7b01SDaniel Jasper                Style);
70a98b7b01SDaniel Jasper }
71a98b7b01SDaniel Jasper 
72450425c9SNico Weber TEST_F(FormatTestJava, Chromium) {
73450425c9SNico Weber   verifyFormat("class SomeClass {\n"
74450425c9SNico Weber                "    void f() {}\n"
75450425c9SNico Weber                "    int g() {\n"
76450425c9SNico Weber                "        return 0;\n"
77450425c9SNico Weber                "    }\n"
78450425c9SNico Weber                "    void h() {\n"
79450425c9SNico Weber                "        while (true) f();\n"
80450425c9SNico Weber                "        for (;;) f();\n"
81450425c9SNico Weber                "        if (true) f();\n"
82450425c9SNico Weber                "    }\n"
83450425c9SNico Weber                "}",
84450425c9SNico Weber                getChromiumStyle(FormatStyle::LK_Java));
85450425c9SNico Weber }
86450425c9SNico Weber 
87e5d74867SDaniel Jasper TEST_F(FormatTestJava, ClassKeyword) {
88e5d74867SDaniel Jasper   verifyFormat("SomeClass.class.getName();");
89e5d74867SDaniel Jasper   verifyFormat("Class c = SomeClass.class;");
90e5d74867SDaniel Jasper }
91e5d74867SDaniel Jasper 
92c58c70e2SDaniel Jasper TEST_F(FormatTestJava, ClassDeclarations) {
93c58c70e2SDaniel Jasper   verifyFormat("public class SomeClass {\n"
94c58c70e2SDaniel Jasper                "  private int a;\n"
95c58c70e2SDaniel Jasper                "  private int b;\n"
96c58c70e2SDaniel Jasper                "}");
97c58c70e2SDaniel Jasper   verifyFormat("public class A {\n"
98c58c70e2SDaniel Jasper                "  class B {\n"
99c58c70e2SDaniel Jasper                "    int i;\n"
100c58c70e2SDaniel Jasper                "  }\n"
101c58c70e2SDaniel Jasper                "  class C {\n"
102c58c70e2SDaniel Jasper                "    int j;\n"
103c58c70e2SDaniel Jasper                "  }\n"
104c58c70e2SDaniel Jasper                "}");
1054bf9d470SDaniel Jasper   verifyFormat("public class A extends B.C {}");
10650b4bd7cSDaniel Jasper 
107734d52b5SDaniel Jasper   verifyFormat("abstract class SomeClass\n"
108734d52b5SDaniel Jasper                "    extends SomeOtherClass implements SomeInterface {}",
109734d52b5SDaniel Jasper                getStyleWithColumns(60));
11050b4bd7cSDaniel Jasper   verifyFormat("abstract class SomeClass extends SomeOtherClass\n"
111734d52b5SDaniel Jasper                "    implements SomeInterfaceeeeeeeeeeeee {}",
11250b4bd7cSDaniel Jasper                getStyleWithColumns(60));
11350b4bd7cSDaniel Jasper   verifyFormat("abstract class SomeClass\n"
11450b4bd7cSDaniel Jasper                "    extends SomeOtherClass\n"
11550b4bd7cSDaniel Jasper                "    implements SomeInterface {}",
11650b4bd7cSDaniel Jasper                getStyleWithColumns(40));
11750b4bd7cSDaniel Jasper   verifyFormat("abstract class SomeClass\n"
11850b4bd7cSDaniel Jasper                "    extends SomeOtherClass\n"
11950b4bd7cSDaniel Jasper                "    implements SomeInterface,\n"
12050b4bd7cSDaniel Jasper                "               AnotherInterface {}",
12150b4bd7cSDaniel Jasper                getStyleWithColumns(40));
122734d52b5SDaniel Jasper   verifyFormat("abstract class SomeClass\n"
123734d52b5SDaniel Jasper                "    implements SomeInterface, AnotherInterface {}",
124734d52b5SDaniel Jasper                getStyleWithColumns(60));
12539af6cd5SDaniel Jasper   verifyFormat("@SomeAnnotation()\n"
126734d52b5SDaniel Jasper                "abstract class aaaaaaaaaaaa\n"
1279e709351SDaniel Jasper                "    extends bbbbbbbbbbbbbbb implements cccccccccccc {}",
12839af6cd5SDaniel Jasper                getStyleWithColumns(76));
12958fcf6dfSDaniel Jasper   verifyFormat("@SomeAnnotation()\n"
130734d52b5SDaniel Jasper                "abstract class aaaaaaaaa<a>\n"
1319e709351SDaniel Jasper                "    extends bbbbbbbbbbbb<b> implements cccccccccccc {}",
13258fcf6dfSDaniel Jasper                getStyleWithColumns(76));
133a644d7f3SNico Weber   verifyFormat("interface SomeInterface<A> extends Foo, Bar {\n"
134a644d7f3SNico Weber                "  void doStuff(int theStuff);\n"
135a644d7f3SNico Weber                "  void doMoreStuff(int moreStuff);\n"
136a644d7f3SNico Weber                "}");
137a644d7f3SNico Weber   verifyFormat("public interface SomeInterface {\n"
138a644d7f3SNico Weber                "  void doStuff(int theStuff);\n"
139a644d7f3SNico Weber                "  void doMoreStuff(int moreStuff);\n"
140a644d7f3SNico Weber                "}");
141a644d7f3SNico Weber   verifyFormat("@interface SomeInterface {\n"
142a644d7f3SNico Weber                "  void doStuff(int theStuff);\n"
143a644d7f3SNico Weber                "  void doMoreStuff(int moreStuff);\n"
144a644d7f3SNico Weber                "}");
145a644d7f3SNico Weber   verifyFormat("public @interface SomeInterface {\n"
146a644d7f3SNico Weber                "  void doStuff(int theStuff);\n"
147a644d7f3SNico Weber                "  void doMoreStuff(int moreStuff);\n"
148a644d7f3SNico Weber                "}");
149c58c70e2SDaniel Jasper }
150c58c70e2SDaniel Jasper 
151df2ff002SDaniel Jasper TEST_F(FormatTestJava, EnumDeclarations) {
152df2ff002SDaniel Jasper   verifyFormat("enum SomeThing { ABC, CDE }");
153df2ff002SDaniel Jasper   verifyFormat("enum SomeThing {\n"
154df2ff002SDaniel Jasper                "  ABC,\n"
155df2ff002SDaniel Jasper                "  CDE,\n"
156df2ff002SDaniel Jasper                "}");
157df2ff002SDaniel Jasper   verifyFormat("public class SomeClass {\n"
158df2ff002SDaniel Jasper                "  enum SomeThing { ABC, CDE }\n"
1599e709351SDaniel Jasper                "  void f() {}\n"
160df2ff002SDaniel Jasper                "}");
1616be0f55dSDaniel Jasper   verifyFormat("public class SomeClass implements SomeInterface {\n"
1626be0f55dSDaniel Jasper                "  enum SomeThing { ABC, CDE }\n"
1639e709351SDaniel Jasper                "  void f() {}\n"
1646be0f55dSDaniel Jasper                "}");
1656be0f55dSDaniel Jasper   verifyFormat("enum SomeThing {\n"
1666be0f55dSDaniel Jasper                "  ABC,\n"
1676be0f55dSDaniel Jasper                "  CDE;\n"
1689e709351SDaniel Jasper                "  void f() {}\n"
1696be0f55dSDaniel Jasper                "}");
1706be0f55dSDaniel Jasper   verifyFormat("enum SomeThing {\n"
1716be0f55dSDaniel Jasper                "  ABC(1, \"ABC\"),\n"
1726be0f55dSDaniel Jasper                "  CDE(2, \"CDE\");\n"
1739e709351SDaniel Jasper                "  Something(int i, String s) {}\n"
1746be0f55dSDaniel Jasper                "}");
1756be0f55dSDaniel Jasper   verifyFormat("enum SomeThing {\n"
1766be0f55dSDaniel Jasper                "  ABC(new int[] {1, 2}),\n"
1776be0f55dSDaniel Jasper                "  CDE(new int[] {2, 3});\n"
1789e709351SDaniel Jasper                "  Something(int[] i) {}\n"
1796be0f55dSDaniel Jasper                "}");
1806be0f55dSDaniel Jasper   verifyFormat("public enum SomeThing {\n"
1816be0f55dSDaniel Jasper                "  ABC {\n"
1826be0f55dSDaniel Jasper                "    public String toString() {\n"
1836be0f55dSDaniel Jasper                "      return \"ABC\";\n"
1846be0f55dSDaniel Jasper                "    }\n"
1856be0f55dSDaniel Jasper                "  },\n"
1866be0f55dSDaniel Jasper                "  CDE {\n"
1876be0f55dSDaniel Jasper                "    @Override\n"
1886be0f55dSDaniel Jasper                "    public String toString() {\n"
1896be0f55dSDaniel Jasper                "      return \"CDE\";\n"
1906be0f55dSDaniel Jasper                "    }\n"
1916be0f55dSDaniel Jasper                "  };\n"
1929e709351SDaniel Jasper                "  public void f() {}\n"
1936be0f55dSDaniel Jasper                "}");
194ccb68b48SDaniel Jasper   verifyFormat("private enum SomeEnum implements Foo<?, B> {\n"
195ccb68b48SDaniel Jasper                "  ABC {\n"
196ccb68b48SDaniel Jasper                "    @Override\n"
197ccb68b48SDaniel Jasper                "    public String toString() {\n"
198ccb68b48SDaniel Jasper                "      return \"ABC\";\n"
199ccb68b48SDaniel Jasper                "    }\n"
200ccb68b48SDaniel Jasper                "  },\n"
201ccb68b48SDaniel Jasper                "  CDE {\n"
202ccb68b48SDaniel Jasper                "    @Override\n"
203ccb68b48SDaniel Jasper                "    public String toString() {\n"
204ccb68b48SDaniel Jasper                "      return \"CDE\";\n"
205ccb68b48SDaniel Jasper                "    }\n"
206ccb68b48SDaniel Jasper                "  };\n"
207ccb68b48SDaniel Jasper                "}");
208a0143fabSDaniel Jasper }
209a0143fabSDaniel Jasper 
210a0143fabSDaniel Jasper TEST_F(FormatTestJava, ArrayInitializers) {
211a0143fabSDaniel Jasper   verifyFormat("new int[] {1, 2, 3, 4};");
212a0143fabSDaniel Jasper   verifyFormat("new int[] {\n"
213a0143fabSDaniel Jasper                "    1, 2, 3, 4,\n"
214a0143fabSDaniel Jasper                "};");
215*13404dadSDaniel Jasper 
216*13404dadSDaniel Jasper   FormatStyle Style = getStyleWithColumns(65);
217*13404dadSDaniel Jasper   Style.Cpp11BracedListStyle = false;
218*13404dadSDaniel Jasper   verifyFormat(
219*13404dadSDaniel Jasper       "expected = new int[] { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,\n"
220*13404dadSDaniel Jasper       "  100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };",
221*13404dadSDaniel Jasper       Style);
222df2ff002SDaniel Jasper }
223df2ff002SDaniel Jasper 
224f26c755dSDaniel Jasper TEST_F(FormatTestJava, ThrowsDeclarations) {
225f26c755dSDaniel Jasper   verifyFormat("public void doSooooooooooooooooooooooooooomething()\n"
2269e709351SDaniel Jasper                "    throws LooooooooooooooooooooooooooooongException {}");
227375815d2SDaniel Jasper   verifyFormat("public void doSooooooooooooooooooooooooooomething()\n"
228375815d2SDaniel Jasper                "    throws LoooooooooongException, LooooooooooongException {}");
229f26c755dSDaniel Jasper }
230f26c755dSDaniel Jasper 
231fab69ff0SDaniel Jasper TEST_F(FormatTestJava, Annotations) {
232fab69ff0SDaniel Jasper   verifyFormat("@Override\n"
2339e709351SDaniel Jasper                "public String toString() {}");
234fab69ff0SDaniel Jasper   verifyFormat("@Override\n"
235fab69ff0SDaniel Jasper                "@Nullable\n"
2369e709351SDaniel Jasper                "public String getNameIfPresent() {}");
23707013a42SDaniel Jasper   verifyFormat("@Override // comment\n"
23807013a42SDaniel Jasper                "@Nullable\n"
23907013a42SDaniel Jasper                "public String getNameIfPresent() {}");
240f1f0c356SDaniel Jasper 
241f1f0c356SDaniel Jasper   verifyFormat("@SuppressWarnings(value = \"unchecked\")\n"
2429e709351SDaniel Jasper                "public void doSomething() {}");
243d78c4223SDaniel Jasper   verifyFormat("@SuppressWarnings(value = \"unchecked\")\n"
244d78c4223SDaniel Jasper                "@Author(name = \"abc\")\n"
2459e709351SDaniel Jasper                "public void doSomething() {}");
246f1f0c356SDaniel Jasper 
247c7d024acSDaniel Jasper   verifyFormat("DoSomething(new A() {\n"
248c7d024acSDaniel Jasper                "  @Override\n"
2499e709351SDaniel Jasper                "  public String toString() {}\n"
250c7d024acSDaniel Jasper                "});");
251c7d024acSDaniel Jasper 
2529e709351SDaniel Jasper   verifyFormat("void SomeFunction(@Nullable String something) {}");
253e9ab42dfSDaniel Jasper 
254fab69ff0SDaniel Jasper   verifyFormat("@Partial @Mock DataLoader loader;");
255fd68191dSDaniel Jasper   verifyFormat("@SuppressWarnings(value = \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\")\n"
256fd68191dSDaniel Jasper                "public static int iiiiiiiiiiiiiiiiiiiiiiii;");
257e9ab42dfSDaniel Jasper 
258e9ab42dfSDaniel Jasper   verifyFormat("@SomeAnnotation(\"With some really looooooooooooooong text\")\n"
259e9ab42dfSDaniel Jasper                "private static final long something = 0L;");
260fab69ff0SDaniel Jasper }
261fab69ff0SDaniel Jasper 
26216b107e9SDaniel Jasper TEST_F(FormatTestJava, Generics) {
26316b107e9SDaniel Jasper   verifyFormat("Iterable<?> a;");
26416b107e9SDaniel Jasper   verifyFormat("Iterable<?> a;");
26516b107e9SDaniel Jasper   verifyFormat("Iterable<? extends SomeObject> a;");
2665ffcb7feSDaniel Jasper 
2675ffcb7feSDaniel Jasper   verifyFormat("A.<B>doSomething();");
2687bd618f5SDaniel Jasper 
2697bd618f5SDaniel Jasper   verifyFormat("@Override\n"
2709e709351SDaniel Jasper                "public Map<String, ?> getAll() {}");
271db9a7a2fSDaniel Jasper 
2729e709351SDaniel Jasper   verifyFormat("public <R> ArrayList<R> get() {}");
2739e709351SDaniel Jasper   verifyFormat("protected <R> ArrayList<R> get() {}");
2749e709351SDaniel Jasper   verifyFormat("private <R> ArrayList<R> get() {}");
2759e709351SDaniel Jasper   verifyFormat("public static <R> ArrayList<R> get() {}");
2769e709351SDaniel Jasper   verifyFormat("public final <X> Foo foo() {}");
27782c92753SDaniel Jasper   verifyFormat("public abstract <X> Foo foo();");
278f056f45bSDaniel Jasper   verifyFormat("<T extends B> T getInstance(Class<T> type);");
27961d81973SDaniel Jasper   verifyFormat("Function<F, ? extends T> function;");
2806761b42bSDaniel Jasper 
2816761b42bSDaniel Jasper   verifyFormat("private Foo<X, Y>[] foos;");
2826761b42bSDaniel Jasper   verifyFormat("Foo<X, Y>[] foos = this.foos;");
283caf86859SDaniel Jasper 
284caf86859SDaniel Jasper   verifyFormat(
285caf86859SDaniel Jasper       "SomeLoooooooooooooooooooooongType name =\n"
286caf86859SDaniel Jasper       "    SomeType.foo(someArgument)\n"
287caf86859SDaniel Jasper       "        .<X>method()\n"
288caf86859SDaniel Jasper       "        .aaaaaaaaaaaaaaaaaaa()\n"
289caf86859SDaniel Jasper       "        .aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa();");
29016b107e9SDaniel Jasper }
29116b107e9SDaniel Jasper 
292c0126864SDaniel Jasper TEST_F(FormatTestJava, StringConcatenation) {
293c0126864SDaniel Jasper   verifyFormat("String someString = \"abc\"\n"
294c0126864SDaniel Jasper                "                    + \"cde\";");
295c0126864SDaniel Jasper }
296c0126864SDaniel Jasper 
297a3ddf86dSDaniel Jasper TEST_F(FormatTestJava, TryCatchFinally) {
298a3ddf86dSDaniel Jasper   verifyFormat("try {\n"
299a3ddf86dSDaniel Jasper                "  Something();\n"
300a3ddf86dSDaniel Jasper                "} catch (SomeException e) {\n"
301a3ddf86dSDaniel Jasper                "  HandleException(e);\n"
302a3ddf86dSDaniel Jasper                "}");
303a3ddf86dSDaniel Jasper   verifyFormat("try {\n"
304a3ddf86dSDaniel Jasper                "  Something();\n"
305a3ddf86dSDaniel Jasper                "} finally {\n"
306a3ddf86dSDaniel Jasper                "  AlwaysDoThis();\n"
307a3ddf86dSDaniel Jasper                "}");
308a3ddf86dSDaniel Jasper   verifyFormat("try {\n"
309a3ddf86dSDaniel Jasper                "  Something();\n"
310a3ddf86dSDaniel Jasper                "} catch (SomeException e) {\n"
311a3ddf86dSDaniel Jasper                "  HandleException(e);\n"
312a3ddf86dSDaniel Jasper                "} finally {\n"
313a3ddf86dSDaniel Jasper                "  AlwaysDoThis();\n"
314a3ddf86dSDaniel Jasper                "}");
315a3ddf86dSDaniel Jasper 
316a3ddf86dSDaniel Jasper   verifyFormat("try {\n"
317a3ddf86dSDaniel Jasper                "  Something();\n"
318a3ddf86dSDaniel Jasper                "} catch (SomeException | OtherException e) {\n"
319a3ddf86dSDaniel Jasper                "  HandleException(e);\n"
320a3ddf86dSDaniel Jasper                "}");
321a3ddf86dSDaniel Jasper }
322a3ddf86dSDaniel Jasper 
323b9d3db6bSDaniel Jasper TEST_F(FormatTestJava, SynchronizedKeyword) {
324b9d3db6bSDaniel Jasper   verifyFormat("synchronized (mData) {\n"
325b9d3db6bSDaniel Jasper                "  // ...\n"
326b9d3db6bSDaniel Jasper                "}");
327b9d3db6bSDaniel Jasper }
328b9d3db6bSDaniel Jasper 
3299b9e0760SDaniel Jasper TEST_F(FormatTestJava, PackageDeclarations) {
3309b9e0760SDaniel Jasper   verifyFormat("package some.really.loooooooooooooooooooooong.package;",
3319b9e0760SDaniel Jasper                getStyleWithColumns(50));
3329b9e0760SDaniel Jasper }
3339b9e0760SDaniel Jasper 
3345e7be1d5SDaniel Jasper TEST_F(FormatTestJava, ImportDeclarations) {
3355e7be1d5SDaniel Jasper   verifyFormat("import some.really.loooooooooooooooooooooong.imported.Class;",
3365e7be1d5SDaniel Jasper                getStyleWithColumns(50));
3375e7be1d5SDaniel Jasper }
3385e7be1d5SDaniel Jasper 
3393aa9a6a1SDaniel Jasper TEST_F(FormatTestJava, MethodDeclarations) {
3403aa9a6a1SDaniel Jasper   verifyFormat("void methodName(Object arg1,\n"
3419e709351SDaniel Jasper                "    Object arg2, Object arg3) {}",
3423aa9a6a1SDaniel Jasper                getStyleWithColumns(40));
3433aa9a6a1SDaniel Jasper   verifyFormat("void methodName(\n"
3449e709351SDaniel Jasper                "    Object arg1, Object arg2) {}",
3453aa9a6a1SDaniel Jasper                getStyleWithColumns(40));
3463aa9a6a1SDaniel Jasper }
3473aa9a6a1SDaniel Jasper 
348fe2cf667SDaniel Jasper TEST_F(FormatTestJava, CppKeywords) {
349fe2cf667SDaniel Jasper   verifyFormat("public void union(Type a, Type b);");
350fe2cf667SDaniel Jasper   verifyFormat("public void struct(Object o);");
351fe2cf667SDaniel Jasper   verifyFormat("public void delete(Object o);");
352fe2cf667SDaniel Jasper }
353fe2cf667SDaniel Jasper 
3546cab6784SDaniel Jasper TEST_F(FormatTestJava, NeverAlignAfterReturn) {
3556cab6784SDaniel Jasper   verifyFormat("return aaaaaaaaaaaaaaaaaaa\n"
3566cab6784SDaniel Jasper                "    && bbbbbbbbbbbbbbbbbbb\n"
3576cab6784SDaniel Jasper                "    && ccccccccccccccccccc;",
3586cab6784SDaniel Jasper                getStyleWithColumns(40));
3596cab6784SDaniel Jasper   verifyFormat("return (result == null)\n"
3606cab6784SDaniel Jasper                "    ? aaaaaaaaaaaaaaaaa\n"
3616cab6784SDaniel Jasper                "    : bbbbbbbbbbbbbbbbb;",
3626cab6784SDaniel Jasper                getStyleWithColumns(40));
3636cab6784SDaniel Jasper   verifyFormat("return aaaaaaaaaaaaaaaaaaa()\n"
3646cab6784SDaniel Jasper                "    .bbbbbbbbbbbbbbbbbbb()\n"
3656cab6784SDaniel Jasper                "    .ccccccccccccccccccc();",
3666cab6784SDaniel Jasper                getStyleWithColumns(40));
3676cab6784SDaniel Jasper }
3686cab6784SDaniel Jasper 
3694b444495SDaniel Jasper TEST_F(FormatTestJava, FormatsInnerBlocks) {
3704b444495SDaniel Jasper   verifyFormat("someObject.someFunction(new Runnable() {\n"
3714b444495SDaniel Jasper                "  @Override\n"
3724b444495SDaniel Jasper                "  public void run() {\n"
3734b444495SDaniel Jasper                "    System.out.println(42);\n"
3744b444495SDaniel Jasper                "  }\n"
3754b444495SDaniel Jasper                "}, someOtherParameter);");
3764b444495SDaniel Jasper   verifyFormat("someObject.someFunction(\n"
3774b444495SDaniel Jasper                "    new Runnable() {\n"
3784b444495SDaniel Jasper                "      @Override\n"
3794b444495SDaniel Jasper                "      public void run() {\n"
3804b444495SDaniel Jasper                "        System.out.println(42);\n"
3814b444495SDaniel Jasper                "      }\n"
3824b444495SDaniel Jasper                "    },\n"
3834b444495SDaniel Jasper                "    new Runnable() {\n"
3844b444495SDaniel Jasper                "      @Override\n"
3854b444495SDaniel Jasper                "      public void run() {\n"
3864b444495SDaniel Jasper                "        System.out.println(43);\n"
3874b444495SDaniel Jasper                "      }\n"
3884b444495SDaniel Jasper                "    },\n"
3894b444495SDaniel Jasper                "    someOtherParameter);");
3904b444495SDaniel Jasper }
3914b444495SDaniel Jasper 
3928354ea84SDaniel Jasper TEST_F(FormatTestJava, FormatsLambdas) {
3938354ea84SDaniel Jasper   verifyFormat("(aaaaaaaaaa, bbbbbbbbbb) -> aaaaaaaaaa + bbbbbbbbbb;");
3948354ea84SDaniel Jasper   verifyFormat("(aaaaaaaaaa, bbbbbbbbbb)\n"
3958354ea84SDaniel Jasper                "    -> aaaaaaaaaa + bbbbbbbbbb;",
3968354ea84SDaniel Jasper                getStyleWithColumns(40));
3978354ea84SDaniel Jasper   verifyFormat("Runnable someLambda = () -> DoSomething();");
3988354ea84SDaniel Jasper   verifyFormat("Runnable someLambda = () -> {\n"
3998354ea84SDaniel Jasper                "  DoSomething();\n"
4008354ea84SDaniel Jasper                "}");
4018354ea84SDaniel Jasper 
4028354ea84SDaniel Jasper   verifyFormat("Runnable someLambda =\n"
4038354ea84SDaniel Jasper                "    (int aaaaa) -> DoSomething(aaaaa);",
4048354ea84SDaniel Jasper                getStyleWithColumns(40));
4058354ea84SDaniel Jasper }
4068354ea84SDaniel Jasper 
407c58c70e2SDaniel Jasper } // end namespace tooling
408c58c70e2SDaniel Jasper } // end namespace clang
409