# 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/bind/bind.gni")
import("//build/components.gni")
import("//build/drivers.gni")
import("//build/fidl/fidl.gni")
import("//build/test.gni")

fidl("fuchsia.device.lifecycle.test") {
  testonly = true
  sources = [ "lifecycle.test.fidl" ]
  public_deps = [ "//zircon/vdso/zx" ]
}

driver_bind_rules("test-lifecycle-bind") {
  testonly = true
  rules = "test-lifecycle.bind"
  deps = [ "//src/devices/bind/fuchsia.test.platform" ]
}

fuchsia_driver("ddk-lifecycle-test-driver") {
  testonly = true
  output_name = "ddk-lifecycle-test"
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  sources = [
    "test-driver-child.cc",
    "test-driver.cc",
  ]
  deps = [
    ":fuchsia.device.lifecycle.test_cpp",
    ":test-lifecycle-bind",
    "//sdk/lib/fdio",
    "//src/devices/lib/driver",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/sync",
  ]
}

fuchsia_driver_component("ddk-lifecycle-test-driver-component") {
  testonly = true
  component_name = "ddk-lifecycle-test"
  deps = [ ":ddk-lifecycle-test-driver" ]
  info = "ddk-lifecycle-test-info.json"
  manifest = "meta/ddk-lifecycle-test.cml"
}

test("ddk-lifecycle-test") {
  sources = [ "test.cc" ]
  deps = [
    ":fuchsia.device.lifecycle.test_cpp",
    "//sdk/fidl/fuchsia.device:fuchsia.device_cpp",
    "//sdk/fidl/fuchsia.hardware.serial:fuchsia.hardware.serial_cpp",
    "//sdk/fidl/fuchsia.io:fuchsia.io_cpp",
    "//sdk/lib/fit",
    "//src/devices/testing/driver-integration-test-shim",
    "//src/lib/ddk",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/zx",
    "//zircon/system/ulib/zxtest",
  ]
}

fuchsia_unittest_component("ddk-lifecycle") {
  deps = [ ":ddk-lifecycle-test" ]
}

fuchsia_test_package("ddk-lifecycle-test-package") {
  test_components = [ ":ddk-lifecycle" ]
  deps = [
    ":ddk-lifecycle-test-driver-component",
    "//src/devices/board/drivers/integration-test",
    "//src/devices/bus/drivers/platform",
  ]
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

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