1054dc28aSJordan Rupprecht //===- unittest/Format/FormatTestTableGen.cpp -----------------------------===//
2054dc28aSJordan Rupprecht //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6054dc28aSJordan Rupprecht //
7054dc28aSJordan Rupprecht //===----------------------------------------------------------------------===//
8054dc28aSJordan Rupprecht 
9054dc28aSJordan Rupprecht #include "FormatTestUtils.h"
10054dc28aSJordan Rupprecht #include "clang/Format/Format.h"
11054dc28aSJordan Rupprecht #include "llvm/Support/Debug.h"
12054dc28aSJordan Rupprecht #include "gtest/gtest.h"
13054dc28aSJordan Rupprecht 
14054dc28aSJordan Rupprecht #define DEBUG_TYPE "format-test"
15054dc28aSJordan Rupprecht 
16054dc28aSJordan Rupprecht namespace clang {
17054dc28aSJordan Rupprecht namespace format {
18054dc28aSJordan Rupprecht 
19054dc28aSJordan Rupprecht class FormatTestTableGen : public ::testing::Test {
20054dc28aSJordan Rupprecht protected:
format(llvm::StringRef Code,unsigned Offset,unsigned Length,const FormatStyle & Style)21054dc28aSJordan Rupprecht   static std::string format(llvm::StringRef Code, unsigned Offset,
22054dc28aSJordan Rupprecht                             unsigned Length, const FormatStyle &Style) {
23054dc28aSJordan Rupprecht     LLVM_DEBUG(llvm::errs() << "---\n");
24054dc28aSJordan Rupprecht     LLVM_DEBUG(llvm::errs() << Code << "\n\n");
25054dc28aSJordan Rupprecht     std::vector<tooling::Range> Ranges(1, tooling::Range(Offset, Length));
26054dc28aSJordan Rupprecht     tooling::Replacements Replaces = reformat(Style, Code, Ranges);
27054dc28aSJordan Rupprecht     auto Result = applyAllReplacements(Code, Replaces);
28054dc28aSJordan Rupprecht     EXPECT_TRUE(static_cast<bool>(Result));
29054dc28aSJordan Rupprecht     LLVM_DEBUG(llvm::errs() << "\n" << *Result << "\n\n");
30054dc28aSJordan Rupprecht     return *Result;
31054dc28aSJordan Rupprecht   }
32054dc28aSJordan Rupprecht 
format(llvm::StringRef Code)33054dc28aSJordan Rupprecht   static std::string format(llvm::StringRef Code) {
34054dc28aSJordan Rupprecht     FormatStyle Style = getGoogleStyle(FormatStyle::LK_TableGen);
35054dc28aSJordan Rupprecht     Style.ColumnLimit = 60; // To make writing tests easier.
36054dc28aSJordan Rupprecht     return format(Code, 0, Code.size(), Style);
37054dc28aSJordan Rupprecht   }
38054dc28aSJordan Rupprecht 
verifyFormat(llvm::StringRef Code)39054dc28aSJordan Rupprecht   static void verifyFormat(llvm::StringRef Code) {
40054dc28aSJordan Rupprecht     EXPECT_EQ(Code.str(), format(Code)) << "Expected code is not stable";
41054dc28aSJordan Rupprecht     EXPECT_EQ(Code.str(), format(test::messUp(Code)));
42054dc28aSJordan Rupprecht   }
43054dc28aSJordan Rupprecht };
44054dc28aSJordan Rupprecht 
TEST_F(FormatTestTableGen,FormatStringBreak)45054dc28aSJordan Rupprecht TEST_F(FormatTestTableGen, FormatStringBreak) {
46054dc28aSJordan Rupprecht   verifyFormat("include \"OptParser.td\"\n"
47054dc28aSJordan Rupprecht                "def flag : Flag<\"--foo\">,\n"
48054dc28aSJordan Rupprecht                "           HelpText<\n"
49054dc28aSJordan Rupprecht                "               \"This is a very, very, very, very, \"\n"
50054dc28aSJordan Rupprecht                "               \"very, very, very, very, very, very, \"\n"
51054dc28aSJordan Rupprecht                "               \"very long help string\">;\n");
52054dc28aSJordan Rupprecht }
53054dc28aSJordan Rupprecht 
TEST_F(FormatTestTableGen,NoSpacesInSquareBracketLists)54*7f514164SJordan Rupprecht TEST_F(FormatTestTableGen, NoSpacesInSquareBracketLists) {
55*7f514164SJordan Rupprecht   verifyFormat("def flag : Flag<[\"-\", \"--\"], \"foo\">;\n");
56*7f514164SJordan Rupprecht }
57*7f514164SJordan Rupprecht 
58054dc28aSJordan Rupprecht } // namespace format
59054dc28aSJordan Rupprecht } // end namespace clang
60