1 // Copyright 2008 Google Inc.
2 // Author: Lincoln Smith
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15
16 #include <config.h>
17 #include <string>
18 #include "google/output_string.h"
19 #include "testing.h"
20
21 #ifdef HAVE_EXT_ROPE
22 #include <ext/rope>
23 #include "output_string_crope.h"
24 #endif // HAVE_EXT_ROPE
25
26 namespace open_vcdiff {
27 namespace {
28
29 class OutputStringTest : public testing::Test {
30 public:
31 typedef std::string string;
32
OutputStringTest()33 OutputStringTest() : string_("ab"), output_string_(&string_) { }
34
~OutputStringTest()35 virtual ~OutputStringTest() { }
36
37 protected:
38 string string_;
39 OutputString<string> output_string_;
40 };
41
TEST_F(OutputStringTest,Append)42 TEST_F(OutputStringTest, Append) {
43 output_string_.append("cdef", 2);
44 EXPECT_EQ("abcd", string_);
45 }
46
TEST_F(OutputStringTest,Clear)47 TEST_F(OutputStringTest, Clear) {
48 output_string_.clear();
49 EXPECT_EQ("", string_);
50 }
51
TEST_F(OutputStringTest,PushBack)52 TEST_F(OutputStringTest, PushBack) {
53 output_string_.push_back('c');
54 EXPECT_EQ("abc", string_);
55 }
56
TEST_F(OutputStringTest,Reserve)57 TEST_F(OutputStringTest, Reserve) {
58 const size_t initial_capacity = string_.capacity();
59 string_.resize(string_.capacity());
60 EXPECT_EQ(initial_capacity, string_.capacity());
61 output_string_.ReserveAdditionalBytes(1);
62 EXPECT_LE(initial_capacity + 1, string_.capacity());
63 }
64
TEST_F(OutputStringTest,Size)65 TEST_F(OutputStringTest, Size) {
66 EXPECT_EQ(string_.size(), output_string_.size());
67 string_.push_back('c');
68 EXPECT_EQ(string_.size(), output_string_.size());
69 string_.clear();
70 EXPECT_EQ(string_.size(), output_string_.size());
71 }
72
73 #ifdef HAVE_EXT_ROPE
74 class OutputCRopeTest : public testing::Test {
75 public:
76 typedef __gnu_cxx::crope crope;
77
OutputCRopeTest()78 OutputCRopeTest() : crope_("ab"), output_crope_(&crope_) { }
79
~OutputCRopeTest()80 virtual ~OutputCRopeTest() { }
81
82 protected:
83 crope crope_;
84 OutputCrope output_crope_;
85 };
86
TEST_F(OutputCRopeTest,Append)87 TEST_F(OutputCRopeTest, Append) {
88 output_crope_.append("cdef", 2);
89 crope expected_abcd("abcd");
90 EXPECT_EQ(expected_abcd, crope_);
91 }
92
TEST_F(OutputCRopeTest,Clear)93 TEST_F(OutputCRopeTest, Clear) {
94 output_crope_.clear();
95 crope expected_empty;
96 EXPECT_EQ(expected_empty, crope_);
97 }
98
TEST_F(OutputCRopeTest,PushBack)99 TEST_F(OutputCRopeTest, PushBack) {
100 output_crope_.push_back('c');
101 crope expected_abc("abc");
102 EXPECT_EQ(expected_abc, crope_);
103 }
104
TEST_F(OutputCRopeTest,Size)105 TEST_F(OutputCRopeTest, Size) {
106 EXPECT_EQ(crope_.size(), output_crope_.size());
107 crope_.push_back('c');
108 EXPECT_EQ(crope_.size(), output_crope_.size());
109 crope_.clear();
110 EXPECT_EQ(crope_.size(), output_crope_.size());
111 }
112 #endif // HAVE_EXT_ROPE
113
114 } // anonymous namespace
115 } // namespace open_vcdiff
116