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 {}"); 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 78 verifyFormat("@Partial @Mock DataLoader loader;"); 79 } 80 81 TEST_F(FormatTestJava, Generics) { 82 verifyFormat("Iterable<?> a;"); 83 verifyFormat("Iterable<?> a;"); 84 verifyFormat("Iterable<? extends SomeObject> a;"); 85 } 86 87 } // end namespace tooling 88 } // end namespace clang 89