183 lines
4.9 KiB
C++
183 lines
4.9 KiB
C++
// Copyright 2014 The Chromium OS Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "chromeos-dbus-bindings/indented_text.h"
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <gmock/gmock.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
using std::string;
|
|
using std::vector;
|
|
using testing::ElementsAre;
|
|
using testing::Test;
|
|
|
|
namespace chromeos_dbus_bindings {
|
|
|
|
class IndentedTextTest : public Test {
|
|
protected:
|
|
size_t GetOffset() const { return text_.offset_; }
|
|
const vector<size_t>& GetHistory() const { return text_.offset_history_; }
|
|
IndentedText text_;
|
|
};
|
|
|
|
TEST_F(IndentedTextTest, Constructor) {
|
|
EXPECT_EQ("", text_.GetContents());
|
|
EXPECT_EQ(0u, GetOffset());
|
|
EXPECT_TRUE(GetHistory().empty());
|
|
}
|
|
|
|
TEST_F(IndentedTextTest, AddLine) {
|
|
const char kTestString0[] = "test";
|
|
text_.AddLine(kTestString0);
|
|
EXPECT_EQ(string(kTestString0) + "\n", text_.GetContents());
|
|
EXPECT_EQ(0u, GetOffset());
|
|
EXPECT_TRUE(GetHistory().empty());
|
|
|
|
const char kTestString1[] = "me";
|
|
text_.AddLine(kTestString1);
|
|
EXPECT_EQ(string(kTestString0) + "\n" + kTestString1 + "\n",
|
|
text_.GetContents());
|
|
EXPECT_EQ(0u, GetOffset());
|
|
EXPECT_TRUE(GetHistory().empty());
|
|
}
|
|
|
|
TEST_F(IndentedTextTest, AddLineWithOffset) {
|
|
const char kTestString[] = "test";
|
|
const int kShift = 4;
|
|
text_.AddLineWithOffset(kTestString, kShift);
|
|
EXPECT_EQ(string(kShift, ' ') + kTestString + "\n", text_.GetContents());
|
|
}
|
|
|
|
TEST_F(IndentedTextTest, AddLineAndPushOffsetTo) {
|
|
text_.AddLineAndPushOffsetTo("foo(bar(baz", 2, '(');
|
|
EXPECT_THAT(GetHistory(), ElementsAre(8));
|
|
}
|
|
|
|
TEST_F(IndentedTextTest, AddBlock) {
|
|
IndentedText block0;
|
|
const char kTestString[] = "test";
|
|
block0.AddLineWithOffset(kTestString, 10);
|
|
block0.AddLineWithOffset(kTestString, 20);
|
|
IndentedText block1;
|
|
block1.AddLineWithOffset(kTestString, 5);
|
|
block1.AddLineWithOffset(kTestString, 15);
|
|
text_.AddBlock(block0);
|
|
text_.AddBlock(block1);
|
|
EXPECT_EQ(block0.GetContents() + block1.GetContents(), text_.GetContents());
|
|
}
|
|
|
|
TEST_F(IndentedTextTest, AddBlockWithOffset) {
|
|
const char kTestString[] = "test";
|
|
IndentedText block;
|
|
const size_t kOffset0 = 0;
|
|
block.AddLineWithOffset(kTestString, kOffset0);
|
|
const size_t kOffset1 = 4;
|
|
block.AddLineWithOffset(kTestString, kOffset1);
|
|
const size_t kOffset2 = 20;
|
|
text_.AddBlockWithOffset(block, kOffset2);
|
|
EXPECT_EQ(string(kOffset2 + kOffset0, ' ') + kTestString + "\n" +
|
|
string(kOffset2 + kOffset1, ' ') + kTestString + "\n",
|
|
text_.GetContents());
|
|
}
|
|
|
|
TEST_F(IndentedTextTest, PushPop) {
|
|
const char kTestString[] = "test";
|
|
text_.AddLine(kTestString);
|
|
|
|
const size_t kShift0 = 2;
|
|
text_.PushOffset(kShift0);
|
|
EXPECT_EQ(2u, GetOffset());
|
|
EXPECT_THAT(GetHistory(), ElementsAre(kShift0));
|
|
text_.AddLine(kTestString);
|
|
|
|
const size_t kShift1 = 4;
|
|
text_.PushOffset(kShift1);
|
|
EXPECT_EQ(kShift0 + kShift1, GetOffset());
|
|
EXPECT_THAT(GetHistory(), ElementsAre(kShift0, kShift1));
|
|
text_.AddLine(kTestString);
|
|
|
|
text_.PopOffset();
|
|
text_.AddLine(kTestString);
|
|
EXPECT_EQ(2u, GetOffset());
|
|
EXPECT_THAT(GetHistory(), ElementsAre(kShift0));
|
|
|
|
text_.PopOffset();
|
|
text_.AddLine(kTestString);
|
|
EXPECT_EQ(0u, GetOffset());
|
|
EXPECT_TRUE(GetHistory().empty());
|
|
|
|
EXPECT_EQ(string(kTestString) + "\n" +
|
|
string(kShift0, ' ') + kTestString + "\n" +
|
|
string(kShift0 + kShift1, ' ') + kTestString + "\n" +
|
|
string(kShift0, ' ') + kTestString + "\n" +
|
|
string(kTestString) + "\n",
|
|
text_.GetContents());
|
|
}
|
|
|
|
TEST_F(IndentedTextTest, Reset) {
|
|
text_.PushOffset(10);
|
|
text_.AddLine("test");
|
|
EXPECT_NE("", text_.GetContents());
|
|
EXPECT_NE(0u, GetOffset());
|
|
EXPECT_FALSE(GetHistory().empty());
|
|
text_.Reset();
|
|
EXPECT_EQ("", text_.GetContents());
|
|
EXPECT_EQ(0u, GetOffset());
|
|
EXPECT_TRUE(GetHistory().empty());
|
|
}
|
|
|
|
TEST_F(IndentedTextTest, AddComments_Empty) {
|
|
text_.AddComments("");
|
|
EXPECT_EQ("", text_.GetContents());
|
|
}
|
|
|
|
TEST_F(IndentedTextTest, AddComments_WhitespaceOnly) {
|
|
text_.AddComments(" \n \t \n");
|
|
EXPECT_EQ("", text_.GetContents());
|
|
}
|
|
|
|
TEST_F(IndentedTextTest, AddComments_EmptyLines) {
|
|
string comment_block = R"(
|
|
|
|
line1
|
|
|
|
line2
|
|
|
|
|
|
)";
|
|
text_.AddComments(comment_block);
|
|
EXPECT_EQ("// line1\n"
|
|
"//\n"
|
|
"// line2\n", text_.GetContents());
|
|
}
|
|
|
|
TEST_F(IndentedTextTest, AddComments_Indentation) {
|
|
string comment_block = R"(
|
|
line1
|
|
- bullet1
|
|
line2
|
|
- bullet2
|
|
line3
|
|
)";
|
|
text_.AddComments(comment_block);
|
|
EXPECT_EQ("// line1\n"
|
|
"// - bullet1\n"
|
|
"// line2\n"
|
|
"// - bullet2\n"
|
|
"// line3\n", text_.GetContents());
|
|
}
|
|
|
|
TEST_F(IndentedTextTest, GetLines) {
|
|
text_.AddLine("no indent");
|
|
text_.PushOffset(2);
|
|
text_.AddLine("2 spaces");
|
|
text_.AddLine("");
|
|
|
|
EXPECT_EQ((vector<string>{"no indent", " 2 spaces", ""}), text_.GetLines());
|
|
}
|
|
|
|
} // namespace chromeos_dbus_bindings
|