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

sdk_source_set("cpp") {
  category = "partner"

  sdk_name = "sys_service_cpp"
  stable = true

  include_base = "//sdk"
  sources = [
    "service.cc",
    "service.h",
    "service_aggregate.cc",
    "service_aggregate.h",
    "service_handler.cc",
    "service_handler.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.io:fuchsia.io_hlcpp",
    "//sdk/lib/async:async-cpp",
    "//sdk/lib/fdio",
    "//zircon/system/ulib/zx",
  ]

  deps = [ "//sdk/lib/vfs/cpp" ]

  public_configs = [ "//sdk/config" ]
}

cc_test_executable("sys_service_unittests") {
  testonly = true

  sources = [
    "service_aggregate_test.cc",
    "service_handler_test.cc",
    "service_test.cc",
    "test_base.h",
  ]

  deps = [
    ":cpp",
    "//examples/fidl/fuchsia.examples:fuchsia.examples_hlcpp",
    "//sdk/lib/async-testing",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gmock",
    "//zircon/system/ulib/fbl",
  ]
}

fuchsia_unittest_package("sys_service_tests") {
  deps = [ ":sys_service_unittests" ]
  manifest = "../meta/sys_service_unittests.cml"
}

group("tests") {
  testonly = true
  public_deps = [ ":sys_service_tests" ]
}
