// 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 <gtest/gtest.h>

#include "tools/fidlcat/interception_tests/interception_workflow_test.h"

namespace fidlcat {

// zx_pc_firmware_tables tests.

std::unique_ptr<SystemCallTest> ZxPcFirmwareTables(int64_t result, std::string_view result_name,
                                                   zx_handle_t handle, zx_paddr_t* acpi_rsdp,
                                                   zx_paddr_t* smbios) {
  auto value = std::make_unique<SystemCallTest>("zx_pc_firmware_tables", result, result_name);
  value->AddInput(handle);
  value->AddInput(reinterpret_cast<uint64_t>(acpi_rsdp));
  value->AddInput(reinterpret_cast<uint64_t>(smbios));
  return value;
}

#define PC_FIRMWARE_TABLES_DISPLAY_TEST_CONTENT(result, expected) \
  zx_paddr_t acpi_rsdp = 0x12340000;                              \
  zx_paddr_t smbios = 0x12350000;                                 \
  PerformDisplayTest("$plt(zx_pc_firmware_tables)",               \
                     ZxPcFirmwareTables(result, #result, kHandle, &acpi_rsdp, &smbios), expected)

#define PC_FIRMWARE_TABLES_DISPLAY_TEST(name, errno, expected) \
  TEST_F(InterceptionWorkflowTestX64, name) {                  \
    PC_FIRMWARE_TABLES_DISPLAY_TEST_CONTENT(errno, expected);  \
  }                                                            \
  TEST_F(InterceptionWorkflowTestArm, name) {                  \
    PC_FIRMWARE_TABLES_DISPLAY_TEST_CONTENT(errno, expected);  \
  }

PC_FIRMWARE_TABLES_DISPLAY_TEST(
    ZxPcFirmwareTables, ZX_OK,
    "\n"
    "\x1B[32m0.000000\x1B[0m "
    "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m "
    "zx_pc_firmware_tables(handle: \x1B[32mhandle\x1B[0m = \x1B[31mcefa1db0\x1B[0m)\n"
    "\x1B[32m0.000000\x1B[0m "
    "  -> \x1B[32mZX_OK\x1B[0m ("
    "acpi_rsdp: \x1B[32mzx.paddr\x1B[0m = \x1B[34m0000000012340000\x1B[0m, "
    "smbios: \x1B[32mzx.paddr\x1B[0m = \x1B[34m0000000012350000\x1B[0m)\n")

}  // namespace fidlcat
