• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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