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 40c58c70e2SDaniel Jasper static void verifyFormat( 41c58c70e2SDaniel Jasper llvm::StringRef Code, 42c58c70e2SDaniel Jasper const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_Java)) { 43c58c70e2SDaniel Jasper EXPECT_EQ(Code.str(), format(test::messUp(Code), Style)); 44c58c70e2SDaniel Jasper } 45c58c70e2SDaniel Jasper }; 46c58c70e2SDaniel Jasper 47c58c70e2SDaniel Jasper TEST_F(FormatTestJava, ClassDeclarations) { 48c58c70e2SDaniel Jasper verifyFormat("public class SomeClass {\n" 49c58c70e2SDaniel Jasper " private int a;\n" 50c58c70e2SDaniel Jasper " private int b;\n" 51c58c70e2SDaniel Jasper "}"); 52c58c70e2SDaniel Jasper verifyFormat("public class A {\n" 53c58c70e2SDaniel Jasper " class B {\n" 54c58c70e2SDaniel Jasper " int i;\n" 55c58c70e2SDaniel Jasper " }\n" 56c58c70e2SDaniel Jasper " class C {\n" 57c58c70e2SDaniel Jasper " int j;\n" 58c58c70e2SDaniel Jasper " }\n" 59c58c70e2SDaniel Jasper "}"); 604bf9d470SDaniel Jasper verifyFormat("public class A extends B.C {}"); 61c58c70e2SDaniel Jasper } 62c58c70e2SDaniel Jasper 63f26c755dSDaniel Jasper TEST_F(FormatTestJava, ThrowsDeclarations) { 64f26c755dSDaniel Jasper verifyFormat("public void doSooooooooooooooooooooooooooomething()\n" 65f26c755dSDaniel Jasper " throws LooooooooooooooooooooooooooooongException {}"); 66f26c755dSDaniel Jasper } 67f26c755dSDaniel Jasper 68fab69ff0SDaniel Jasper TEST_F(FormatTestJava, Annotations) { 69fab69ff0SDaniel Jasper verifyFormat("@Override\n" 70fab69ff0SDaniel Jasper "public String toString() {\n}"); 71fab69ff0SDaniel Jasper verifyFormat("@Override\n" 72fab69ff0SDaniel Jasper "@Nullable\n" 73fab69ff0SDaniel Jasper "public String getNameIfPresent() {\n}"); 74f1f0c356SDaniel Jasper 75f1f0c356SDaniel Jasper verifyFormat("@SuppressWarnings(value = \"unchecked\")\n" 76f1f0c356SDaniel Jasper "public void doSomething() {\n}"); 77f1f0c356SDaniel Jasper 78c7d024acSDaniel Jasper verifyFormat("DoSomething(new A() {\n" 79c7d024acSDaniel Jasper " @Override\n" 80c7d024acSDaniel Jasper " public String toString() {\n" 81c7d024acSDaniel Jasper " }\n" 82c7d024acSDaniel Jasper "});"); 83c7d024acSDaniel Jasper 84fab69ff0SDaniel Jasper verifyFormat("@Partial @Mock DataLoader loader;"); 85fd68191dSDaniel Jasper verifyFormat("@SuppressWarnings(value = \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\")\n" 86fd68191dSDaniel Jasper "public static int iiiiiiiiiiiiiiiiiiiiiiii;"); 87fab69ff0SDaniel Jasper } 88fab69ff0SDaniel Jasper 8916b107e9SDaniel Jasper TEST_F(FormatTestJava, Generics) { 9016b107e9SDaniel Jasper verifyFormat("Iterable<?> a;"); 9116b107e9SDaniel Jasper verifyFormat("Iterable<?> a;"); 9216b107e9SDaniel Jasper verifyFormat("Iterable<? extends SomeObject> a;"); 93*5ffcb7feSDaniel Jasper 94*5ffcb7feSDaniel Jasper verifyFormat("A.<B>doSomething();"); 9516b107e9SDaniel Jasper } 9616b107e9SDaniel Jasper 97c58c70e2SDaniel Jasper } // end namespace tooling 98c58c70e2SDaniel Jasper } // end namespace clang 99