# 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/package.gni")
import("//third_party/protobuf/proto_library.gni")

executable("cobalt_encoder_unittests") {
  testonly = true

  deps = [
    "//third_party/cobalt/encoder:unittests",
  ]
}

package("cobalt_tests") {
  testonly = true

  deps = [
    ":cobalt_encoder_unittests",
    "app:app",
    "app:cobalt_app_unittests",
    "testapp:cobalt_testapp",
    "testapp:generate_testapp2_config",
    "testapp:generate_testapp_config",
    "utils:cobalt_utils_unittests",
  ]

  binaries = [
    {
      name = "cobalt_testapp"
    },
  ]

  resources = [
    {
      path = rebase_path(
              get_label_info("testapp:generate_testapp_config",
                             "target_gen_dir") + "/cobalt_config.pb")
      dest = "cobalt_config.pb"
    },
    {
      path = rebase_path(
              get_label_info("testapp:generate_testapp2_config",
                             "target_gen_dir") + "/cobalt_config2.pb")
      dest = "cobalt_config2.pb"
    },
  ]

  tests = [
    {
      name = "cobalt_app_unittests"
    },

    {
      name = "cobalt_utils_unittests"

      disabled = true
    },

    {
      name = "cobalt_encoder_unittests"
    },

    {
      name = rebase_path("testapp/cobalt_testapp_no_network.sh")
      dest = "cobalt_testapp_no_network"
    },

    {
      name = rebase_path("testapp/cobalt_testapp_no_environment.sh")
      dest = "cobalt_testapp_no_environment"

      # We don't want to run this version cobalt_testapp in the Garnet
      # CI/CQ  because it uses the real network. We run cobalt_testap_no_network
      # instead. This version is run in the stand-alone cobalt_client CI.
      disabled = true
    },
  ]
}
