1 // Copyright 2014 The Android Open Source Project 2 // 3 // This software is licensed under the terms of the GNU General Public 4 // License version 2, as published by the Free Software Foundation, and 5 // may be copied, distributed, and modified under those terms. 6 // 7 // This program is distributed in the hope that it will be useful, 8 // but WITHOUT ANY WARRANTY; without even the implied warranty of 9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 // GNU General Public License for more details. 11 12 #include "android/base/StringView.h" 13 14 #include <gtest/gtest.h> 15 16 namespace android { 17 namespace base { 18 19 TEST(StringView, InitEmpty) { 20 StringView view; 21 EXPECT_TRUE(view.empty()); 22 } 23 24 TEST(StringView, InitWithCString) { 25 static const char kString[] = "Hello"; 26 StringView view(kString); 27 EXPECT_STREQ(kString, view.str()); 28 EXPECT_FALSE(view.empty()); 29 EXPECT_EQ(strlen(kString), view.size()); 30 } 31 32 TEST(StringView, InitWithStringView) { 33 static const char kString[] = "Hello2"; 34 StringView view1(kString); 35 StringView view2(view1); 36 EXPECT_FALSE(view2.empty()); 37 EXPECT_STREQ(kString, view2.str()); 38 EXPECT_EQ(strlen(kString), view2.size()); 39 } 40 41 TEST(StringView, Clear) { 42 StringView view("Hello3"); 43 EXPECT_FALSE(view.empty()); 44 view.clear(); 45 EXPECT_TRUE(view.empty()); 46 EXPECT_EQ(0U, view.size()); 47 EXPECT_FALSE(view.str()); 48 } 49 50 TEST(StringView, SetEmpty) { 51 StringView view("Hello4"); 52 view.set(""); 53 EXPECT_TRUE(view.empty()); 54 } 55 56 TEST(StringView, SetEmptyWithLength) { 57 StringView view("Hello5"); 58 view.set("Oops", 0U); 59 EXPECT_TRUE(view.empty()); 60 } 61 62 TEST(StringView, SetWithCString) { 63 static const char kString[] = "Wow"; 64 StringView view("Hello6"); 65 view.set(kString); 66 EXPECT_EQ(kString, view.str()); 67 EXPECT_EQ(strlen(kString), view.size()); 68 } 69 70 TEST(StringView, SetWithStringView) { 71 static const char kString[] = "Wazza"; 72 StringView view1(kString); 73 StringView view("Nope"); 74 view.set(view1); 75 EXPECT_EQ(kString, view.str()); 76 EXPECT_EQ(strlen(kString), view.size()); 77 } 78 79 TEST(StringView, OperatorAt) { 80 static const char kString[] = "Whatever"; 81 static const size_t kStringLen = sizeof(kString) - 1; 82 StringView view(kString); 83 for (size_t n = 0; n < kStringLen; ++n) { 84 EXPECT_EQ(kString[n], view[n]) << "at index " << n; 85 } 86 } 87 88 TEST(StringView, Iterators) { 89 static const char kString[] = "What else?"; 90 static const size_t kStringLen = sizeof(kString) - 1; 91 StringView view(kString); 92 EXPECT_EQ(kString, view.begin()); 93 EXPECT_EQ(kString + kStringLen, view.end()); 94 95 size_t n = 0; 96 for (StringView::const_iterator it = view.begin(); 97 it != view.end(); ++it, ++n) { 98 EXPECT_EQ(kString[n], *it); 99 } 100 } 101 102 TEST(StringView, ComparisonOperators) { 103 char kHello1[] = "Hello"; 104 char kHello2[] = "Hello"; 105 StringView view1(kHello1); 106 StringView view2(kHello2); 107 EXPECT_TRUE(view1 == view2); 108 EXPECT_FALSE(view1 != view2); 109 EXPECT_TRUE(view1 <= view2); 110 EXPECT_TRUE(view1 >= view2); 111 EXPECT_FALSE(view1 < view2); 112 EXPECT_FALSE(view1 > view2); 113 114 StringView view3("hell"); // Shorter, but first char is larger. 115 EXPECT_FALSE(view1 == view3); 116 EXPECT_TRUE(view1 != view3); 117 EXPECT_TRUE(view1 < view3); 118 EXPECT_TRUE(view1 <= view3); 119 EXPECT_FALSE(view1 > view3); 120 EXPECT_FALSE(view1 >= view3); 121 122 StringView view4("Hell"); // Shorter, but first char is smaller. 123 EXPECT_FALSE(view1 == view4); 124 EXPECT_TRUE(view1 != view4); 125 EXPECT_FALSE(view1 < view4); 126 EXPECT_FALSE(view1 <= view4); 127 EXPECT_TRUE(view1 > view4); 128 EXPECT_TRUE(view1 >= view4); 129 } 130 131 // TODO(digit): String 132 133 } // namespace base 134 } // namespace android 135