# Copyright 2018 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/package.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//garnet/bin/wayland/protocol.gni")

rustc_binary("bin") {
  name = "test_wayland_bridge"
  edition = "2018"
  with_unit_tests = true
  deps = [
    "//garnet/bin/wayland/core",
    "//garnet/bin/wayland/protocols:wayland",
    "//garnet/public/lib/fidl/rust/fidl",
    "//garnet/public/fidl/fuchsia.developer.tiles:fuchsia.developer.tiles-rustc",
    "//garnet/public/fidl/fuchsia.guest:fuchsia.guest-rustc",
    "//garnet/public/fidl/fuchsia.images:fuchsia.images-rustc",
    "//garnet/public/fidl/fuchsia.ui.app:fuchsia.ui.app-rustc",
    "//garnet/public/fidl/fuchsia.ui.gfx:fuchsia.ui.gfx-rustc",
    "//garnet/public/fidl/fuchsia.ui.input:fuchsia.ui.input-rustc",
    "//garnet/public/fidl/fuchsia.ui.scenic:fuchsia.ui.scenic-rustc",
    "//garnet/public/fidl/fuchsia.ui.viewsv1:fuchsia.ui.viewsv1-rustc",
    "//garnet/public/rust/fuchsia-app",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-scenic",
    "//garnet/public/rust/fuchsia-zircon",
    "//third_party/rust-crates/rustc_deps:failure",
    "//third_party/rust-crates/rustc_deps:futures-preview",
    "//third_party/rust-crates/rustc_deps:parking_lot",
  ]
}

package("bridge") {

  meta = [
    {
      path = rebase_path("meta/test_wayland_bridge.cmx")
      dest = "test_wayland_bridge.cmx"
    },
  ]

  package_name = "test_wayland_bridge"
  binary = "test_wayland_bridge"
  deps = [
    ":bin",
  ]
}

rustc_library("test_wayland_bridge_test") {
  edition = "2018"
  with_unit_tests = true
  deps = [
    "//garnet/bin/wayland/core",
    "//garnet/bin/wayland/protocols:wayland",
    "//garnet/public/fidl/fuchsia.guest:fuchsia.guest-rustc",
    "//garnet/public/lib/fidl/rust/fidl",
    "//garnet/public/rust/fuchsia-app",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-zircon",
    "//third_party/rust-crates/rustc_deps:failure",
    "//third_party/rust-crates/rustc_deps:futures-preview",
  ]
  source_root = "tests/integration_test.rs"
}

group("tests") {
  public_deps = [
    ":test_wayland_bridge_test",
  ]
}
