# Copyright 2022 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/components.gni")

fuchsia_component("client") {
  component_name = "example_tester_example_client"
  manifest = "//tools/fidl/example-tester/example/meta/client.cml"
  deps = [ "client:bin" ]
}

fuchsia_component("proxy") {
  component_name = "example_tester_example_proxy"
  manifest = "//tools/fidl/example-tester/example/meta/proxy.cml"
  deps = [ "proxy:bin" ]
}

fuchsia_component("server") {
  component_name = "example_tester_example_server"
  manifest = "//tools/fidl/example-tester/example/meta/server.cml"
  deps = [ "server:bin" ]
}

fuchsia_component("test") {
  testonly = true
  manifest = "//tools/fidl/example-tester/example/test/meta/runner.cml"
  deps = [
    "//tools/fidl/example-tester/example/test:runner_bin",
    "//tools/fidl/example-tester/example/test/goldens:resources",
  ]
}

fuchsia_test_package("fidl_example_tester_rust_tests") {
  deps = [
    ":client",
    ":proxy",
    ":server",
    "//tools/fidl/example-tester/example:client_config_values",
    "//tools/fidl/example-tester/example/realm",
  ]
  test_components = [ ":test" ]
}

group("tests") {
  testonly = true
  deps = [ ":fidl_example_tester_rust_tests" ]
}
