1 // Copyright 2022 The Abseil Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "absl/strings/internal/cord_data_edge.h"
16
17 #include "gmock/gmock.h"
18 #include "gtest/gtest.h"
19 #include "absl/strings/internal/cord_internal.h"
20 #include "absl/strings/internal/cord_rep_test_util.h"
21
22 namespace absl {
23 ABSL_NAMESPACE_BEGIN
24 namespace cord_internal {
25 namespace {
26
27 using ::absl::cordrep_testing::MakeExternal;
28 using ::absl::cordrep_testing::MakeFlat;
29 using ::absl::cordrep_testing::MakeSubstring;
30
TEST(CordDataEdgeTest,IsDataEdgeOnFlat)31 TEST(CordDataEdgeTest, IsDataEdgeOnFlat) {
32 CordRep* rep = MakeFlat("Lorem ipsum dolor sit amet, consectetur ...");
33 EXPECT_TRUE(IsDataEdge(rep));
34 CordRep::Unref(rep);
35 }
36
TEST(CordDataEdgeTest,IsDataEdgeOnExternal)37 TEST(CordDataEdgeTest, IsDataEdgeOnExternal) {
38 CordRep* rep = MakeExternal("Lorem ipsum dolor sit amet, consectetur ...");
39 EXPECT_TRUE(IsDataEdge(rep));
40 CordRep::Unref(rep);
41 }
42
TEST(CordDataEdgeTest,IsDataEdgeOnSubstringOfFlat)43 TEST(CordDataEdgeTest, IsDataEdgeOnSubstringOfFlat) {
44 CordRep* rep = MakeFlat("Lorem ipsum dolor sit amet, consectetur ...");
45 CordRep* substr = MakeSubstring(1, 20, rep);
46 EXPECT_TRUE(IsDataEdge(substr));
47 CordRep::Unref(substr);
48 }
49
TEST(CordDataEdgeTest,IsDataEdgeOnSubstringOfExternal)50 TEST(CordDataEdgeTest, IsDataEdgeOnSubstringOfExternal) {
51 CordRep* rep = MakeExternal("Lorem ipsum dolor sit amet, consectetur ...");
52 CordRep* substr = MakeSubstring(1, 20, rep);
53 EXPECT_TRUE(IsDataEdge(substr));
54 CordRep::Unref(substr);
55 }
56
TEST(CordDataEdgeTest,IsDataEdgeOnBtree)57 TEST(CordDataEdgeTest, IsDataEdgeOnBtree) {
58 CordRep* rep = MakeFlat("Lorem ipsum dolor sit amet, consectetur ...");
59 CordRepBtree* tree = CordRepBtree::New(rep);
60 EXPECT_FALSE(IsDataEdge(tree));
61 CordRep::Unref(tree);
62 }
63
TEST(CordDataEdgeTest,IsDataEdgeOnBadSubstr)64 TEST(CordDataEdgeTest, IsDataEdgeOnBadSubstr) {
65 CordRep* rep = MakeFlat("Lorem ipsum dolor sit amet, consectetur ...");
66 CordRep* substr = MakeSubstring(1, 18, MakeSubstring(1, 20, rep));
67 EXPECT_FALSE(IsDataEdge(substr));
68 CordRep::Unref(substr);
69 }
70
TEST(CordDataEdgeTest,EdgeDataOnFlat)71 TEST(CordDataEdgeTest, EdgeDataOnFlat) {
72 absl::string_view value = "Lorem ipsum dolor sit amet, consectetur ...";
73 CordRep* rep = MakeFlat(value);
74 EXPECT_EQ(EdgeData(rep), value);
75 CordRep::Unref(rep);
76 }
77
TEST(CordDataEdgeTest,EdgeDataOnExternal)78 TEST(CordDataEdgeTest, EdgeDataOnExternal) {
79 absl::string_view value = "Lorem ipsum dolor sit amet, consectetur ...";
80 CordRep* rep = MakeExternal(value);
81 EXPECT_EQ(EdgeData(rep), value);
82 CordRep::Unref(rep);
83 }
84
TEST(CordDataEdgeTest,EdgeDataOnSubstringOfFlat)85 TEST(CordDataEdgeTest, EdgeDataOnSubstringOfFlat) {
86 absl::string_view value = "Lorem ipsum dolor sit amet, consectetur ...";
87 CordRep* rep = MakeFlat(value);
88 CordRep* substr = MakeSubstring(1, 20, rep);
89 EXPECT_EQ(EdgeData(substr), value.substr(1, 20));
90 CordRep::Unref(substr);
91 }
92
TEST(CordDataEdgeTest,EdgeDataOnSubstringOfExternal)93 TEST(CordDataEdgeTest, EdgeDataOnSubstringOfExternal) {
94 absl::string_view value = "Lorem ipsum dolor sit amet, consectetur ...";
95 CordRep* rep = MakeExternal(value);
96 CordRep* substr = MakeSubstring(1, 20, rep);
97 EXPECT_EQ(EdgeData(substr), value.substr(1, 20));
98 CordRep::Unref(substr);
99 }
100
101 #if defined(GTEST_HAS_DEATH_TEST) && !defined(NDEBUG)
102
TEST(CordDataEdgeTest,IsDataEdgeOnNullPtr)103 TEST(CordDataEdgeTest, IsDataEdgeOnNullPtr) {
104 EXPECT_DEATH(IsDataEdge(nullptr), ".*");
105 }
106
TEST(CordDataEdgeTest,EdgeDataOnNullPtr)107 TEST(CordDataEdgeTest, EdgeDataOnNullPtr) {
108 EXPECT_DEATH(EdgeData(nullptr), ".*");
109 }
110
TEST(CordDataEdgeTest,EdgeDataOnBtree)111 TEST(CordDataEdgeTest, EdgeDataOnBtree) {
112 CordRep* rep = MakeFlat("Lorem ipsum dolor sit amet, consectetur ...");
113 CordRepBtree* tree = CordRepBtree::New(rep);
114 EXPECT_DEATH(EdgeData(tree), ".*");
115 CordRep::Unref(tree);
116 }
117
TEST(CordDataEdgeTest,EdgeDataOnBadSubstr)118 TEST(CordDataEdgeTest, EdgeDataOnBadSubstr) {
119 CordRep* rep = MakeFlat("Lorem ipsum dolor sit amet, consectetur ...");
120 CordRep* substr = MakeSubstring(1, 18, MakeSubstring(1, 20, rep));
121 EXPECT_DEATH(EdgeData(substr), ".*");
122 CordRep::Unref(substr);
123 }
124
125 #endif // GTEST_HAS_DEATH_TEST && !NDEBUG
126
127 } // namespace
128 } // namespace cord_internal
129 ABSL_NAMESPACE_END
130 } // namespace absl
131