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

#include "base/strings/abseil_string_conversions.h"

#include <vector>

#include "base/containers/span.h"
#include "base/strings/string_piece.h"
#include "base/strings/string_piece_forward.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "absl/strings/string_view.h"

namespace gurl_base {

namespace {
using string_view = absl::string_view;
}  // namespace

TEST(AbseilStringConversionsTest, StringPieceToStringView) {
  static constexpr StringPiece kPiece = "foo";
  static constexpr string_view kView = StringPieceToStringView(kPiece);
  static_assert(kPiece.data() == kView.data(), "");
  static_assert(kPiece.size() == kView.size(), "");
}

TEST(AbseilStringConversionsTest, StringViewToStringPiece) {
  static constexpr string_view kView = "bar";
  static constexpr StringPiece kPiece = StringViewToStringPiece(kView);
  static_assert(kView.data() == kPiece.data(), "");
  static_assert(kView.size() == kPiece.size(), "");
}

TEST(AbseilStringConversionsTest, StringPiecesToStringViews) {
  static constexpr StringPiece kFoo = "foo";
  static constexpr StringPiece kBar = "bar";
  static constexpr StringPiece kBaz = "baz";

  const std::vector<StringPiece> kPieces = {kFoo, kBar, kBaz};
  const std::vector<string_view> kViews = StringPiecesToStringViews(kPieces);

  ASSERT_EQ(kViews.size(), 3u);
  EXPECT_EQ(kViews[0].data(), kFoo);
  EXPECT_EQ(kViews[0].size(), 3u);
  EXPECT_EQ(kViews[1].data(), kBar);
  EXPECT_EQ(kViews[1].size(), 3u);
  EXPECT_EQ(kViews[2].data(), kBaz);
  EXPECT_EQ(kViews[2].size(), 3u);
}

TEST(AbseilStringConversionsTest, StringViewsToStringPieces) {
  static constexpr string_view kFoo = "foo";
  static constexpr string_view kBar = "bar";
  static constexpr string_view kBaz = "baz";

  const std::vector<string_view> kViews = {kFoo, kBar, kBaz};
  const std::vector<StringPiece> kPieces = StringViewsToStringPieces(kViews);

  ASSERT_EQ(kPieces.size(), 3u);
  EXPECT_EQ(kPieces[0].data(), kFoo);
  EXPECT_EQ(kPieces[0].size(), 3u);
  EXPECT_EQ(kPieces[1].data(), kBar);
  EXPECT_EQ(kPieces[1].size(), 3u);
  EXPECT_EQ(kPieces[2].data(), kBaz);
  EXPECT_EQ(kPieces[2].size(), 3u);
}

}  // namespace base
