# Copyright 2017 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/test.gni")
import("//third_party/protobuf/proto_library.gni")
import("$cobalt_root/metrics_registry.gni")

declare_args() {
  extra_package_labels = []
}

config("cobalt_config") {
  include_dirs = [
    "$cobalt_root",
    "$root_gen_dir/third_party/cobalt",
  ]

  if (is_fuchsia_tree) {
    include_dirs += [
      "//garnet/public/lib/syslog/cpp",
      "//zircon/system/ulib/syslog/include",
    ]
  }
}

metrics_registry("registry") {
  global = true
}

group("tests") {
  testonly = true
  deps = [
    "keys:tests",
    "src:tests",
    "$cobalt_root/third_party/clearcut:tests",
  ]
}

test("cobalt_core_unittests") {
  testonly = true

  output_name = "cobalt_core_tests"

  deps = [
    ":tests",
    "//third_party/boringssl:crypto",
    "//third_party/googletest:gtest_main",
  ]
}

if (is_fuchsia_tree) {
  import("//build/test/test_package.gni")

  test_package("cobalt_core_tests") {
    deps = [
      ":cobalt_core_unittests",
    ]

    tests = [
      {
        name = "cobalt_core_tests"
      },
    ]
  }
}

testonly = true
group("default") {
  deps = [
    ":cobalt_core_unittests",
    "$cobalt_root/src/bin/config_change_validator/src:bin",
    "$cobalt_root/src/bin/test_app",
  ]

  deps += extra_package_labels
}
