// Copyright 2020 The Chromium Authors. All rights reserved.
// 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
