# 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.

group("tools") {
  testonly = true

  public_deps = [
    "//tools/auto_owners($host_toolchain)",
    "//tools/bindc:host($host_toolchain)",
    "//tools/blackout",
    "//tools/bootserver_old:host($host_toolchain)",
    "//tools/build",
    "//tools/bundle_fetcher($host_toolchain)",
    "//tools/clidoc:clidoc",
    "//tools/cmc:install($host_toolchain)",
    "//tools/component_id_index($host_toolchain)",
    "//tools/component_manager_config($host_toolchain)",
    "//tools/configc:install($host_toolchain)",
    "//tools/cppdocgen($host_toolchain)",
    "//tools/create:install($host_toolchain)",
    "//tools/dart-strict-deps:strict_deps($host_toolchain)",
    "//tools/debroot($host_toolchain)",
    "//tools/doc_checker($host_toolchain)",
    "//tools/femu-control:host($host_toolchain)",
    "//tools/fidl",
    "//tools/fidlcat:fidlcat_host",
    "//tools/fvdl:host($host_toolchain)",
    "//tools/gn_desc:gn_desc($host_toolchain)",
    "//tools/jq5:install($host_toolchain)",
    "//tools/loglistener:host($host_toolchain)",
    "//tools/make-fuchsia-vol:host",
    "//tools/mdlint:host",
    "//tools/net/device-finder:host",
    "//tools/netprotocol($host_toolchain)",
    "//tools/pbtool($host_toolchain)",
    "//tools/pretty_serial:install($host_toolchain)",
    "//tools/rfc:install($host_toolchain)",
    "//tools/sdk-tools:tools($host_toolchain)",
    "//tools/shush:install($host_toolchain)",
    "//tools/staticanalysis:tools($host_toolchain)",
    "//tools/symbolizer($host_toolchain)",
    "//tools/test_list_tool:install($host_toolchain)",
    "//tools/testgen:host($host_toolchain)",
    "//tools/testing/batchtester($host_toolchain)",
    "//tools/update_crates($host_toolchain)",
    "//tools/virtual_device:fvd($host_toolchain)",
    "//tools/zedmon/client:zedmon_client",

    # This go program should be still correctly built even if a Windows SDK
    # sysroot is absent.
    "//tools/winsdk($win_x64_toolchain)",
  ]
}

# DEPRECATED! DO NOT ADD TO THIS GROUP
group("build_infra") {
  public_deps = [ "//bundles/infra/build" ]
}

# DEPRECATED! DO NOT ADD TO THIS GROUP
group("test_infra") {
  testonly = true
  public_deps = [ "//bundles/infra/test" ]
}

group("e2e_tests") {
  testonly = true

  deps = []

  # TODO(fxbug.dev/63992): Temporarily disable bootserver_old tests on coverage builders.
  if (!is_coverage) {
    deps += [ "//tools/bootserver_old/tests($host_toolchain)" ]
  }
}

group("tests_no_e2e") {
  testonly = true
  assert_no_deps = e2e_test_libs

  deps = [
    "//tools/artifactory:tests",
    "//tools/auto_owners:tests($host_toolchain)",
    "//tools/bindc:tests",
    "//tools/blackout:tests",
    "//tools/bootserver:tests($host_toolchain)",
    "//tools/botanist:tests($host_toolchain)",
    "//tools/build:tests($host_toolchain)",
    "//tools/bundle_fetcher:tests",
    "//tools/cargo-gnaw:tests",
    "//tools/check-licenses:tests",
    "//tools/clidoc:tests",
    "//tools/cmc:tests",
    "//tools/component_id_index:tests($host_toolchain)",
    "//tools/component_manager_config:tests($host_toolchain)",
    "//tools/configc:tests",
    "//tools/cppdocgen:tests($host_toolchain)",
    "//tools/create:tests",
    "//tools/dart-strict-deps:tests($host_toolchain)",
    "//tools/debug:tests($host_toolchain)",
    "//tools/devshell:tests($host_toolchain)",
    "//tools/doc_checker:tests",
    "//tools/docsgen:tests",
    "//tools/femu-control:tests",
    "//tools/fidl:tests",
    "//tools/fidlcat:fidlcat_host_tests($host_toolchain)",
    "//tools/fidlcat/tests",
    "//tools/fuzz:tests",
    "//tools/fvdl:tests",
    "//tools/gn_desc:host_tests($host_toolchain)",
    "//tools/integration:tests($host_toolchain)",
    "//tools/jq5:tests($host_toolchain)",
    "//tools/lib:tests($host_toolchain)",
    "//tools/lib/serial:tests($host_toolchain)",
    "//tools/make-fuchsia-vol:tests",
    "//tools/mdlint:tests",
    "//tools/net:tests($host_toolchain)",
    "//tools/pbtool:tests($host_toolchain)",
    "//tools/pretty_serial:tests",
    "//tools/qemu:tests($host_toolchain)",
    "//tools/rfc:tests",
    "//tools/sdk-tools:tests($host_toolchain)",
    "//tools/shush:tests($host_toolchain)",
    "//tools/staticanalysis:tests",
    "//tools/symbolizer:tests",
    "//tools/sys-realm-analyzer:tests($host_toolchain)",
    "//tools/test_list_tool:test_list_tool_test($host_toolchain)",
    "//tools/testgen:tests",
    "//tools/testing:tests($host_toolchain)",
    "//tools/update_crates:tests($host_toolchain)",
    "//tools/virtual_device:tests($host_toolchain)",
    "//tools/zedmon:tests",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":e2e_tests",
    ":tests_no_e2e",

    # `emulator:tests` contains unit tests for emulator, which depend on
    # emulator so we can't put it in `tests_no_e2e`, but it's not an e2e tests
    # neither.
    "//tools/emulator:tests",
  ]
}
