# 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/config.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_test.gni")
import("//src/sys/build/components.gni")

group("tests") {
  testonly = true

  deps = [
    ":shortcut",
    ":shortcut_test",
  ]
}

group("configs") {
  deps = [ ":ui_sysmgr.config" ]
}

config_data("ui_sysmgr.config") {
  for_pkg = "sysmgr"
  sources = [ "config/ui_sysmgr.config" ]
}

rustc_binary("bin") {
  name = "shortcut"
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//sdk/fidl/fuchsia.input:fuchsia.input-rustc",
    "//sdk/fidl/fuchsia.ui.focus:fuchsia.ui.focus-rustc",
    "//sdk/fidl/fuchsia.ui.input3:fuchsia.ui.input3-rustc",
    "//sdk/fidl/fuchsia.ui.shortcut:fuchsia.ui.shortcut-rustc",
    "//sdk/fidl/fuchsia.ui.views:fuchsia.ui.views-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/ui/fuchsia-scenic",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:pin-utils",
    "//third_party/rust_crates:thiserror",
  ]

  sources = [
    "src/main.rs",
    "src/registry.rs",
    "src/router.rs",
    "src/service.rs",
  ]
}

fuchsia_component("shortcut_manager") {
  deps = [ ":bin" ]
  manifest = "meta/shortcut_manager.cmx"
}

fuchsia_package("shortcut") {
  deps = [ ":shortcut_manager" ]
}

rustc_test("shortcut_integration_test_bin") {
  output_name = "shortcut_integration_test"
  edition = "2018"

  deps = [
    ":bin",
    "//sdk/fidl/fuchsia.input:fuchsia.input-rustc",
    "//sdk/fidl/fuchsia.ui.focus:fuchsia.ui.focus-rustc",
    "//sdk/fidl/fuchsia.ui.input3:fuchsia.ui.input3-rustc",
    "//sdk/fidl/fuchsia.ui.shortcut:fuchsia.ui.shortcut-rustc",
    "//sdk/fidl/fuchsia.ui.views:fuchsia.ui.views-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/ui/fuchsia-scenic",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:thiserror",
  ]
  source_root = "tests/tests.rs"

  sources = [
    "tests/test_helpers.rs",
    "tests/tests.rs",
  ]
}

fuchsia_unittest_component("shortcut_bin_test") {
  deps = [ ":bin_test" ]
}

fuchsia_component("shortcut_integration_test") {
  testonly = true
  deps = [
    ":shortcut_integration_test_bin",
    ":shortcut_manager",
  ]
  manifest = "meta/shortcut_integration_test.cmx"
}

fuchsia_test_package("shortcut_test") {
  test_components = [
    ":shortcut_bin_test",
    ":shortcut_integration_test",
  ]
}
