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

group("cobalt") {
  testonly = true
  deps = [
    ":cobalt_lib_tests",
    ":tests",
    ":unittests",
    "cpp",
  ]
}

executable("unittests") {
  testonly = true
  output_name = "cobalt_lib_unittests"

  deps = [
    "//src/lib/cobalt/cpp:unittests",
    "//src/lib/fxl/test:gtest_main",
  ]
}

unittest_package("cobalt_lib_tests") {
  deps = [
    ":unittests",
    "//src/lib/cobalt/cpp:test_metrics_registry",
    "//src/lib/cobalt/rust:fuchsia-cobalt_test",
  ]

  tests = [
    {
      name = "cobalt_lib_unittests"
      environments = basic_envs
    },
    {
      name = "fuchsia_cobalt_lib_test"
      environments = basic_envs
    },
  ]

  resources = [
    {
      path = rebase_path(
              get_label_info("//src/lib/cobalt/cpp:test_metrics_registry",
                             "target_gen_dir") + "/test_metrics_registry.pb")
      dest = "test_metrics_registry.pb"
    },
  ]
}

group("tests") {
  testonly = true

  deps = [
    ":cobalt_lib_tests",
  ]
}
