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

import("//build/dart/dart_component.gni")
import("//build/dart/dart_library.gni")
import("//build/dart/dart_test_component.gni")
import("//build/dart/fidl_move.gni")
import("//build/fidl/fidl.gni")
import("//build/testing/environments.gni")
import("//src/sys/build/components.gni")
import("//src/tests/fidl/conformance_suite/gidl-conformance-suite.gni")
import("//tools/fidl/gidl/gidl.gni")

## Test Server

dart_library("server_lib") {
  package_name = "server"
  package_root = "server"
  sources = [ "main.dart" ]
  deps = [
    "fidl:bindings_test",
    dart_package_label.fidl,
    dart_package_label.fuchsia_services,
  ]
}

dart_component("server") {
  manifest = "meta/server.cmx"
  main_package = "server"
  deps = [ ":server_lib" ]
}

## GIDL Conformance Test

conformance_dir = "$target_gen_dir/conformance/"
conformance_file = "conformance.dart"
conformance_path = "$conformance_dir/test/$conformance_file"

gidl("conformance_suite") {
  testonly = true
  type = "conformance"
  language = "dart"
  inputs = conformance_suite_gidl_files
  fidl = conformance_suite_fidl_target
  output = conformance_path
}

dart_test_component("conformance-component") {
  component_name = "conformance"
  manifest = "meta/conformance.cmx"
  package_root = conformance_dir
  sources = [ conformance_file ]
  deps = [
    "//src/lib/fidl/dart/gidl",
    "//third_party/dart-pkg/pub/test",
    conformance_suite_fidl_target,
    dart_package_label.zircon,
    dart_package_label.fidl,
  ]

  non_dart_deps = [ ":conformance_suite" ]

  # reuse the pubspec.yaml and analysis_options.yaml from test/
  pubspec = "test/pubspec.yaml"
  options_file = "test/analysis_options.yaml"
}

## Bindings Test

dart_test_component("bindings-test-component") {
  component_name = "dart-bindings-test"
  manifest = "meta/dart-bindings-test.cmx"
  package_root = "test"
  sources = [
    "bits_test.dart",
    "channel_close_test.dart",
    "clone_test.dart",
    "codec_test.dart",
    "enum_test.dart",
    "error_test.dart",
    "event_test.dart",
    "failure_test.dart",
    "hash_test.dart",
    "header_test.dart",
    "oneway_test.dart",
    "state_test.dart",
    "table_test.dart",
    "tostring_test.dart",
    "twoway_test.dart",
    "union_test.dart",
  ]

  deps = [
    ":server_lib",
    "//src/tests/fidl/dart_bindings_test/fidl:bindings_test",
    "//third_party/dart-pkg/pub/collection",
    "//third_party/dart-pkg/pub/pedantic",
    "//third_party/dart-pkg/pub/test",
    dart_package_label.fidl,
    dart_package_label.fuchsia_services,
    dart_package_label.zircon,
  ]
}

fuchsia_test_package("dart_bindings_test_package") {
  package_name = "dart-bindings-test"
  test_components = [
    ":bindings-test-component",
    ":conformance-component",
  ]
  deps = [ ":server" ]
}

group("dart_bindings_test") {
  testonly = true
  deps = [ ":dart_bindings_test_package" ]
}
