| //===- IndentedOstreamTest.cpp - Indented raw ostream Tests ---------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "mlir/Support/IndentedOstream.h" |
| #include "gmock/gmock.h" |
| |
| using namespace mlir; |
| using ::testing::StrEq; |
| |
| TEST(FormatTest, SingleLine) { |
| std::string str; |
| llvm::raw_string_ostream os(str); |
| raw_indented_ostream ros(os); |
| ros << 10; |
| ros.flush(); |
| EXPECT_THAT(os.str(), StrEq("10")); |
| } |
| |
| TEST(FormatTest, SimpleMultiLine) { |
| std::string str; |
| llvm::raw_string_ostream os(str); |
| raw_indented_ostream ros(os); |
| ros << "a"; |
| ros << "b"; |
| ros << "\n"; |
| ros << "c"; |
| ros << "\n"; |
| ros.flush(); |
| EXPECT_THAT(os.str(), StrEq("ab\nc\n")); |
| } |
| |
| TEST(FormatTest, SimpleMultiLineIndent) { |
| std::string str; |
| llvm::raw_string_ostream os(str); |
| raw_indented_ostream ros(os); |
| ros.indent(2) << "a"; |
| ros.indent(4) << "b"; |
| ros << "\n"; |
| ros << "c"; |
| ros << "\n"; |
| ros.flush(); |
| EXPECT_THAT(os.str(), StrEq(" a b\n c\n")); |
| } |
| |
| TEST(FormatTest, SingleRegion) { |
| std::string str; |
| llvm::raw_string_ostream os(str); |
| raw_indented_ostream ros(os); |
| ros << "before\n"; |
| { |
| raw_indented_ostream::DelimitedScope scope(ros); |
| ros << "inside " << 10; |
| ros << "\n two\n"; |
| { |
| raw_indented_ostream::DelimitedScope scope(ros, "{\n", "\n}\n"); |
| ros << "inner inner"; |
| } |
| } |
| ros << "after"; |
| ros.flush(); |
| const auto *expected = |
| R"(before |
| inside 10 |
| two |
| { |
| inner inner |
| } |
| after)"; |
| EXPECT_THAT(os.str(), StrEq(expected)); |
| |
| // Repeat the above with inline form. |
| str.clear(); |
| ros << "before\n"; |
| ros.scope().os << "inside " << 10 << "\n two\n"; |
| ros.scope().os.scope("{\n", "\n}\n").os << "inner inner"; |
| ros << "after"; |
| ros.flush(); |
| EXPECT_THAT(os.str(), StrEq(expected)); |
| } |
| |
| TEST(FormatTest, Reindent) { |
| std::string str; |
| llvm::raw_string_ostream os(str); |
| raw_indented_ostream ros(os); |
| |
| // String to print with some additional empty lines at the start and lines |
| // with just spaces. |
| const auto *desc = R"( |
| |
| |
| First line |
| second line |
| |
| |
| )"; |
| ros.reindent(desc); |
| ros.flush(); |
| const auto *expected = |
| R"(First line |
| second line |
| |
| |
| )"; |
| EXPECT_THAT(os.str(), StrEq(expected)); |
| } |