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
16namespace android {
17namespace base {
18
19TEST(StringView, InitEmpty) {
20    StringView view;
21    EXPECT_TRUE(view.empty());
22}
23
24TEST(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());
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
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);
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