# 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/components.gni")
import("//build/cpp/sdk_source_set.gni")
import("//build/test.gni")

sdk_source_set("input_report_reader") {
  category = "experimental"
  sdk_name = "input_report_reader"

  include_base = "//sdk"

  sources = [
    "reader.cc",
    "reader.h",
    "ring_buffer.cc",
    "ring_buffer.h",
  ]

  public_configs = [ "//sdk/config" ]

  public_deps = [
    "//sdk/fidl/fuchsia.input.report:fuchsia.input.report_llcpp",
    "//zircon/system/ulib/trace",
    "//zircon/system/ulib/zx",
  ]
}

group("test") {
  testonly = true
  deps = [ ":test_package" ]
}

test("input_report_test") {
  sources = [ "reader_unittest.cc" ]
  deps = [
    ":input_report_reader",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/zx",
    "//zircon/system/ulib/zxtest",
  ]
}

fuchsia_unittest_package("test_package") {
  package_name = "lib-input-report-reader-test"
  deps = [ ":input_report_test" ]
}
