# Copyright 2022 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/test.gni")

fidl("fuchsia.hardware.demo") {
  sources = [ "demo.test.fidl" ]
}

driver_bind_rules("bind") {
  rules = "demo_number.bind"
  bind_output = "demo_number.bindbc"
  deps = [ "//src/devices/bind/fuchsia.test" ]
}

fuchsia_driver("driver") {
  output_name = "demo_number"
  sources = [ "demo_number.cc" ]
  deps = [
    ":bind",
    ":fuchsia.hardware.demo_llcpp",
    "//sdk/fidl/fuchsia.driver.compat:fuchsia.driver.compat_llcpp",
    "//sdk/lib/driver2:devfs_exporter",
    "//sdk/lib/driver2:inspect",
    "//sdk/lib/driver2:llcpp",
    "//sdk/lib/sys/component/llcpp",
    "//src/devices/lib/driver:driver_runtime",
  ]
}

fuchsia_driver_component("component") {
  component_name = "demo_number"
  manifest = "meta/demo_number.cml"
  deps = [ ":driver" ]
  info = "component-info.json"
}

test("demo_number_test") {
  sources = [ "test.cc" ]
  deps = [
    ":fuchsia.hardware.demo_llcpp",
    "//sdk/fidl/fuchsia.driver.test",
    "//sdk/fidl/fuchsia.io",
    "//sdk/lib/device-watcher/cpp",
    "//sdk/lib/driver_test_realm/realm_builder/cpp",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/zxtest",
  ]
}

fuchsia_unittest_package("test-package") {
  package_name = "demo_number_test"
  deps = [
    ":component",
    ":demo_number_test",
    "//src/devices/misc/drivers/test-parent",
  ]
}

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