blob: d04499f083ecafd1b42246d19b1fb10d84ff30bd [file] [log] [blame]
David 'Digit' Turneref457d22014-02-07 18:46:49 +01001// 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
16namespace android {
17namespace base {
18
19TEST(StringView, InitEmpty) {
20 StringView view;
21 EXPECT_TRUE(view.empty());
22}
David 'Digit' Turnerc0052462014-02-25 18:39:29 +010023
David 'Digit' Turneref457d22014-02-07 18:46:49 +010024TEST(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
32TEST(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
41TEST(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
50TEST(StringView, SetEmpty) {
51 StringView view("Hello4");
52 view.set("");
53 EXPECT_TRUE(view.empty());
54}
55
56TEST(StringView, SetEmptyWithLength) {
57 StringView view("Hello5");
58 view.set("Oops", 0U);
59 EXPECT_TRUE(view.empty());
60}
61
62TEST(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
70TEST(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
79TEST(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
88TEST(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());
David 'Digit' Turnerc0052462014-02-25 18:39:29 +010094
David 'Digit' Turneref457d22014-02-07 18:46:49 +010095 size_t n = 0;
David 'Digit' Turnerc0052462014-02-25 18:39:29 +010096 for (StringView::const_iterator it = view.begin();
David 'Digit' Turneref457d22014-02-07 18:46:49 +010097 it != view.end(); ++it, ++n) {
98 EXPECT_EQ(kString[n], *it);
99 }
100}
101
102TEST(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);
David 'Digit' Turnerc0052462014-02-25 18:39:29 +0100113
David 'Digit' Turneref457d22014-02-07 18:46:49 +0100114 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);
David 'Digit' Turnerc0052462014-02-25 18:39:29 +0100121
David 'Digit' Turneref457d22014-02-07 18:46:49 +0100122 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