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

#include <string>
#include <vector>

#include "base/compiler_specific.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/inspector_protocol/crdtp/chromium/protocol_traits.h"

namespace content {
namespace protocol {
namespace {

using crdtp::Binary;

TEST(ProtocolBinaryTest, base64EmptyArgs) {
  EXPECT_EQ(std::string(), Binary().toBase64());

  bool success = false;
  Binary decoded = Binary::fromBase64("", &success);
  EXPECT_TRUE(success);
  EXPECT_EQ(std::vector<uint8_t>(),
            std::vector<uint8_t>(decoded.begin(), decoded.end()));
}

TEST(ProtocolStringTest, AllBytesBase64Roundtrip) {
  std::vector<uint8_t> all_bytes;
  for (int ii = 0; ii < 255; ++ii)
    all_bytes.push_back(ii);
  Binary binary = Binary::fromVector(all_bytes);
  bool success = false;
  Binary decoded = Binary::fromBase64(binary.toBase64(), &success);
  EXPECT_TRUE(success);
  std::vector<uint8_t> decoded_bytes(decoded.begin(), decoded.end());
  EXPECT_EQ(all_bytes, decoded_bytes);
}

TEST(ProtocolStringTest, HelloWorldBase64Roundtrip) {
  const std::string kMsg = "Hello, world.";
  std::vector<uint8_t> msg(kMsg.begin(), kMsg.end());
  EXPECT_EQ(kMsg.size(), msg.size());

  auto encoded = Binary::fromVector(msg).toBase64();
  EXPECT_EQ("SGVsbG8sIHdvcmxkLg==", encoded);
  bool success = false;
  Binary decoded_binary = Binary::fromBase64(encoded, &success);
  EXPECT_TRUE(success);
  std::vector<uint8_t> decoded(decoded_binary.begin(), decoded_binary.end());
  EXPECT_EQ(msg, decoded);
}

TEST(ProtocolBinaryTest, InvalidBase64Decode) {
  bool success = true;
  Binary binary = Binary::fromBase64("This is not base64.", &success);
  EXPECT_FALSE(success);
}
}  // namespace
}  // namespace protocol
}  // namespace content
