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

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

rustc_binary("bin") {
  output_name = "workstation_session"
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//sdk/fidl/fuchsia.component:fuchsia.component-rustc",
    "//sdk/fidl/fuchsia.element:fuchsia.element-rustc",
    "//sdk/fidl/fuchsia.identity.account:fuchsia.identity.account-rustc",
    "//sdk/fidl/fuchsia.input.report:fuchsia.input.report-rustc",
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//sdk/fidl/fuchsia.session.scene:fuchsia.session.scene-rustc",
    "//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//sdk/fidl/fuchsia.ui.app:fuchsia.ui.app-rustc",
    "//sdk/fidl/fuchsia.ui.gfx:fuchsia.ui.gfx-rustc",
    "//sdk/fidl/fuchsia.ui.input:fuchsia.ui.input-rustc",
    "//sdk/fidl/fuchsia.ui.scenic:fuchsia.ui.scenic-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/ui/input-synthesis",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/session/lib/element_management",
    "//src/ui/lib/input_pipeline",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:matches",
    "//third_party/rust_crates:rand",
    "//third_party/rust_crates:uuid",
  ]

  test_deps = []

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

fuchsia_package_with_single_component("workstation_routing") {
  manifest = "meta/workstation_routing.cml"
}

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

fuchsia_unittest_package("workstation_session_tests") {
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
  manifest = "meta/workstation_session_bin_test.cml"
  deps = [ ":bin_test" ]
}

session_config("session_config") {
  config = "//src/experiences/session_shells/ermine/session/session_config.json"
}
