# 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")
import("//build/rust/rustc_library.gni")
import("//build/rust/rustc_test.gni")

rustc_test("events_integration_test_bin") {
  name = "events_integration_test"
  edition = "2021"
  source_root = "integration_test.rs"
  deps = [
    "//sdk/fidl/fuchsia.component:fuchsia.component_rust",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component-test",
    "//src/sys/lib/component-events",
  ]

  sources = [ "integration_test.rs" ]
}

fuchsia_component("async_reporter") {
  testonly = true
  deps = [ "components:async_reporter_bin" ]
  manifest = "components/async/meta/reporter.cml"
}

fuchsia_component("capability_requested_child") {
  testonly = true
  deps = [ "components:capability_requested_child_bin" ]
  manifest = "components/capability_requested/meta/child.cml"
}

fuchsia_component("capability_requested_root") {
  testonly = true
  deps = [ "components:capability_requested_root_bin" ]
  manifest = "components/capability_requested/meta/root.cml"
}

fuchsia_component("echo_realm") {
  testonly = true
  manifest = "components/scoped/meta/echo_realm.cml"
}

fuchsia_component("echo_client") {
  testonly = true
  deps = [ "components:echo_client_for_events_bin" ]
  manifest = "components/scoped/meta/echo_client.cml"
}

fuchsia_component("echo_server") {
  testonly = true
  deps = [ "components:echo_server_for_events_bin" ]
  manifest = "components/scoped/meta/echo_server.cml"
}

fuchsia_component("echo_reporter") {
  testonly = true
  deps = [ "components:echo_reporter_bin" ]
  manifest = "components/scoped/meta/echo_reporter.cml"
}

fuchsia_component("nested_reporter") {
  testonly = true
  deps = [ "components:nested_reporter_bin" ]
  manifest = "components/nested/meta/reporter.cml"
}

fuchsia_component("event_dispatch_order_root") {
  testonly = true
  deps = [ "components:stub_component_bin" ]
  manifest = "components/event_dispatch_order/meta/root.cml"
}

fuchsia_component("stub_component") {
  testonly = true
  deps = [ "components:stub_component_bin" ]
  manifest = "components/stub/meta/component.cml"
}

fuchsia_component("realm_offered_reporter") {
  testonly = true
  deps = [ "components:realm_offered_bin" ]
  manifest = "components/realm_offered/meta/reporter.cml"
}

fuchsia_component("realm_offered_nested") {
  testonly = true
  deps = [ "components:realm_offered_nested" ]
  manifest = "components/realm_offered/meta/nested.cml"
}

fuchsia_component("realm_offered_root") {
  testonly = true
  manifest = "components/realm_offered/meta/root.cml"
}

fuchsia_unittest_package("events_integration_test") {
  manifest = "meta/events_integration_test.cml"
  deps = [
    ":async_reporter",
    ":capability_requested_child",
    ":capability_requested_root",
    ":echo_client",
    ":echo_realm",
    ":echo_reporter",
    ":echo_server",
    ":event_dispatch_order_root",
    ":events_integration_test_bin",
    ":nested_reporter",
    ":realm_offered_nested",
    ":realm_offered_reporter",
    ":realm_offered_root",
    ":stub_component",
    "//src/sys/component_manager:component-manager-realm-builder-debug-cmp",
  ]
}
