# 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:infratools",
    "//bundles/bringup:tests",
  ]
}

group("core") {
  testonly = true
  deps = [
    "//bundles:infratools",
    "//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",

    # 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 = [
    "//bundles:infratools",

    # FIXME(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 = [
    "//bundles:infratools",
    "//garnet/bin/setui_client:setui_client",
    "//src/tests/end_to_end/screen_is_not_black:config",
  ]
}
