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 33 OutputStringTest() : string_("ab"), output_string_(&string_) { } 34 35 virtual ~OutputStringTest() { } 36 37 protected: 38 string string_; 39 OutputString<string> output_string_; 40 }; 41 42 TEST_F(OutputStringTest, Append) { 43 output_string_.append("cdef", 2); 44 EXPECT_EQ("abcd", string_); 45 } 46 47 TEST_F(OutputStringTest, Clear) { 48 output_string_.clear(); 49 EXPECT_EQ("", string_); 50 } 51 52 TEST_F(OutputStringTest, PushBack) { 53 output_string_.push_back('c'); 54 EXPECT_EQ("abc", string_); 55 } 56 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 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 78 OutputCRopeTest() : crope_("ab"), output_crope_(&crope_) { } 79 80 virtual ~OutputCRopeTest() { } 81 82 protected: 83 crope crope_; 84 OutputCrope output_crope_; 85 }; 86 87 TEST_F(OutputCRopeTest, Append) { 88 output_crope_.append("cdef", 2); 89 crope expected_abcd("abcd"); 90 EXPECT_EQ(expected_abcd, crope_); 91 } 92 93 TEST_F(OutputCRopeTest, Clear) { 94 output_crope_.clear(); 95 crope expected_empty; 96 EXPECT_EQ(expected_empty, crope_); 97 } 98 99 TEST_F(OutputCRopeTest, PushBack) { 100 output_crope_.push_back('c'); 101 crope expected_abc("abc"); 102 EXPECT_EQ(expected_abc, crope_); 103 } 104 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