# 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.
#
# WARNING: This file was machine-generated from previous json files and
# will eventually be deleted.

group("a11y") {
  testonly = true
  public_deps = [
    "//garnet/bin/a11y:a11y_tests",
    "//garnet/bin/a11y/a11y_manager",
    "//garnet/bin/a11y/a11y_toggler",
    "//garnet/bin/a11y/fuchsiavox",
  ]
}

group("all") {
  testonly = true
  public_deps = [
    "//garnet/packages/experimental:a11y",
    "//garnet/packages/experimental:kms",
    "//garnet/packages/experimental:linux_guest",
    "//garnet/packages/experimental:linux_runner",
    "//garnet/packages/experimental:network_settings_server",
    "//garnet/packages/experimental:sys",
    "//garnet/packages/experimental:tennis",
    "//garnet/packages/experimental:zircon_guest",
  ]
}

group("linux_guest") {
  testonly = true
  public_deps = [
    "//garnet/bin/guest/pkg/linux_guest",
    "//garnet/packages/prod:guest_runner",
  ]
}

group("debian_guest") {
  testonly = true
  public_deps = [
    "//garnet/bin/guest/pkg/debian_guest",
    "//garnet/packages/prod:guest_runner",
  ]
}

group("network_settings_server") {
  testonly = true
  public_deps = [
    "//garnet/bin/network_settings_server",
  ]
}

group("sys") {
  testonly = true
  public_deps = [
    "//garnet/bin/sys/component_manager",
  ]
}

group("linux_runner") {
  testonly = true
  public_deps = [
    "//garnet/bin/guest/pkg/biscotti_guest/linux_runner",
  ]
}

group("kms") {
  testonly = true
  public_deps = [
    "//garnet/bin/kms:kms",
    "//garnet/bin/kms:kms",
  ]
}

group("zircon_guest") {
  testonly = true
  public_deps = [
    "//garnet/bin/guest/pkg/zircon_guest",
    "//garnet/packages/prod:guest_runner",
  ]
  metadata = {
    config_package_barrier = []
  }
}

group("tennis") {
  testonly = true
  public_deps = [
    "//garnet/bin/tennis:tennis_service",
    "//garnet/bin/tennis:tennis_sysmgr_config",
    "//garnet/bin/tennis:tennis_viewer",
    "//garnet/bin/tennis/bots/example_ai:tennis_example_ai",
    "//garnet/bin/tennis/bots/manual_player:tennis_manual_player",
  ]
}
