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 878379107aSDaniel Jasper TEST_F(FormatTestJava, QualifiedNames) { 888379107aSDaniel Jasper verifyFormat("public some.package.Type someFunction( // comment\n" 898379107aSDaniel Jasper " int parameter) {}"); 908379107aSDaniel Jasper } 918379107aSDaniel Jasper 92e5d74867SDaniel Jasper TEST_F(FormatTestJava, ClassKeyword) { 93e5d74867SDaniel Jasper verifyFormat("SomeClass.class.getName();"); 94e5d74867SDaniel Jasper verifyFormat("Class c = SomeClass.class;"); 95e5d74867SDaniel Jasper } 96e5d74867SDaniel Jasper 97c58c70e2SDaniel Jasper TEST_F(FormatTestJava, ClassDeclarations) { 98c58c70e2SDaniel Jasper verifyFormat("public class SomeClass {\n" 99c58c70e2SDaniel Jasper " private int a;\n" 100c58c70e2SDaniel Jasper " private int b;\n" 101c58c70e2SDaniel Jasper "}"); 102c58c70e2SDaniel Jasper verifyFormat("public class A {\n" 103c58c70e2SDaniel Jasper " class B {\n" 104c58c70e2SDaniel Jasper " int i;\n" 105c58c70e2SDaniel Jasper " }\n" 106c58c70e2SDaniel Jasper " class C {\n" 107c58c70e2SDaniel Jasper " int j;\n" 108c58c70e2SDaniel Jasper " }\n" 109c58c70e2SDaniel Jasper "}"); 1104bf9d470SDaniel Jasper verifyFormat("public class A extends B.C {}"); 11150b4bd7cSDaniel Jasper 112734d52b5SDaniel Jasper verifyFormat("abstract class SomeClass\n" 113734d52b5SDaniel Jasper " extends SomeOtherClass implements SomeInterface {}", 114734d52b5SDaniel Jasper getStyleWithColumns(60)); 11550b4bd7cSDaniel Jasper verifyFormat("abstract class SomeClass extends SomeOtherClass\n" 116734d52b5SDaniel Jasper " implements SomeInterfaceeeeeeeeeeeee {}", 11750b4bd7cSDaniel Jasper getStyleWithColumns(60)); 11850b4bd7cSDaniel Jasper verifyFormat("abstract class SomeClass\n" 11950b4bd7cSDaniel Jasper " extends SomeOtherClass\n" 12050b4bd7cSDaniel Jasper " implements SomeInterface {}", 12150b4bd7cSDaniel Jasper getStyleWithColumns(40)); 12250b4bd7cSDaniel Jasper verifyFormat("abstract class SomeClass\n" 12350b4bd7cSDaniel Jasper " extends SomeOtherClass\n" 12450b4bd7cSDaniel Jasper " implements SomeInterface,\n" 12550b4bd7cSDaniel Jasper " AnotherInterface {}", 12650b4bd7cSDaniel Jasper getStyleWithColumns(40)); 127734d52b5SDaniel Jasper verifyFormat("abstract class SomeClass\n" 128734d52b5SDaniel Jasper " implements SomeInterface, AnotherInterface {}", 129734d52b5SDaniel Jasper getStyleWithColumns(60)); 13039af6cd5SDaniel Jasper verifyFormat("@SomeAnnotation()\n" 131734d52b5SDaniel Jasper "abstract class aaaaaaaaaaaa\n" 1329e709351SDaniel Jasper " extends bbbbbbbbbbbbbbb implements cccccccccccc {}", 13339af6cd5SDaniel Jasper getStyleWithColumns(76)); 13458fcf6dfSDaniel Jasper verifyFormat("@SomeAnnotation()\n" 135734d52b5SDaniel Jasper "abstract class aaaaaaaaa<a>\n" 1369e709351SDaniel Jasper " extends bbbbbbbbbbbb<b> implements cccccccccccc {}", 13758fcf6dfSDaniel Jasper getStyleWithColumns(76)); 138a644d7f3SNico Weber verifyFormat("interface SomeInterface<A> extends Foo, Bar {\n" 139a644d7f3SNico Weber " void doStuff(int theStuff);\n" 140a644d7f3SNico Weber " void doMoreStuff(int moreStuff);\n" 141a644d7f3SNico Weber "}"); 142a644d7f3SNico Weber verifyFormat("public interface SomeInterface {\n" 143a644d7f3SNico Weber " void doStuff(int theStuff);\n" 144a644d7f3SNico Weber " void doMoreStuff(int moreStuff);\n" 145a644d7f3SNico Weber "}"); 146a644d7f3SNico Weber verifyFormat("@interface SomeInterface {\n" 147a644d7f3SNico Weber " void doStuff(int theStuff);\n" 148a644d7f3SNico Weber " void doMoreStuff(int moreStuff);\n" 149a644d7f3SNico Weber "}"); 150a644d7f3SNico Weber verifyFormat("public @interface SomeInterface {\n" 151a644d7f3SNico Weber " void doStuff(int theStuff);\n" 152a644d7f3SNico Weber " void doMoreStuff(int moreStuff);\n" 153a644d7f3SNico Weber "}"); 154c58c70e2SDaniel Jasper } 155c58c70e2SDaniel Jasper 156df2ff002SDaniel Jasper TEST_F(FormatTestJava, EnumDeclarations) { 157df2ff002SDaniel Jasper verifyFormat("enum SomeThing { ABC, CDE }"); 158df2ff002SDaniel Jasper verifyFormat("enum SomeThing {\n" 159df2ff002SDaniel Jasper " ABC,\n" 160df2ff002SDaniel Jasper " CDE,\n" 161df2ff002SDaniel Jasper "}"); 162df2ff002SDaniel Jasper verifyFormat("public class SomeClass {\n" 163df2ff002SDaniel Jasper " enum SomeThing { ABC, CDE }\n" 1649e709351SDaniel Jasper " void f() {}\n" 165df2ff002SDaniel Jasper "}"); 1666be0f55dSDaniel Jasper verifyFormat("public class SomeClass implements SomeInterface {\n" 1676be0f55dSDaniel Jasper " enum SomeThing { ABC, CDE }\n" 1689e709351SDaniel Jasper " void f() {}\n" 1696be0f55dSDaniel Jasper "}"); 1706be0f55dSDaniel Jasper verifyFormat("enum SomeThing {\n" 1716be0f55dSDaniel Jasper " ABC,\n" 1726be0f55dSDaniel Jasper " CDE;\n" 1739e709351SDaniel Jasper " void f() {}\n" 1746be0f55dSDaniel Jasper "}"); 1756be0f55dSDaniel Jasper verifyFormat("enum SomeThing {\n" 1766be0f55dSDaniel Jasper " ABC(1, \"ABC\"),\n" 1776be0f55dSDaniel Jasper " CDE(2, \"CDE\");\n" 1789e709351SDaniel Jasper " Something(int i, String s) {}\n" 1796be0f55dSDaniel Jasper "}"); 1806be0f55dSDaniel Jasper verifyFormat("enum SomeThing {\n" 1816be0f55dSDaniel Jasper " ABC(new int[] {1, 2}),\n" 1826be0f55dSDaniel Jasper " CDE(new int[] {2, 3});\n" 1839e709351SDaniel Jasper " Something(int[] i) {}\n" 1846be0f55dSDaniel Jasper "}"); 1856be0f55dSDaniel Jasper verifyFormat("public enum SomeThing {\n" 1866be0f55dSDaniel Jasper " ABC {\n" 1876be0f55dSDaniel Jasper " public String toString() {\n" 1886be0f55dSDaniel Jasper " return \"ABC\";\n" 1896be0f55dSDaniel Jasper " }\n" 1906be0f55dSDaniel Jasper " },\n" 1916be0f55dSDaniel Jasper " CDE {\n" 1926be0f55dSDaniel Jasper " @Override\n" 1936be0f55dSDaniel Jasper " public String toString() {\n" 1946be0f55dSDaniel Jasper " return \"CDE\";\n" 1956be0f55dSDaniel Jasper " }\n" 1966be0f55dSDaniel Jasper " };\n" 1979e709351SDaniel Jasper " public void f() {}\n" 1986be0f55dSDaniel Jasper "}"); 199ccb68b48SDaniel Jasper verifyFormat("private enum SomeEnum implements Foo<?, B> {\n" 200ccb68b48SDaniel Jasper " ABC {\n" 201ccb68b48SDaniel Jasper " @Override\n" 202ccb68b48SDaniel Jasper " public String toString() {\n" 203ccb68b48SDaniel Jasper " return \"ABC\";\n" 204ccb68b48SDaniel Jasper " }\n" 205ccb68b48SDaniel Jasper " },\n" 206ccb68b48SDaniel Jasper " CDE {\n" 207ccb68b48SDaniel Jasper " @Override\n" 208ccb68b48SDaniel Jasper " public String toString() {\n" 209ccb68b48SDaniel Jasper " return \"CDE\";\n" 210ccb68b48SDaniel Jasper " }\n" 211ccb68b48SDaniel Jasper " };\n" 212ccb68b48SDaniel Jasper "}"); 213a0143fabSDaniel Jasper } 214a0143fabSDaniel Jasper 215a0143fabSDaniel Jasper TEST_F(FormatTestJava, ArrayInitializers) { 216a0143fabSDaniel Jasper verifyFormat("new int[] {1, 2, 3, 4};"); 217a0143fabSDaniel Jasper verifyFormat("new int[] {\n" 218a0143fabSDaniel Jasper " 1, 2, 3, 4,\n" 219a0143fabSDaniel Jasper "};"); 22013404dadSDaniel Jasper 22113404dadSDaniel Jasper FormatStyle Style = getStyleWithColumns(65); 22213404dadSDaniel Jasper Style.Cpp11BracedListStyle = false; 22313404dadSDaniel Jasper verifyFormat( 22413404dadSDaniel Jasper "expected = new int[] { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,\n" 22513404dadSDaniel Jasper " 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };", 22613404dadSDaniel Jasper Style); 227df2ff002SDaniel Jasper } 228df2ff002SDaniel Jasper 229f26c755dSDaniel Jasper TEST_F(FormatTestJava, ThrowsDeclarations) { 230f26c755dSDaniel Jasper verifyFormat("public void doSooooooooooooooooooooooooooomething()\n" 2319e709351SDaniel Jasper " throws LooooooooooooooooooooooooooooongException {}"); 232375815d2SDaniel Jasper verifyFormat("public void doSooooooooooooooooooooooooooomething()\n" 233375815d2SDaniel Jasper " throws LoooooooooongException, LooooooooooongException {}"); 234f26c755dSDaniel Jasper } 235f26c755dSDaniel Jasper 236fab69ff0SDaniel Jasper TEST_F(FormatTestJava, Annotations) { 237fab69ff0SDaniel Jasper verifyFormat("@Override\n" 2389e709351SDaniel Jasper "public String toString() {}"); 239fab69ff0SDaniel Jasper verifyFormat("@Override\n" 240fab69ff0SDaniel Jasper "@Nullable\n" 2419e709351SDaniel Jasper "public String getNameIfPresent() {}"); 24207013a42SDaniel Jasper verifyFormat("@Override // comment\n" 24307013a42SDaniel Jasper "@Nullable\n" 24407013a42SDaniel Jasper "public String getNameIfPresent() {}"); 245f1f0c356SDaniel Jasper 246f1f0c356SDaniel Jasper verifyFormat("@SuppressWarnings(value = \"unchecked\")\n" 2479e709351SDaniel Jasper "public void doSomething() {}"); 248d78c4223SDaniel Jasper verifyFormat("@SuppressWarnings(value = \"unchecked\")\n" 249d78c4223SDaniel Jasper "@Author(name = \"abc\")\n" 2509e709351SDaniel Jasper "public void doSomething() {}"); 251f1f0c356SDaniel Jasper 252c7d024acSDaniel Jasper verifyFormat("DoSomething(new A() {\n" 253c7d024acSDaniel Jasper " @Override\n" 2549e709351SDaniel Jasper " public String toString() {}\n" 255c7d024acSDaniel Jasper "});"); 256c7d024acSDaniel Jasper 2579e709351SDaniel Jasper verifyFormat("void SomeFunction(@Nullable String something) {}"); 258e9ab42dfSDaniel Jasper 259fab69ff0SDaniel Jasper verifyFormat("@Partial @Mock DataLoader loader;"); 260fd68191dSDaniel Jasper verifyFormat("@SuppressWarnings(value = \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\")\n" 261fd68191dSDaniel Jasper "public static int iiiiiiiiiiiiiiiiiiiiiiii;"); 262e9ab42dfSDaniel Jasper 263e9ab42dfSDaniel Jasper verifyFormat("@SomeAnnotation(\"With some really looooooooooooooong text\")\n" 264e9ab42dfSDaniel Jasper "private static final long something = 0L;"); 265211e1329SDaniel Jasper verifyFormat("@Mock\n" 266211e1329SDaniel Jasper "DataLoader loooooooooooooooooooooooader =\n" 267211e1329SDaniel Jasper " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;", 268211e1329SDaniel Jasper getStyleWithColumns(60)); 269fab69ff0SDaniel Jasper } 270fab69ff0SDaniel Jasper 27116b107e9SDaniel Jasper TEST_F(FormatTestJava, Generics) { 27216b107e9SDaniel Jasper verifyFormat("Iterable<?> a;"); 27316b107e9SDaniel Jasper verifyFormat("Iterable<?> a;"); 27416b107e9SDaniel Jasper verifyFormat("Iterable<? extends SomeObject> a;"); 2755ffcb7feSDaniel Jasper 2765ffcb7feSDaniel Jasper verifyFormat("A.<B>doSomething();"); 2777bd618f5SDaniel Jasper 2787bd618f5SDaniel Jasper verifyFormat("@Override\n" 2799e709351SDaniel Jasper "public Map<String, ?> getAll() {}"); 280db9a7a2fSDaniel Jasper 2819e709351SDaniel Jasper verifyFormat("public <R> ArrayList<R> get() {}"); 2829e709351SDaniel Jasper verifyFormat("protected <R> ArrayList<R> get() {}"); 2839e709351SDaniel Jasper verifyFormat("private <R> ArrayList<R> get() {}"); 2849e709351SDaniel Jasper verifyFormat("public static <R> ArrayList<R> get() {}"); 2859e709351SDaniel Jasper verifyFormat("public final <X> Foo foo() {}"); 28682c92753SDaniel Jasper verifyFormat("public abstract <X> Foo foo();"); 287f056f45bSDaniel Jasper verifyFormat("<T extends B> T getInstance(Class<T> type);"); 28861d81973SDaniel Jasper verifyFormat("Function<F, ? extends T> function;"); 2896761b42bSDaniel Jasper 2906761b42bSDaniel Jasper verifyFormat("private Foo<X, Y>[] foos;"); 2916761b42bSDaniel Jasper verifyFormat("Foo<X, Y>[] foos = this.foos;"); 292caf86859SDaniel Jasper 293caf86859SDaniel Jasper verifyFormat( 294caf86859SDaniel Jasper "SomeLoooooooooooooooooooooongType name =\n" 295caf86859SDaniel Jasper " SomeType.foo(someArgument)\n" 296caf86859SDaniel Jasper " .<X>method()\n" 297caf86859SDaniel Jasper " .aaaaaaaaaaaaaaaaaaa()\n" 298caf86859SDaniel Jasper " .aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa();"); 29916b107e9SDaniel Jasper } 30016b107e9SDaniel Jasper 301c0126864SDaniel Jasper TEST_F(FormatTestJava, StringConcatenation) { 302c0126864SDaniel Jasper verifyFormat("String someString = \"abc\"\n" 303c0126864SDaniel Jasper " + \"cde\";"); 304c0126864SDaniel Jasper } 305c0126864SDaniel Jasper 306a3ddf86dSDaniel Jasper TEST_F(FormatTestJava, TryCatchFinally) { 307a3ddf86dSDaniel Jasper verifyFormat("try {\n" 308a3ddf86dSDaniel Jasper " Something();\n" 309a3ddf86dSDaniel Jasper "} catch (SomeException e) {\n" 310a3ddf86dSDaniel Jasper " HandleException(e);\n" 311a3ddf86dSDaniel Jasper "}"); 312a3ddf86dSDaniel Jasper verifyFormat("try {\n" 313a3ddf86dSDaniel Jasper " Something();\n" 314a3ddf86dSDaniel Jasper "} finally {\n" 315a3ddf86dSDaniel Jasper " AlwaysDoThis();\n" 316a3ddf86dSDaniel Jasper "}"); 317a3ddf86dSDaniel Jasper verifyFormat("try {\n" 318a3ddf86dSDaniel Jasper " Something();\n" 319a3ddf86dSDaniel Jasper "} catch (SomeException e) {\n" 320a3ddf86dSDaniel Jasper " HandleException(e);\n" 321a3ddf86dSDaniel Jasper "} finally {\n" 322a3ddf86dSDaniel Jasper " AlwaysDoThis();\n" 323a3ddf86dSDaniel Jasper "}"); 324a3ddf86dSDaniel Jasper 325a3ddf86dSDaniel Jasper verifyFormat("try {\n" 326a3ddf86dSDaniel Jasper " Something();\n" 327a3ddf86dSDaniel Jasper "} catch (SomeException | OtherException e) {\n" 328a3ddf86dSDaniel Jasper " HandleException(e);\n" 329a3ddf86dSDaniel Jasper "}"); 330a3ddf86dSDaniel Jasper } 331a3ddf86dSDaniel Jasper 332b9d3db6bSDaniel Jasper TEST_F(FormatTestJava, SynchronizedKeyword) { 333b9d3db6bSDaniel Jasper verifyFormat("synchronized (mData) {\n" 334b9d3db6bSDaniel Jasper " // ...\n" 335b9d3db6bSDaniel Jasper "}"); 336b9d3db6bSDaniel Jasper } 337b9d3db6bSDaniel Jasper 3389b9e0760SDaniel Jasper TEST_F(FormatTestJava, PackageDeclarations) { 3399b9e0760SDaniel Jasper verifyFormat("package some.really.loooooooooooooooooooooong.package;", 3409b9e0760SDaniel Jasper getStyleWithColumns(50)); 3419b9e0760SDaniel Jasper } 3429b9e0760SDaniel Jasper 3435e7be1d5SDaniel Jasper TEST_F(FormatTestJava, ImportDeclarations) { 3445e7be1d5SDaniel Jasper verifyFormat("import some.really.loooooooooooooooooooooong.imported.Class;", 3455e7be1d5SDaniel Jasper getStyleWithColumns(50)); 3465e7be1d5SDaniel Jasper } 3475e7be1d5SDaniel Jasper 3483aa9a6a1SDaniel Jasper TEST_F(FormatTestJava, MethodDeclarations) { 3493aa9a6a1SDaniel Jasper verifyFormat("void methodName(Object arg1,\n" 3509e709351SDaniel Jasper " Object arg2, Object arg3) {}", 3513aa9a6a1SDaniel Jasper getStyleWithColumns(40)); 3523aa9a6a1SDaniel Jasper verifyFormat("void methodName(\n" 3539e709351SDaniel Jasper " Object arg1, Object arg2) {}", 3543aa9a6a1SDaniel Jasper getStyleWithColumns(40)); 3553aa9a6a1SDaniel Jasper } 3563aa9a6a1SDaniel Jasper 357fe2cf667SDaniel Jasper TEST_F(FormatTestJava, CppKeywords) { 358fe2cf667SDaniel Jasper verifyFormat("public void union(Type a, Type b);"); 359fe2cf667SDaniel Jasper verifyFormat("public void struct(Object o);"); 360fe2cf667SDaniel Jasper verifyFormat("public void delete(Object o);"); 361fe2cf667SDaniel Jasper } 362fe2cf667SDaniel Jasper 3636cab6784SDaniel Jasper TEST_F(FormatTestJava, NeverAlignAfterReturn) { 3646cab6784SDaniel Jasper verifyFormat("return aaaaaaaaaaaaaaaaaaa\n" 3656cab6784SDaniel Jasper " && bbbbbbbbbbbbbbbbbbb\n" 3666cab6784SDaniel Jasper " && ccccccccccccccccccc;", 3676cab6784SDaniel Jasper getStyleWithColumns(40)); 3686cab6784SDaniel Jasper verifyFormat("return (result == null)\n" 3696cab6784SDaniel Jasper " ? aaaaaaaaaaaaaaaaa\n" 3706cab6784SDaniel Jasper " : bbbbbbbbbbbbbbbbb;", 3716cab6784SDaniel Jasper getStyleWithColumns(40)); 3726cab6784SDaniel Jasper verifyFormat("return aaaaaaaaaaaaaaaaaaa()\n" 3736cab6784SDaniel Jasper " .bbbbbbbbbbbbbbbbbbb()\n" 3746cab6784SDaniel Jasper " .ccccccccccccccccccc();", 3756cab6784SDaniel Jasper getStyleWithColumns(40)); 376a536df4bSDaniel Jasper verifyFormat("return aaaaaaaaaaaaaaaaaaa()\n" 377a536df4bSDaniel Jasper " .bbbbbbbbbbbbbbbbbbb(\n" 378a536df4bSDaniel Jasper " ccccccccccccccc)\n" 379a536df4bSDaniel Jasper " .ccccccccccccccccccc();", 380a536df4bSDaniel Jasper getStyleWithColumns(40)); 3816cab6784SDaniel Jasper } 3826cab6784SDaniel Jasper 3834b444495SDaniel Jasper TEST_F(FormatTestJava, FormatsInnerBlocks) { 3844b444495SDaniel Jasper verifyFormat("someObject.someFunction(new Runnable() {\n" 3854b444495SDaniel Jasper " @Override\n" 3864b444495SDaniel Jasper " public void run() {\n" 3874b444495SDaniel Jasper " System.out.println(42);\n" 3884b444495SDaniel Jasper " }\n" 3894b444495SDaniel Jasper "}, someOtherParameter);"); 3904b444495SDaniel Jasper verifyFormat("someObject.someFunction(\n" 3914b444495SDaniel Jasper " new Runnable() {\n" 3924b444495SDaniel Jasper " @Override\n" 3934b444495SDaniel Jasper " public void run() {\n" 3944b444495SDaniel Jasper " System.out.println(42);\n" 3954b444495SDaniel Jasper " }\n" 3964b444495SDaniel Jasper " },\n" 3974b444495SDaniel Jasper " new Runnable() {\n" 3984b444495SDaniel Jasper " @Override\n" 3994b444495SDaniel Jasper " public void run() {\n" 4004b444495SDaniel Jasper " System.out.println(43);\n" 4014b444495SDaniel Jasper " }\n" 4024b444495SDaniel Jasper " },\n" 4034b444495SDaniel Jasper " someOtherParameter);"); 4044b444495SDaniel Jasper } 4054b444495SDaniel Jasper 4068354ea84SDaniel Jasper TEST_F(FormatTestJava, FormatsLambdas) { 4078354ea84SDaniel Jasper verifyFormat("(aaaaaaaaaa, bbbbbbbbbb) -> aaaaaaaaaa + bbbbbbbbbb;"); 4088354ea84SDaniel Jasper verifyFormat("(aaaaaaaaaa, bbbbbbbbbb)\n" 4098354ea84SDaniel Jasper " -> aaaaaaaaaa + bbbbbbbbbb;", 4108354ea84SDaniel Jasper getStyleWithColumns(40)); 4118354ea84SDaniel Jasper verifyFormat("Runnable someLambda = () -> DoSomething();"); 4128354ea84SDaniel Jasper verifyFormat("Runnable someLambda = () -> {\n" 4138354ea84SDaniel Jasper " DoSomething();\n" 4148354ea84SDaniel Jasper "}"); 4158354ea84SDaniel Jasper 4168354ea84SDaniel Jasper verifyFormat("Runnable someLambda =\n" 4178354ea84SDaniel Jasper " (int aaaaa) -> DoSomething(aaaaa);", 4188354ea84SDaniel Jasper getStyleWithColumns(40)); 4198354ea84SDaniel Jasper } 4208354ea84SDaniel Jasper 421*ff2437feSAlexander Kornienko TEST_F(FormatTestJava, BreaksStringLiterals) { 422*ff2437feSAlexander Kornienko // FIXME: String literal breaking is currently disabled for Java and JS, as it 423*ff2437feSAlexander Kornienko // requires strings to be merged using "+" which we don't support. 424*ff2437feSAlexander Kornienko EXPECT_EQ("\"some text other\";", 425*ff2437feSAlexander Kornienko format("\"some text other\";", getStyleWithColumns(14))); 426*ff2437feSAlexander Kornienko } 427*ff2437feSAlexander Kornienko 428c58c70e2SDaniel Jasper } // end namespace tooling 429c58c70e2SDaniel Jasper } // end namespace clang 430