# 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/fidl/fidl.gni")
import("//build/test.gni")
import("//build/testing/environments.gni")
import("//src/sys/build/components.gni")
import("//third_party/protobuf/proto_library.gni")

static_library("fidl_codec") {
  friend = [ ":tests" ]

  public = [
    "builtin_semantic.h",
    "display_handle.h",
    "display_options.h",
    "encoder.h",
    "json_visitor.h",
    "library_loader.h",
    "logger.h",
    "memory_helpers.h",
    "message_decoder.h",
    "printer.h",
    "proto_value.h",
    "semantic.h",
    "semantic_parser.h",
    "status.h",
    "type_visitor.h",
    "visitor.h",
    "wire_object.h",
    "wire_parser.h",
    "wire_types.h",
  ]

  sources = [
    "builtin_semantic.cc",
    "display_handle.cc",
    "encoder.cc",
    "library_loader.cc",
    "logger.cc",
    "message_decoder.cc",
    "printer.cc",
    "proto_value.cc",
    "semantic.cc",
    "semantic_parser.cc",
    "status.cc",
    "wire_object.cc",
    "wire_parser.cc",
    "wire_types.cc",
  ]

  public_deps = [ "//src/lib/fxl" ]
  deps = [
    ":value_proto",
    "//third_party/rapidjson",
    "//zircon/public/lib/fidl_base",
    "//zircon/system/public",
  ]
}

proto_library("value_proto") {
  proto_in_dir = "//"

  sources = [ "//src/lib/fidl_codec/proto/value.proto" ]

  generate_python = false

  deps = [ "//third_party/protobuf:protobuf_full" ]
}

executable("fidl_codec_test_bin") {
  testonly = true
  sources = [
    "builtin_semantic_test.cc",
    "dispatcher_test.cc",
    "library_loader_test.cc",
    "message_decoder_test.cc",
    "printer_test.cc",
    "proto_test.cc",
    "semantic_parser_test.cc",
    "wire_object_test.cc",
    "wire_parser_test.cc",
    "wire_types_test.cc",
  ]

  deps = [
    ":fidl",
    ":fidl_codec",
    ":json_for_test",
    ":list_for_test",
    ":value_proto",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/fidl/cpp:test_support",
    "//sdk/lib/fidl/cpp/test",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
    "//third_party/rapidjson",
    "//zircon/system/public:public",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_unittest_package("fidl-codec-tests") {
  deps = [ ":fidl_codec_test_bin" ]
}

group("tests") {
  testonly = true

  deps = [ ":fidl-codec-tests" ]
}

action("json_for_test") {
  testonly = true
  deps = [
    ":fidl($fidl_toolchain)",
    ":fidl-composed($fidl_toolchain)",
    ":fidl-sys($fidl_toolchain)",
    "//sdk/fidl/fuchsia.io",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/fidl/cpp/test:frobinator",
  ]
  outputs = [ "$target_gen_dir/library_loader_test_data.h" ]
  hermetic_deps = false
  script = "generate_test_includes.sh"
  args = [
    rebase_path(target_gen_dir, root_build_dir) + "/library_loader_test_data.h",
    "FidlcodecExamples",
    rebase_path(root_build_dir) +
        "/fidling/gen/sdk/lib/fidl/cpp/test/frobinator.fidl.json",
    rebase_path(root_build_dir) +
        "/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io.fidl.json",
    rebase_path(root_build_dir) +
        "/fidling/gen/src/lib/fidl_codec/fidl.fidl.json",
    rebase_path(root_build_dir) +
        "/fidling/gen/src/lib/fidl_codec/fidl-composed.fidl.json",
    rebase_path(root_build_dir) +
        "/fidling/gen/src/lib/fidl_codec/fidl-sys.fidl.json",
  ]
}

action("list_for_test") {
  testonly = true
  deps = [ "//sdk:core_fidl_json" ]
  outputs = [ "$target_gen_dir/list_test_data.h" ]
  hermetic_deps = false
  script = "generate_test_includes.sh"
  args = [
    rebase_path(target_gen_dir, root_build_dir) + "/list_test_data.h",
    "SdkExamples",
    "-content",
    rebase_path(root_build_dir) + "/gen/sdk/core.fidl_json.txt",
  ]
}

fidl("fidl") {
  name = "test.fidlcodec.examples"

  sources = [
    "testdata/empty.test.fidl",
    "testdata/reserved_member.test.fidl",
    "testdata/types.test.fidl",
    "testdata/xunionmigration.fidl",
  ]

  public_deps = [ "//zircon/vdso/zx" ]
}

fidl("fidl-composed") {
  name = "test.fidlcodec.composedinto"

  sources = [ "testdata/composed_into.test.fidl" ]

  public_deps = [ ":fidl" ]
}

fidl("fidl-sys") {
  name = "test.fidlcodec.sys"

  sources = [ "testdata/sys.test.fidl" ]

  public_deps = [ "//zircon/vdso/zx" ]
}
