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 "}"); 60c58c70e2SDaniel Jasper } 61c58c70e2SDaniel Jasper 62*f26c755dSDaniel Jasper TEST_F(FormatTestJava, ThrowsDeclarations) { 63*f26c755dSDaniel Jasper verifyFormat("public void doSooooooooooooooooooooooooooomething()\n" 64*f26c755dSDaniel Jasper " throws LooooooooooooooooooooooooooooongException {}"); 65*f26c755dSDaniel Jasper } 66*f26c755dSDaniel Jasper 67c58c70e2SDaniel Jasper } // end namespace tooling 68c58c70e2SDaniel Jasper } // end namespace clang 69