1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <cstdint>
#include <memory>
#include <string_view>
#include "base/containers/span.h"
#include "components/persistent_cache/mock/mock_entry_impl.h"
#include "testing/gtest/include/gtest/gtest.h"
using ::testing::Return;
using ::testing::StrictMock;
namespace persistent_cache {
namespace {
constexpr uint8_t kContentRaw[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
constexpr base::span kContent(kContentRaw);
} // namespace
TEST(PersistentCacheEntry, NoFunctionsCalledAfterConstruction) {
StrictMock<MockEntryImpl> mock_entry;
}
TEST(PersistentCacheEntry, Size) {
StrictMock<MockEntryImpl> mock_entry;
EXPECT_CALL(mock_entry, GetContentSpan()).WillOnce(Return(kContent));
ASSERT_EQ(mock_entry.GetContentSize(), kContent.size());
}
TEST(PersistentCacheEntry, CopyContentToWhenEmpty) {
StrictMock<MockEntryImpl> mock_entry;
EXPECT_CALL(mock_entry, GetContentSpan())
.WillRepeatedly(Return(base::as_byte_span(kContent)));
std::vector<uint8_t> target;
// No attempt to copy more than there is room for when target span has no
// capacity.
ASSERT_EQ(mock_entry.CopyContentTo(base::span(target)), size_t(0));
}
TEST(PersistentCacheEntry, CopyContentPartial) {
StrictMock<MockEntryImpl> mock_entry;
EXPECT_CALL(mock_entry, GetContentSpan())
.WillRepeatedly(Return(base::as_byte_span(kContent)));
std::vector<uint8_t> target;
// No attempt to copy more than there is room for when there is non-zero but
// insufficient capacity.
const size_t target_copy_size = kContent.size() / 2;
target.resize(target_copy_size);
size_t copied_size = mock_entry.CopyContentTo(base::span(target));
ASSERT_EQ(copied_size, target_copy_size);
constexpr size_t kIndexOfStart = 0;
EXPECT_EQ(target, kContent.subspan(kIndexOfStart, target_copy_size));
}
TEST(PersistentCacheEntry, CopyContentSufficientSpace) {
StrictMock<MockEntryImpl> mock_entry;
EXPECT_CALL(mock_entry, GetContentSpan())
.WillRepeatedly(Return(base::as_byte_span(kContent)));
std::vector<uint8_t> target;
// When the target span has sufficient capacity the entirety of the content is
// copied.
target.resize(kContent.size());
ASSERT_EQ(mock_entry.CopyContentTo(base::span(target)), kContent.size());
ASSERT_EQ(mock_entry.GetContentSpan(), target);
}
TEST(PersistentCacheEntry, CopyContentExtraSpace) {
StrictMock<MockEntryImpl> mock_entry;
EXPECT_CALL(mock_entry, GetContentSpan())
.WillRepeatedly(Return(base::as_byte_span(kContent)));
std::vector<uint8_t> target;
// When the target span has more than sufficient capacity the entirety of the
// content is copied.
target.resize(kContent.size() + 10);
ASSERT_EQ(mock_entry.CopyContentTo(base::span(target)), kContent.size());
const base::span subspan =
base::as_byte_span(target).subspan(size_t(0), kContent.size());
ASSERT_EQ(mock_entry.GetContentSpan(), subspan);
}
} // namespace persistent_cache
|