// Copyright 2021 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 "common/print_elements.h"

#include <list>
#include <string>
#include <vector>

#include "absl/strings/string_view.h"
#include "quic/core/quic_error_codes.h"
#include "common/platform/api/quiche_test.h"

using quic::QuicIetfTransportErrorCodes;

namespace quiche {
namespace test {
namespace {

TEST(PrintElementsTest, Empty) {
  std::vector<std::string> empty{};
  EXPECT_EQ("{}", PrintElements(empty));
}

TEST(PrintElementsTest, StdContainers) {
  std::vector<std::string> one{"foo"};
  EXPECT_EQ("{foo}", PrintElements(one));

  std::list<std::string> two{"foo", "bar"};
  EXPECT_EQ("{foo, bar}", PrintElements(two));

  std::deque<absl::string_view> three{"foo", "bar", "baz"};
  EXPECT_EQ("{foo, bar, baz}", PrintElements(three));
}

// QuicIetfTransportErrorCodes has a custom operator<<() override.
TEST(PrintElementsTest, CustomPrinter) {
  std::vector<QuicIetfTransportErrorCodes> empty{};
  EXPECT_EQ("{}", PrintElements(empty));

  std::list<QuicIetfTransportErrorCodes> one{
      QuicIetfTransportErrorCodes::NO_IETF_QUIC_ERROR};
  EXPECT_EQ("{NO_IETF_QUIC_ERROR}", PrintElements(one));

  std::vector<QuicIetfTransportErrorCodes> two{
      QuicIetfTransportErrorCodes::FLOW_CONTROL_ERROR,
      QuicIetfTransportErrorCodes::STREAM_LIMIT_ERROR};
  EXPECT_EQ("{FLOW_CONTROL_ERROR, STREAM_LIMIT_ERROR}", PrintElements(two));

  std::list<QuicIetfTransportErrorCodes> three{
      QuicIetfTransportErrorCodes::CONNECTION_ID_LIMIT_ERROR,
      QuicIetfTransportErrorCodes::PROTOCOL_VIOLATION,
      QuicIetfTransportErrorCodes::INVALID_TOKEN};
  EXPECT_EQ("{CONNECTION_ID_LIMIT_ERROR, PROTOCOL_VIOLATION, INVALID_TOKEN}",
            PrintElements(three));
}

}  // anonymous namespace
}  // namespace test
}  // namespace quiche
