19b851527SJacques Pienaar //===- IndentedOstreamTest.cpp - Indented raw ostream Tests ---------------===//
29b851527SJacques Pienaar //
39b851527SJacques Pienaar // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
49b851527SJacques Pienaar // See https://llvm.org/LICENSE.txt for license information.
59b851527SJacques Pienaar // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
69b851527SJacques Pienaar //
79b851527SJacques Pienaar //===----------------------------------------------------------------------===//
89b851527SJacques Pienaar
99b851527SJacques Pienaar #include "mlir/Support/IndentedOstream.h"
109b851527SJacques Pienaar #include "gmock/gmock.h"
119b851527SJacques Pienaar
129b851527SJacques Pienaar using namespace mlir;
139b851527SJacques Pienaar using ::testing::StrEq;
149b851527SJacques Pienaar
TEST(FormatTest,SingleLine)159b851527SJacques Pienaar TEST(FormatTest, SingleLine) {
169b851527SJacques Pienaar std::string str;
179b851527SJacques Pienaar llvm::raw_string_ostream os(str);
189b851527SJacques Pienaar raw_indented_ostream ros(os);
199b851527SJacques Pienaar ros << 10;
209b851527SJacques Pienaar ros.flush();
219b851527SJacques Pienaar EXPECT_THAT(os.str(), StrEq("10"));
229b851527SJacques Pienaar }
239b851527SJacques Pienaar
TEST(FormatTest,SimpleMultiLine)249b851527SJacques Pienaar TEST(FormatTest, SimpleMultiLine) {
259b851527SJacques Pienaar std::string str;
269b851527SJacques Pienaar llvm::raw_string_ostream os(str);
279b851527SJacques Pienaar raw_indented_ostream ros(os);
289b851527SJacques Pienaar ros << "a";
299b851527SJacques Pienaar ros << "b";
309b851527SJacques Pienaar ros << "\n";
319b851527SJacques Pienaar ros << "c";
329b851527SJacques Pienaar ros << "\n";
339b851527SJacques Pienaar ros.flush();
349b851527SJacques Pienaar EXPECT_THAT(os.str(), StrEq("ab\nc\n"));
359b851527SJacques Pienaar }
369b851527SJacques Pienaar
TEST(FormatTest,SimpleMultiLineIndent)379b851527SJacques Pienaar TEST(FormatTest, SimpleMultiLineIndent) {
389b851527SJacques Pienaar std::string str;
399b851527SJacques Pienaar llvm::raw_string_ostream os(str);
409b851527SJacques Pienaar raw_indented_ostream ros(os);
419b851527SJacques Pienaar ros.indent(2) << "a";
429b851527SJacques Pienaar ros.indent(4) << "b";
439b851527SJacques Pienaar ros << "\n";
449b851527SJacques Pienaar ros << "c";
459b851527SJacques Pienaar ros << "\n";
469b851527SJacques Pienaar ros.flush();
479b851527SJacques Pienaar EXPECT_THAT(os.str(), StrEq(" a b\n c\n"));
489b851527SJacques Pienaar }
499b851527SJacques Pienaar
TEST(FormatTest,SingleRegion)509b851527SJacques Pienaar TEST(FormatTest, SingleRegion) {
519b851527SJacques Pienaar std::string str;
529b851527SJacques Pienaar llvm::raw_string_ostream os(str);
539b851527SJacques Pienaar raw_indented_ostream ros(os);
549b851527SJacques Pienaar ros << "before\n";
559b851527SJacques Pienaar {
569b851527SJacques Pienaar raw_indented_ostream::DelimitedScope scope(ros);
579b851527SJacques Pienaar ros << "inside " << 10;
589b851527SJacques Pienaar ros << "\n two\n";
599b851527SJacques Pienaar {
609b851527SJacques Pienaar raw_indented_ostream::DelimitedScope scope(ros, "{\n", "\n}\n");
619b851527SJacques Pienaar ros << "inner inner";
629b851527SJacques Pienaar }
639b851527SJacques Pienaar }
649b851527SJacques Pienaar ros << "after";
659b851527SJacques Pienaar ros.flush();
669b851527SJacques Pienaar const auto *expected =
679b851527SJacques Pienaar R"(before
689b851527SJacques Pienaar inside 10
699b851527SJacques Pienaar two
709b851527SJacques Pienaar {
719b851527SJacques Pienaar inner inner
729b851527SJacques Pienaar }
739b851527SJacques Pienaar after)";
749b851527SJacques Pienaar EXPECT_THAT(os.str(), StrEq(expected));
759b851527SJacques Pienaar
769b851527SJacques Pienaar // Repeat the above with inline form.
779b851527SJacques Pienaar str.clear();
789b851527SJacques Pienaar ros << "before\n";
799b851527SJacques Pienaar ros.scope().os << "inside " << 10 << "\n two\n";
809b851527SJacques Pienaar ros.scope().os.scope("{\n", "\n}\n").os << "inner inner";
819b851527SJacques Pienaar ros << "after";
829b851527SJacques Pienaar ros.flush();
839b851527SJacques Pienaar EXPECT_THAT(os.str(), StrEq(expected));
849b851527SJacques Pienaar }
859b851527SJacques Pienaar
TEST(FormatTest,Reindent)869b851527SJacques Pienaar TEST(FormatTest, Reindent) {
879b851527SJacques Pienaar std::string str;
889b851527SJacques Pienaar llvm::raw_string_ostream os(str);
899b851527SJacques Pienaar raw_indented_ostream ros(os);
909b851527SJacques Pienaar
919b851527SJacques Pienaar // String to print with some additional empty lines at the start and lines
929b851527SJacques Pienaar // with just spaces.
939b851527SJacques Pienaar const auto *desc = R"(
949b851527SJacques Pienaar
959b851527SJacques Pienaar
969b851527SJacques Pienaar First line
979b851527SJacques Pienaar second line
989b851527SJacques Pienaar
999b851527SJacques Pienaar
1009b851527SJacques Pienaar )";
101*ca6bd9cdSMogball ros.printReindented(desc);
1029b851527SJacques Pienaar ros.flush();
1039b851527SJacques Pienaar const auto *expected =
1049b851527SJacques Pienaar R"(First line
1059b851527SJacques Pienaar second line
1069b851527SJacques Pienaar
1079b851527SJacques Pienaar
1089b851527SJacques Pienaar )";
1099b851527SJacques Pienaar EXPECT_THAT(os.str(), StrEq(expected));
1109b851527SJacques Pienaar }
111