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

# This has a group corresponding to each product name.  It gives the
# additional base packages that should be included in the build done by
# a bot to run tests and build-time checks to cover that product's code.

group("bringup") {
  testonly = true
  deps = [ "//bundles/bringup:tests" ]
}

# This group contains tests that don't depend on any known e2e test libraries.
# This happens to exclude unit tests for these e2e libraries, so this group is
# not meant to be used directly. It serves as an intermediate group for
# constructing `core_no_e2e` below.
group("no_e2e_dep") {
  testonly = true
  assert_no_deps = e2e_test_libs

  deps = [
    "//build:tests",
    "//bundles:tools",
    "//examples",
    "//examples:tests",
    "//garnet",
    "//garnet/packages:all",
    "//scripts:tests",
    "//scripts/sdk/gn:tests",
    "//src/diagnostics:tests",
    "//src/media/audio/bundles:virtual_audio_driver",
    "//src/media/bundles:examples",
    "//src/media/bundles:services",
    "//src/media/bundles:tools",
    "//third_party/go:tests",
    "//tools",
    "//topaz/bundles:buildbot",

    # The following groups have known e2e tests explicitly excluded.
    "//bundles/fidl:tests_no_e2e",
    "//sdk:tests_no_e2e",
    "//sdk/cts:cts_no_e2e",
    "//src:src_no_e2e",
    "//tools:tests_no_e2e",
  ]
}

# This groups contains no e2e tests. Tests in this group:
#
# * Either doesn't transitively depend on any known e2e test libraries;
# * Or are unit tests for known e2e test libraries.
group("core_no_e2e") {
  testonly = true
  deps = [ ":no_e2e_dep" ] + e2e_lib_unit_tests
}

group("core") {
  testonly = true
  deps = [
    ":core_no_e2e",

    # Add in e2e tests excluded from `no_e2e`.
    "//bundles/fidl:tests",
    "//sdk:tests",
    "//sdk/cts",
    "//src",
    "//tools",

    # Placed with core because core does not run scenic, in contrast to terminal bundle.
    # (perf:touch_input_test expects scenic _not_ to be running)
    "//src/tests/end_to_end/perf:touch_input_test",
    "//src/tests/end_to_end/screen_is_not_black:config",
  ]

  # Ensure paths to known e2e test libs are always up-to-date.
  deps += e2e_test_libs
}

group("terminal") {
  testonly = true
  deps = [
    # TODO(fxbug.dev/51983): Re-organize these deps to include all packages
    # required for running tests.
    "//garnet/bin/run_test_component",
    "//src/tests/end_to_end/screen_is_not_black:config",
  ]
}

group("workstation") {
  testonly = true
  deps = [
    "//garnet/bin/setui_client:setui_client",
    "//src/tests/end_to_end/screen_is_not_black:config",
  ]
}

# This target is for tests which depend on package artefacts such as
# the FVM. It should be included using `fx set --with-host`.
# TODO(fxbug.dev/63508): teach infra about this target.
group("host-tests") {
  testonly = true
  deps = []
}
