FormatTestProto.cpp revision 651f13cea278ec967336033dd032faef0e9fc2ec
1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//===- unittest/Format/FormatTestProto.cpp --------------------------------===// 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// The LLVM Compiler Infrastructure 4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// This file is distributed under the University of Illinois Open Source 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// License. See LICENSE.TXT for details. 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//===----------------------------------------------------------------------===// 9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#define DEBUG_TYPE "format-test" 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "FormatTestUtils.h" 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/Format/Format.h" 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "llvm/Support/Debug.h" 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "gtest/gtest.h" 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace clang { 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace format { 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass FormatTestProto : public ::testing::Test { 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesprotected: 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static std::string format(llvm::StringRef Code, unsigned Offset, 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned Length, const FormatStyle &Style) { 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines DEBUG(llvm::errs() << "---\n"); 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines DEBUG(llvm::errs() << Code << "\n\n"); 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines std::vector<tooling::Range> Ranges(1, tooling::Range(Offset, Length)); 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines tooling::Replacements Replaces = reformat(Style, Code, Ranges); 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines std::string Result = applyAllReplacements(Code, Replaces); 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines EXPECT_NE("", Result); 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines DEBUG(llvm::errs() << "\n" << Result << "\n\n"); 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return Result; 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static std::string format(llvm::StringRef Code) { 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines FormatStyle Style = getGoogleStyle(FormatStyle::LK_Proto); 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Style.ColumnLimit = 60; // To make writing tests easier. 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return format(Code, 0, Code.size(), Style); 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static void verifyFormat(llvm::StringRef Code) { 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines EXPECT_EQ(Code.str(), format(test::messUp(Code))); 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 45651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, FormatsMessages) { 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("message SomeMessage {\n" 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " required int32 field1 = 1;\n" 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "}"); 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("message SomeMessage {\n" 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " required int32 field1 = 1;\n" 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " optional string field2 = 2 [default = \"2\"]\n" 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "}"); 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("message SomeMessage {\n" 55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " optional really.really.long.and.qualified.type.aaaaaaa\n" 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " fiiiiiiiiiiiiiiiiiiiiiiiiield = 1;\n" 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " optional\n" 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " really.really.long.and.qualified.type.aaaaaaa.aaaaaaaa\n" 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " another_fiiiiiiiiiiiiiiiiiiiiield = 2;\n" 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "}"); 61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 63651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, FormatsEnums) { 64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("enum Type {\n" 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " UNKNOWN = 0;\n" 66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " TYPE_A = 1;\n" 67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " TYPE_B = 2;\n" 68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "};"); 69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 71651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, UnderstandsReturns) { 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("rpc Search(SearchRequest) returns (SearchResponse);"); 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 75651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, MessageFieldAttributes) { 76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("optional string test = 1 [default = \"test\"];"); 77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("optional bool a = 1 [default = true, deprecated = true];"); 78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("optional LongMessageType long_proto_field = 1\n" 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " [default = REALLY_REALLY_LONG_CONSTANT_VALUE,\n" 80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " deprecated = true];"); 81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("optional LongMessageType long_proto_field = 1\n" 82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " [default = REALLY_REALLY_LONG_CONSTANT_VALUE];"); 83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("repeated double value = 1\n" 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " [(aaaaaaa.aaaaaaaaa) = {aaaaaaaaaaaaaaaaa : AAAAAAAA}];"); 85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("repeated double value = 1\n" 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " [(aaaaaaa.aaaaaaaaa) = {aaaaaaaaaaaaaaaa : AAAAAAAAAA,\n" 87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " bbbbbbbbbbbbbbbb : BBBBBBBBBB}];"); 88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 90651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, FormatsOptions) { 91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("option java_package = \"my.test.package\";"); 92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("option (my_custom_option) = \"abc\";"); 93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} // end namespace tooling 96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} // end namespace clang 97