
Class simplifies keeping track of the indentation while emitting. For every new line the current indentation is simply prefixed (if not at start of line, then it just emits as normal). Add a simple Region helper that makes it easy to have the C++ scope match the emitted scope. Use this in op doc generator and rewrite generator. This reverts revert commit be185b6a7355fdfeb1c31df2e1272366fe58b01f addresses shared lib failure by fixing up cmake files. Differential Revision: https://reviews.llvm.org/D84107
111 lines
2.5 KiB
C++
111 lines
2.5 KiB
C++
//===- 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));
|
|
}
|