| // Copyright 2022 The Abseil Authors |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #include "absl/strings/internal/cord_data_edge.h" |
| |
| #include "gmock/gmock.h" |
| #include "gtest/gtest.h" |
| #include "absl/strings/internal/cord_internal.h" |
| #include "absl/strings/internal/cord_rep_test_util.h" |
| |
| namespace absl { |
| ABSL_NAMESPACE_BEGIN |
| namespace cord_internal { |
| namespace { |
| |
| using ::absl::cordrep_testing::MakeExternal; |
| using ::absl::cordrep_testing::MakeFlat; |
| using ::absl::cordrep_testing::MakeSubstring; |
| |
| TEST(CordDataEdgeTest, IsDataEdgeOnFlat) { |
| CordRep* rep = MakeFlat("Lorem ipsum dolor sit amet, consectetur ..."); |
| EXPECT_TRUE(IsDataEdge(rep)); |
| CordRep::Unref(rep); |
| } |
| |
| TEST(CordDataEdgeTest, IsDataEdgeOnExternal) { |
| CordRep* rep = MakeExternal("Lorem ipsum dolor sit amet, consectetur ..."); |
| EXPECT_TRUE(IsDataEdge(rep)); |
| CordRep::Unref(rep); |
| } |
| |
| TEST(CordDataEdgeTest, IsDataEdgeOnSubstringOfFlat) { |
| CordRep* rep = MakeFlat("Lorem ipsum dolor sit amet, consectetur ..."); |
| CordRep* substr = MakeSubstring(1, 20, rep); |
| EXPECT_TRUE(IsDataEdge(substr)); |
| CordRep::Unref(substr); |
| } |
| |
| TEST(CordDataEdgeTest, IsDataEdgeOnSubstringOfExternal) { |
| CordRep* rep = MakeExternal("Lorem ipsum dolor sit amet, consectetur ..."); |
| CordRep* substr = MakeSubstring(1, 20, rep); |
| EXPECT_TRUE(IsDataEdge(substr)); |
| CordRep::Unref(substr); |
| } |
| |
| TEST(CordDataEdgeTest, IsDataEdgeOnBtree) { |
| CordRep* rep = MakeFlat("Lorem ipsum dolor sit amet, consectetur ..."); |
| CordRepBtree* tree = CordRepBtree::New(rep); |
| EXPECT_FALSE(IsDataEdge(tree)); |
| CordRep::Unref(tree); |
| } |
| |
| TEST(CordDataEdgeTest, IsDataEdgeOnBadSubstr) { |
| CordRep* rep = MakeFlat("Lorem ipsum dolor sit amet, consectetur ..."); |
| CordRep* substr = MakeSubstring(1, 18, MakeSubstring(1, 20, rep)); |
| EXPECT_FALSE(IsDataEdge(substr)); |
| CordRep::Unref(substr); |
| } |
| |
| TEST(CordDataEdgeTest, EdgeDataOnFlat) { |
| absl::string_view value = "Lorem ipsum dolor sit amet, consectetur ..."; |
| CordRep* rep = MakeFlat(value); |
| EXPECT_EQ(EdgeData(rep), value); |
| CordRep::Unref(rep); |
| } |
| |
| TEST(CordDataEdgeTest, EdgeDataOnExternal) { |
| absl::string_view value = "Lorem ipsum dolor sit amet, consectetur ..."; |
| CordRep* rep = MakeExternal(value); |
| EXPECT_EQ(EdgeData(rep), value); |
| CordRep::Unref(rep); |
| } |
| |
| TEST(CordDataEdgeTest, EdgeDataOnSubstringOfFlat) { |
| absl::string_view value = "Lorem ipsum dolor sit amet, consectetur ..."; |
| CordRep* rep = MakeFlat(value); |
| CordRep* substr = MakeSubstring(1, 20, rep); |
| EXPECT_EQ(EdgeData(substr), value.substr(1, 20)); |
| CordRep::Unref(substr); |
| } |
| |
| TEST(CordDataEdgeTest, EdgeDataOnSubstringOfExternal) { |
| absl::string_view value = "Lorem ipsum dolor sit amet, consectetur ..."; |
| CordRep* rep = MakeExternal(value); |
| CordRep* substr = MakeSubstring(1, 20, rep); |
| EXPECT_EQ(EdgeData(substr), value.substr(1, 20)); |
| CordRep::Unref(substr); |
| } |
| |
| #if defined(GTEST_HAS_DEATH_TEST) && !defined(NDEBUG) |
| |
| TEST(CordDataEdgeTest, IsDataEdgeOnNullPtr) { |
| EXPECT_DEATH(IsDataEdge(nullptr), ".*"); |
| } |
| |
| TEST(CordDataEdgeTest, EdgeDataOnNullPtr) { |
| EXPECT_DEATH(EdgeData(nullptr), ".*"); |
| } |
| |
| TEST(CordDataEdgeTest, EdgeDataOnBtree) { |
| CordRep* rep = MakeFlat("Lorem ipsum dolor sit amet, consectetur ..."); |
| CordRepBtree* tree = CordRepBtree::New(rep); |
| EXPECT_DEATH(EdgeData(tree), ".*"); |
| CordRep::Unref(tree); |
| } |
| |
| TEST(CordDataEdgeTest, EdgeDataOnBadSubstr) { |
| CordRep* rep = MakeFlat("Lorem ipsum dolor sit amet, consectetur ..."); |
| CordRep* substr = MakeSubstring(1, 18, MakeSubstring(1, 20, rep)); |
| EXPECT_DEATH(EdgeData(substr), ".*"); |
| CordRep::Unref(substr); |
| } |
| |
| #endif // GTEST_HAS_DEATH_TEST && !NDEBUG |
| |
| } // namespace |
| } // namespace cord_internal |
| ABSL_NAMESPACE_END |
| } // namespace absl |