[LLVM] Fix Maintainers.md formatting (NFC)
[llvm-project.git] / mlir / unittests / Support / IndentedOstreamTest.cpp
blobdf1edb7c03b13839782e4aa6d8499e970863ee12
1 //===- IndentedOstreamTest.cpp - Indented raw ostream Tests ---------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 #include "mlir/Support/IndentedOstream.h"
10 #include "gmock/gmock.h"
12 using namespace mlir;
13 using ::testing::StrEq;
15 TEST(FormatTest, SingleLine) {
16 std::string str;
17 llvm::raw_string_ostream os(str);
18 raw_indented_ostream ros(os);
19 ros << 10;
20 EXPECT_THAT(str, StrEq("10"));
23 TEST(FormatTest, SimpleMultiLine) {
24 std::string str;
25 llvm::raw_string_ostream os(str);
26 raw_indented_ostream ros(os);
27 ros << "a";
28 ros << "b";
29 ros << "\n";
30 ros << "c";
31 ros << "\n";
32 EXPECT_THAT(str, StrEq("ab\nc\n"));
35 TEST(FormatTest, SimpleMultiLineIndent) {
36 std::string str;
37 llvm::raw_string_ostream os(str);
38 raw_indented_ostream ros(os);
39 ros.indent(2) << "a";
40 ros.indent(4) << "b";
41 ros << "\n";
42 ros << "c";
43 ros << "\n";
44 EXPECT_THAT(str, StrEq(" a b\n c\n"));
47 TEST(FormatTest, SingleRegion) {
48 std::string str;
49 llvm::raw_string_ostream os(str);
50 raw_indented_ostream ros(os);
51 ros << "before\n";
53 raw_indented_ostream::DelimitedScope scope(ros);
54 ros << "inside " << 10;
55 ros << "\n two\n";
57 raw_indented_ostream::DelimitedScope scope(ros, "{\n", "\n}\n");
58 ros << "inner inner";
61 ros << "after";
62 const auto *expected =
63 R"(before
64 inside 10
65 two
67 inner inner
69 after)";
70 EXPECT_THAT(str, StrEq(expected));
72 // Repeat the above with inline form.
73 str.clear();
74 ros << "before\n";
75 ros.scope().os << "inside " << 10 << "\n two\n";
76 ros.scope().os.scope("{\n", "\n}\n").os << "inner inner";
77 ros << "after";
78 EXPECT_THAT(os.str(), StrEq(expected));
81 TEST(FormatTest, Reindent) {
82 std::string str;
83 llvm::raw_string_ostream os(str);
84 raw_indented_ostream ros(os);
86 // String to print with some additional empty lines at the start and lines
87 // with just spaces.
88 const auto *desc = R"(
91 First line
92 second line
95 )";
96 ros.printReindented(desc);
97 const auto *expected =
98 R"(First line
99 second line
103 EXPECT_THAT(str, StrEq(expected));
106 TEST(FormatTest, ReindentLineEndings) {
107 std::string str;
108 llvm::raw_string_ostream os(str);
109 raw_indented_ostream ros(os);
111 // Similar string as the previous test, but with \r\n (Windows style) line
112 // breaks. Note that C++'s internal string representation uses \n, so just
113 // running the previous test as-is on Windows is not sufficient.
114 const auto *desc =
115 "\r\n\r\n\r\n First line\r\n second line";
116 ros.printReindented(desc);
117 const auto *expected = "First line\r\n second line";
118 EXPECT_THAT(str, StrEq(expected));