// Copyright 2019 The Fuchsia 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 "src/cobalt/bin/utils/base64.h"

#include <gtest/gtest.h>

namespace cobalt {
TEST(Base64, EncodeBytes) {
  std::string data = "\x01\x01\x02\x03\x04\x05\x06\xff\xfe\xfd\xfc\xfb\xfa";
  data[0] = '\x00';
  std::string encoded = "AAECAwQFBv/+/fz7+g==";
  EXPECT_EQ(Base64Encode(data), encoded);
}

TEST(Base64, EncodeString) {
  std::string data = "hello world";
  std::string encoded = "aGVsbG8gd29ybGQ=";
  EXPECT_EQ(Base64Encode(data), encoded);
}

TEST(Base64, DecodeValid) {
  std::string data = "hello world";
  std::string encoded = "aGVsbG8gd29ybGQ=";
  EXPECT_EQ(Base64Decode(encoded), data);
}

TEST(Base64, DecodeInvalid) {
  std::string invalid_encoded = "aGVs;G8gd29ybGQ=";
  EXPECT_EQ(Base64Decode(invalid_encoded), "");
}

TEST(Base64, LongStringRoundTrip) {
  const size_t kDataLen = 1024;
  std::string data(kDataLen, '\0');
  for (size_t i = 0; i < kDataLen; i++) {
    data[i] = 'a' + (i % 25);
  }
  std::string encoded = Base64Encode(data);
  EXPECT_EQ(Base64Decode(encoded), data);
}
}  // namespace cobalt
