// Copyright 2020 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 "../disk_primitive.h"

#include <disk_inspector/supported_types.h>
#include <gtest/gtest.h>

namespace disk_inspector {
namespace {

TEST(DiskPrimitiveTest, StringToUintSuccess) {
  uint8_t value = 8;
  std::string string_value = "8";
  uint8_t result;
  EXPECT_EQ(ZX_OK, internal::StringToUint(string_value, &result));
  EXPECT_EQ(result, value);

  uint64_t large_value = 0x1ffffffff;  // Larger than uint32_t max.
  string_value = "8589934591";
  uint64_t large_result;
  EXPECT_EQ(ZX_OK, internal::StringToUint(string_value, &large_result));
  EXPECT_EQ(large_result, large_value);
}

TEST(DiskPrimitiveTest, StringToUintNotAnInt) {
  std::string input = "testing123";
  uint64_t result;
  EXPECT_EQ(internal::StringToUint(input, &result), ZX_ERR_INVALID_ARGS);
}

TEST(DiskPrimitiveTest, StringToUintValueTooLarge) {
  std::string string_value = "8589934591";  // 0x1ffffffff
  uint32_t result;
  ASSERT_EQ(internal::StringToUint(string_value, &result), ZX_ERR_INVALID_ARGS);
}

TEST(DiskPrimitiveTest, WriteField) {
  uint64_t value = 0;
  uint64_t target = 1234;
  Primitive<uint64_t> uint_object("uint64_t");
  ASSERT_EQ(ZX_OK, uint_object.WriteField(&value, {}, {}, std::to_string(target)));
  EXPECT_EQ(value, target);
}

TEST(DiskPrimitiveTest, GetHexString) {
  uint64_t value = 64;
  std::string result = "0x40";
  PrintOptions options;
  options.display_hex = true;
  Primitive<uint64_t> uint_object("uint64_t");
  EXPECT_EQ(result, uint_object.ToString(&value, options));
}

TEST(DiskPrimitiveTest, GetString) {
  uint64_t value = 64;
  std::string result = "64";
  PrintOptions options;
  options.display_hex = false;
  Primitive<uint64_t> uint_object("uint64_t");
  EXPECT_EQ(result, uint_object.ToString(&value, options));
}

}  // namespace
}  // namespace disk_inspector
