# 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.

import("//build/host.gni")
import("//build/testing/golden_files.gni")
import("//src/tests/fidl/conformance_suite/gidl-conformance-suite.gni")
import(
    "//third_party/go/src/syscall/zx/fidl/fidl_test/conformance_test_files.gni")
import("//tools/fidl/gidl/gidl.gni")

install_host_tools("host") {
  deps = [
    "cmd/gidl",
    "cmd/gidl_audit",
  ]
  outputs = [
    "gidl",
    "gidl_audit",
  ]
}

conformance_golden_items = [
  {
    language = "go"
    extension = "go"
  },
  {
    language = "cpp"
    extension = "cc"
  },
  {
    language = "hlcpp"
    extension = "cc"
  },
  {
    language = "llcpp"
    extension = "cc"
  },
  {
    language = "rust"
    extension = "rs"
  },
  {
    language = "dynfidl"
    extension = "rs"
  },
  {
    language = "rust_codec"
    extension = "rs"
  },
]

foreach(item, conformance_golden_items) {
  gidl("${item.language}_goldens") {
    type = "conformance"
    language = item.language
    inputs = conformance_suite_golden_gidl_files
    fidl = conformance_suite_fidl_target
    output = "$target_gen_dir/${item.language}_golden.${item.extension}"
  }
}

golden_files("gidl_golden_tests") {
  testonly = true

  deps = []
  comparisons = []
  foreach(item, conformance_golden_items) {
    deps += [ ":${item.language}_goldens" ]
    comparisons += [
      {
        golden = "goldens/${item.language}_golden.${item.extension}.golden"
        candidate = "$target_gen_dir/${item.language}_golden.${item.extension}"
      },
    ]
  }
}

group("tests") {
  testonly = true

  deps = [
    ":gidl_golden_tests",
    "backend/golang:gidl_golang_tests($host_toolchain)",
    "empty_test:tests",
    "lib/mixer:gidl_mixer_tests($host_toolchain)",
    "lib/parser:gidl_parser_tests($host_toolchain)",
  ]
}
