# 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/config/fuchsia/rules.gni")
import("//build/test.gni")
import("//build/test/test_package.gni")

driver_module("virtio_input") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  sources = [
    "input.cc",
    "input_driver.cc",
    "input_kbd.cc",
    "input_mouse.cc",
    "input_touch.cc",
  ]
  deps = [
    "//sdk/banjo/ddk.protocol.hidbus",
    "//src/devices/bus/lib/virtio",
    "//src/devices/lib/driver",
    "//src/lib/ddktl",
    "//zircon/system/ulib/hid",
  ]
}

test("virtio-input-test") {
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  sources = [
    "input_kbd.cc",
    "input_mouse.cc",
    "input_test.cc",
    "input_touch.cc",
  ]
  deps = [
    "//sdk/banjo/ddk.protocol.hidbus",
    "//src/devices/bus/lib/virtio",
    "//src/devices/testing/fake-bti",
    "//src/devices/testing/no_ddk",
    "//src/ui/input/lib/hid-input-report",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/hid-parser",
  ]
}

unittest_package("virtio-input-test-package") {
  package_name = "virtio-input-test"
  deps = [ ":virtio-input-test" ]

  tests = [
    {
      name = "virtio-input-test"
      environments = basic_envs
    },
  ]
}
group("tests") {
  testonly = true
  deps = [ ":virtio-input-test-package" ]
}
