# 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/fuchsia/zircon_images.gni")
import("//build/images/manifest.gni")
import("//build/package.gni")
import("//build/package/component.gni")
import("//build/rust/rustc_binary.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

zircon_extras_manifest("zircon-bin-manifest") {
  visibility = [ ":*" ]
  manifest = "image"
  patterns = [ "bin/sh" ]
}

rustc_binary("dash_test_bin") {
  name = "dash_test"
  edition = "2018"
  source_root = "src/integration_test.rs"
  deps = [
    "//sdk/fidl/fuchsia.data:fuchsia.data-rustc",
    "//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-runtime",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:thiserror",
  ]
}

test_package("dash_test") {
  deps = [
    ":dash_test_bin",
    ":zircon-bin-manifest",
    "//examples/components/basic:hello_world_bin",
  ]

  components = [
    "//src/sys/component_manager:component_manager_as_v1_component",
    ":dash_component",
  ]

  extra = get_target_outputs(":zircon-bin-manifest")

  binaries = [
    {
      name = "hello_world"
    },
  ]

  tests = [
    {
      name = "dash_test"
      dest = "dash_test"
      environments = basic_envs
    },
  ]
}

package("dash") {
  deps = [
    ":zircon-bin-manifest",
    "//examples/components/basic:hello_world_bin",
  ]

  components = [ ":dash_component" ]

  extra = get_target_outputs(":zircon-bin-manifest")

  binaries = [
    {
      name = "hello_world"
    },
  ]
}

deprecated_fuchsia_component("dash_component") {
  manifest = rebase_path("meta/dash_hello.cml")
}

group("tests") {
  testonly = true

  deps = [ ":dash_test" ]
}
