# Copyright 2020 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/bind/bind.gni")
import("//build/config/fuchsia/rules.gni")
import("//build/fidl/fidl.gni")
import("//build/test.gni")
import("//zircon/system/ulib/devmgr-integration-test/isolated_devmgr.gni")

bind_rules("test-environment-bind") {
  rules = "test-environment.bind"
  output = "test-environment-bind.h"
  deps = [ "//src/devices/bind/test.platform" ]
}

fidl("fuchsia.device.environment.test") {
  sources = [ "environment.test.fidl" ]
}

driver_module("ddk-environment-test") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "test-driver.cc" ]
  deps = [
    ":fuchsia.device.environment.test_llcpp",
    ":test-environment-bind",
    "//sdk/lib/fdio",
    "//sdk/lib/syslog/cpp:backend_legacy",
    "//src/devices/lib/driver",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//src/lib/files",
    "//zircon/public/lib/sync",
  ]
}

test("ddk-environment") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "test.cc" ]
  deps = [
    ":fuchsia.device.environment.test_llcpp",
    "//sdk/lib/fdio",
    "//src/lib/ddk",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/devmgr-integration-test",
    "//zircon/system/ulib/devmgr-launcher",
    "//zircon/system/ulib/driver-integration-test",
  ]
}

isolated_devmgr_unittest_package("ddk-environment-test-package") {
  package_name = "ddk-environment-test"
  executable_path = "test/ddk-environment"
  deps = [
    ":ddk-environment",
    ":ddk-environment-test",
    "//src/devices/board/drivers/integration-test",
    "//src/devices/bus/drivers/platform",
    "//src/devices/tests/sysdev",
  ]
}

group("tests") {
  testonly = true
  deps = [ ":ddk-environment-test-package" ]
}
