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 40 static void verifyFormat( 41 llvm::StringRef Code, 42 const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_Java)) { 43 EXPECT_EQ(Code.str(), format(test::messUp(Code), Style)); 44 } 45 }; 46 47 TEST_F(FormatTestJava, ClassDeclarations) { 48 verifyFormat("public class SomeClass {\n" 49 " private int a;\n" 50 " private int b;\n" 51 "}"); 52 verifyFormat("public class A {\n" 53 " class B {\n" 54 " int i;\n" 55 " }\n" 56 " class C {\n" 57 " int j;\n" 58 " }\n" 59 "}"); 60 verifyFormat("public class A extends B.C {}"); 61 } 62 63 TEST_F(FormatTestJava, ThrowsDeclarations) { 64 verifyFormat("public void doSooooooooooooooooooooooooooomething()\n" 65 " throws LooooooooooooooooooooooooooooongException {\n}"); 66 } 67 68 TEST_F(FormatTestJava, Annotations) { 69 verifyFormat("@Override\n" 70 "public String toString() {\n}"); 71 verifyFormat("@Override\n" 72 "@Nullable\n" 73 "public String getNameIfPresent() {\n}"); 74 75 verifyFormat("@SuppressWarnings(value = \"unchecked\")\n" 76 "public void doSomething() {\n}"); 77 verifyFormat("@SuppressWarnings(value = \"unchecked\")\n" 78 "@Author(name = \"abc\")\n" 79 "public void doSomething() {\n}"); 80 81 verifyFormat("DoSomething(new A() {\n" 82 " @Override\n" 83 " public String toString() {\n" 84 " }\n" 85 "});"); 86 87 verifyFormat("void SomeFunction(@Nullable String something) {\n" 88 "}"); 89 90 verifyFormat("@Partial @Mock DataLoader loader;"); 91 verifyFormat("@SuppressWarnings(value = \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\")\n" 92 "public static int iiiiiiiiiiiiiiiiiiiiiiii;"); 93 94 verifyFormat("@SomeAnnotation(\"With some really looooooooooooooong text\")\n" 95 "private static final long something = 0L;"); 96 } 97 98 TEST_F(FormatTestJava, Generics) { 99 verifyFormat("Iterable<?> a;"); 100 verifyFormat("Iterable<?> a;"); 101 verifyFormat("Iterable<? extends SomeObject> a;"); 102 103 verifyFormat("A.<B>doSomething();"); 104 } 105 106 TEST_F(FormatTestJava, StringConcatenation) { 107 verifyFormat("String someString = \"abc\"\n" 108 " + \"cde\";"); 109 } 110 111 } // end namespace tooling 112 } // end namespace clang 113