Home | History | Annotate | Download | only in chromeos-dbus-bindings
      1 // Copyright 2014 The Chromium OS Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chromeos-dbus-bindings/indented_text.h"
      6 
      7 #include <string>
      8 #include <vector>
      9 
     10 #include <gmock/gmock.h>
     11 #include <gtest/gtest.h>
     12 
     13 using std::string;
     14 using std::vector;
     15 using testing::ElementsAre;
     16 using testing::Test;
     17 
     18 namespace chromeos_dbus_bindings {
     19 
     20 class IndentedTextTest : public Test {
     21  protected:
     22   size_t GetOffset() const { return text_.offset_; }
     23   const vector<size_t>& GetHistory() const { return text_.offset_history_; }
     24   IndentedText text_;
     25 };
     26 
     27 TEST_F(IndentedTextTest, Constructor) {
     28   EXPECT_EQ("", text_.GetContents());
     29   EXPECT_EQ(0u, GetOffset());
     30   EXPECT_TRUE(GetHistory().empty());
     31 }
     32 
     33 TEST_F(IndentedTextTest, AddLine) {
     34   const char kTestString0[] = "test";
     35   text_.AddLine(kTestString0);
     36   EXPECT_EQ(string(kTestString0) + "\n", text_.GetContents());
     37   EXPECT_EQ(0u, GetOffset());
     38   EXPECT_TRUE(GetHistory().empty());
     39 
     40   const char kTestString1[] = "me";
     41   text_.AddLine(kTestString1);
     42   EXPECT_EQ(string(kTestString0) + "\n" + kTestString1 + "\n",
     43             text_.GetContents());
     44   EXPECT_EQ(0u, GetOffset());
     45   EXPECT_TRUE(GetHistory().empty());
     46 }
     47 
     48 TEST_F(IndentedTextTest, AddLineWithOffset) {
     49   const char kTestString[] = "test";
     50   const int kShift = 4;
     51   text_.AddLineWithOffset(kTestString, kShift);
     52   EXPECT_EQ(string(kShift, ' ') + kTestString + "\n", text_.GetContents());
     53 }
     54 
     55 TEST_F(IndentedTextTest, AddLineAndPushOffsetTo) {
     56   text_.AddLineAndPushOffsetTo("foo(bar(baz", 2, '(');
     57   EXPECT_THAT(GetHistory(), ElementsAre(8));
     58 }
     59 
     60 TEST_F(IndentedTextTest, AddBlock) {
     61   IndentedText block0;
     62   const char kTestString[] = "test";
     63   block0.AddLineWithOffset(kTestString, 10);
     64   block0.AddLineWithOffset(kTestString, 20);
     65   IndentedText block1;
     66   block1.AddLineWithOffset(kTestString, 5);
     67   block1.AddLineWithOffset(kTestString, 15);
     68   text_.AddBlock(block0);
     69   text_.AddBlock(block1);
     70   EXPECT_EQ(block0.GetContents() + block1.GetContents(), text_.GetContents());
     71 }
     72 
     73 TEST_F(IndentedTextTest, AddBlockWithOffset) {
     74   const char kTestString[] = "test";
     75   IndentedText block;
     76   const size_t kOffset0 = 0;
     77   block.AddLineWithOffset(kTestString, kOffset0);
     78   const size_t kOffset1 = 4;
     79   block.AddLineWithOffset(kTestString, kOffset1);
     80   const size_t kOffset2 = 20;
     81   text_.AddBlockWithOffset(block, kOffset2);
     82   EXPECT_EQ(string(kOffset2 + kOffset0, ' ') + kTestString + "\n" +
     83             string(kOffset2 + kOffset1, ' ') + kTestString + "\n",
     84             text_.GetContents());
     85 }
     86 
     87 TEST_F(IndentedTextTest, PushPop) {
     88   const char kTestString[] = "test";
     89   text_.AddLine(kTestString);
     90 
     91   const size_t kShift0 = 2;
     92   text_.PushOffset(kShift0);
     93   EXPECT_EQ(2u, GetOffset());
     94   EXPECT_THAT(GetHistory(), ElementsAre(kShift0));
     95   text_.AddLine(kTestString);
     96 
     97   const size_t kShift1 = 4;
     98   text_.PushOffset(kShift1);
     99   EXPECT_EQ(kShift0 + kShift1, GetOffset());
    100   EXPECT_THAT(GetHistory(), ElementsAre(kShift0, kShift1));
    101   text_.AddLine(kTestString);
    102 
    103   text_.PopOffset();
    104   text_.AddLine(kTestString);
    105   EXPECT_EQ(2u, GetOffset());
    106   EXPECT_THAT(GetHistory(), ElementsAre(kShift0));
    107 
    108   text_.PopOffset();
    109   text_.AddLine(kTestString);
    110   EXPECT_EQ(0u, GetOffset());
    111   EXPECT_TRUE(GetHistory().empty());
    112 
    113   EXPECT_EQ(string(kTestString) + "\n" +
    114             string(kShift0, ' ') + kTestString + "\n" +
    115             string(kShift0 + kShift1, ' ') + kTestString + "\n" +
    116             string(kShift0, ' ') + kTestString + "\n" +
    117             string(kTestString) + "\n",
    118             text_.GetContents());
    119 }
    120 
    121 TEST_F(IndentedTextTest, Reset) {
    122   text_.PushOffset(10);
    123   text_.AddLine("test");
    124   EXPECT_NE("", text_.GetContents());
    125   EXPECT_NE(0u, GetOffset());
    126   EXPECT_FALSE(GetHistory().empty());
    127   text_.Reset();
    128   EXPECT_EQ("", text_.GetContents());
    129   EXPECT_EQ(0u, GetOffset());
    130   EXPECT_TRUE(GetHistory().empty());
    131 }
    132 
    133 TEST_F(IndentedTextTest, AddComments_Empty) {
    134   text_.AddComments("");
    135   EXPECT_EQ("", text_.GetContents());
    136 }
    137 
    138 TEST_F(IndentedTextTest, AddComments_WhitespaceOnly) {
    139   text_.AddComments("  \n \t  \n");
    140   EXPECT_EQ("", text_.GetContents());
    141 }
    142 
    143 TEST_F(IndentedTextTest, AddComments_EmptyLines) {
    144   string comment_block = R"(
    145 
    146     line1
    147 
    148     line2
    149 
    150 
    151   )";
    152   text_.AddComments(comment_block);
    153   EXPECT_EQ("// line1\n"
    154             "//\n"
    155             "// line2\n", text_.GetContents());
    156 }
    157 
    158 TEST_F(IndentedTextTest, AddComments_Indentation) {
    159   string comment_block = R"(
    160     line1
    161       - bullet1
    162         line2
    163       - bullet2
    164   line3
    165   )";
    166   text_.AddComments(comment_block);
    167   EXPECT_EQ("// line1\n"
    168             "//   - bullet1\n"
    169             "//     line2\n"
    170             "//   - bullet2\n"
    171             "// line3\n", text_.GetContents());
    172 }
    173 
    174 TEST_F(IndentedTextTest, GetLines) {
    175   text_.AddLine("no indent");
    176   text_.PushOffset(2);
    177   text_.AddLine("2 spaces");
    178   text_.AddLine("");
    179 
    180   EXPECT_EQ((vector<string>{"no indent", "  2 spaces", ""}), text_.GetLines());
    181 }
    182 
    183 }  // namespace chromeos_dbus_bindings
    184