# 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" ]
}

group("core") {
  testonly = true
  deps = [
    "//build:tests",
    "//bundles:tools",
    "//bundles/fidl:tests",
    "//examples",
    "//examples:tests",
    "//garnet",
    "//garnet/packages:all",
    "//scripts:tests",
    "//scripts/sdk/gn:tests",
    "//sdk:tests",
    "//sdk/cts",
    "//src",
    "//src:tests",
    "//src/diagnostics:tests",
    "//src/media/audio/bundles:virtual_audio_driver",
    "//src/media/bundles:examples",
    "//src/media/bundles:services",
    "//src/media/bundles:tools",

    # TODO(fxbug.dev/66582) renable perf:touch_input_test.
    # 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",
    "//tools",
    "//tools:tests",
    "//topaz/bundles:buildbot",
  ]
}

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 = []
}
