// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <cstring>
#include <memory>

#include "base/containers/span.h"
#include "components/persistent_cache/sqlite/sqlite_entry_impl.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace {
constexpr char kContent[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
}  // namespace

namespace persistent_cache {

TEST(SqliteEntryTest, ConstructionTakesOwnershipOfValue) {
  std::string copy = kContent;
  SqliteEntryImpl sql_entry(std::move(copy));
  // Move took place.
  EXPECT_TRUE(copy.empty());
  EXPECT_EQ(sql_entry.GetContentSpan(), base::span_from_cstring(kContent));
  EXPECT_EQ(sql_entry.GetContentSize(), std::strlen(kContent));
}

TEST(SqliteEntryTest, ConstructionFromEmptyValueLeadsToEmptyEntry) {
  SqliteEntryImpl sql_entry(std::string(""));
  EXPECT_TRUE(sql_entry.GetContentSpan().empty());
  EXPECT_EQ(sql_entry.GetContentSize(), 0ull);
}

}  // namespace persistent_cache
