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

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

  deps = [
    ":lib",
    "//src/lib/fuchsia-async",
    "//src/lib/syslog/rust:syslog",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:structopt",
    "//third_party/rust_crates:thiserror",
  ]

  sources = [ "src/main.rs" ]
}

rustc_library("lib") {
  name = "setui_client_lib"
  edition = "2018"
  with_unit_tests = true
  deps = [
    "//sdk/fidl/fuchsia.accessibility:fuchsia.accessibility-rustc",
    "//sdk/fidl/fuchsia.intl:fuchsia.intl-rustc",
    "//sdk/fidl/fuchsia.media:fuchsia.media-rustc",
    "//sdk/fidl/fuchsia.settings:fuchsia.settings-rustc",
    "//sdk/fidl/fuchsia.settings.policy:fuchsia.settings.policy-rustc",
    "//sdk/fidl/fuchsia.ui.types:fuchsia.ui.types-rustc",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:structopt",
    "//third_party/rust_crates:thiserror",
  ]

  sources = [
    "src/accessibility.rs",
    "src/audio.rs",
    "src/device.rs",
    "src/display.rs",
    "src/do_not_disturb.rs",
    "src/factory_reset.rs",
    "src/input.rs",
    "src/intl.rs",
    "src/lib.rs",
    "src/light.rs",
    "src/night_mode.rs",
    "src/privacy.rs",
    "src/setup.rs",
    "src/utils.rs",
    "src/volume_policy.rs",
  ]
}

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

fuchsia_unittest_package("setui_client_tests") {
  deps = [ ":lib_test" ]
}

rustc_binary("setui_client_interface_test_bin") {
  name = "setui_client_interface_test"
  edition = "2018"
  deps = [
    ":lib",
    "//sdk/fidl/fuchsia.intl:fuchsia.intl-rustc",
    "//sdk/fidl/fuchsia.media:fuchsia.media-rustc",
    "//sdk/fidl/fuchsia.settings:fuchsia.settings-rustc",
    "//sdk/fidl/fuchsia.settings.policy:fuchsia.settings.policy-rustc",
    "//sdk/fidl/fuchsia.ui.types:fuchsia.ui.types-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:thiserror",
  ]
  source_root = "src/interface_test.rs"

  sources = [ "src/interface_test.rs" ]
}

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

fuchsia_test_package("setui_client_interface_tests") {
  test_components = [ ":setui_client_interface_test" ]
}

rustc_test("setui_client_integration_test") {
  edition = "2018"
  deps = [
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//third_party/rust_crates:anyhow",
  ]
  source_root = "src/integration_test.rs"

  sources = [ "src/integration_test.rs" ]
}

fuchsia_component("setui-client-integration-test") {
  testonly = true
  deps = [ ":setui_client_integration_test" ]
  manifest = "meta/setui_client_integration_test.cmx"
}

fuchsia_test_package("setui-client-integration-tests") {
  test_components = [ ":setui-client-integration-test" ]
}

group("tests") {
  testonly = true
  deps = [
    ":setui-client-integration-tests",
    ":setui_client_interface_tests",
    ":setui_client_tests",
  ]
}
