# Copyright 2017 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("topaz") {
  testonly = true
  public_deps = [
    # TODO: Remove //peridot/packages:kitchen_sink once client have that
    # dependency explicitly.
    "//peridot/packages:kitchen_sink",
    "//topaz:tests",
    "//topaz/packages:all",
  ]
}

group("tests") {
  testonly = true
  public_deps = [
    # TODO: This target should just aggregate the top-level directories and
    # most of these dependencies should be in those subdirectories.
    "//garnet/examples/ui:tile_view",
    "//garnet/packages/tests:fidl_compatibility_test_server_cpp",
    "//garnet/packages/tests:fidl_compatibility_test_server_go",
    "//garnet/packages/tests:fidl_compatibility_test_server_llcpp",
    "//garnet/packages/tests:fidl_compatibility_test_server_rust",
    "//garnet/packages/tests:run_test_component",
    "//garnet/packages/tests:scenic",
    "//garnet/packages/tools:scenic",
    "//peridot/packages/prod:integration_testing",
    "//peridot/packages/tests:ledger",
    "//src/fonts",
    "//topaz/bin/crasher_dart",
    "//topaz/bin/crasher_flutter",
    "//topaz/bin/dart_fidl_json/test:dart_fidl_json_test($host_toolchain)",
    "//topaz/bin/fidl_bindings_test/server:fidl_bindings_test_server",
    "//topaz/bin/fidl_bindings_test/test:fidl_bindings_test",
    "//topaz/bin/fidl_compatibility_test:fidl_compatibility_test_topaz",
    "//topaz/bin/fidl_compatibility_test/dart:fidl_compatibility_test_server_dart",
    "//topaz/bin/fidlgen_dart:fidlgen_dart_backend_ir_test($host_toolchain)",
    "//topaz/bin/fidlgen_dart:fidlgen_dart_backend_test($host_toolchain)",
    "//topaz/bin/flutter_screencap_test:flutter_screencap_test_app",
    "//topaz/bin/flutter_screencap_test",
    "//topaz/bin/ui/benchmarks/image_grid_flutter",
    "//topaz/examples/ledger/todo_list:todo_list_test($host_toolchain)",
    "//topaz/examples/test/flutter_widget_test($host_toolchain)",
    "//topaz/lib/keyboard/flutter:keyboard_test($host_toolchain)",
    "//topaz/lib/setui/common:lib_setui_common_test($host_toolchain)",
    "//topaz/lib/setui/flutter:lib_setui_flutter_test($host_toolchain)",
    "//topaz/lib/story_shell/examples/story_shell_test:key_listener_device_tests",
    "//topaz/lib/tiler:tiler_unittests($host_toolchain)",
    "//topaz/packages/examples:fidl",
    "//topaz/packages/examples:tests",
    "//topaz/packages/prod:web_runner",
    "//topaz/public/dart-pkg/zircon:dart_zircon_test",
    "//topaz/public/dart/composition_delegate:composition_delegate_tests($host_toolchain)",
    "//topaz/public/dart/fuchsia_inspect_flutter:inspect_flutter_test($host_toolchain)",
    "//topaz/public/dart/fuchsia_inspect_flutter/examples/torus15:torus15_flutter_test($host_toolchain)",
    "//topaz/public/dart/fuchsia_inspect:fuchsia_inspect_package_unittests($host_toolchain)",
    "//topaz/public/dart/fuchsia_inspect/test/integration:dart_inspect_vmo_test_writer",
    "//topaz/public/dart/fuchsia_inspect/test/integration:dart_inspect_vmo_test",
    "//topaz/public/dart/fuchsia_logger:fuchsia_logger_package_unittests($host_toolchain)",
    "//topaz/public/dart/fuchsia_modular_flutter:fuchsia_modular_flutter_unittests($host_toolchain)",
    "//topaz/public/dart/fuchsia_modular_testing:fuchsia_modular_testing_package_integration_tests",
    "//topaz/public/dart/fuchsia_modular:fuchsia_modular_package_integration_tests",
    "//topaz/public/dart/fuchsia_modular:fuchsia_modular_package_unittests($host_toolchain)",
    "//topaz/public/dart/fuchsia_scenic_flutter:fuchsia_scenic_flutter_unittests($host_toolchain)",
    "//topaz/public/dart/fuchsia_services:fuchsia_services_foo_test_server",
    "//topaz/public/dart/fuchsia_services:fuchsia_services_package_integration_tests",
    "//topaz/public/dart/fuchsia_services:fuchsia_services_package_unittests($host_toolchain)",
    "//topaz/public/dart/fuchsia_vfs:fuchsia_vfs_package_unittests",
    "//topaz/public/dart/fuchsia_webview_flutter:fuchsia_webview_flutter_target_tests",
    "//topaz/public/dart/fuchsia_webview_flutter:fuchsia_webview_flutter_unittests($host_toolchain)",
    "//topaz/public/dart/sledge:dart_sledge_tests($host_toolchain)",
    "//topaz/public/dart/sledge:sledge_integration_tests",
    "//topaz/public/dart/story_shell_labs:layout_unittests($host_toolchain)",
    "//topaz/public/dart/widgets:dart_widget_tests($host_toolchain)",
    "//topaz/public/dart/zircon:test_extract_zircon_constants($host_toolchain)",
    "//topaz/public/lib/display/flutter:display_test($host_toolchain)",
    "//topaz/runtime/chromium:chromium_prebuilts",
    "//topaz/runtime/dart_runner/examples/goodbye_dart:goodbye_dart_test",
    "//topaz/runtime/dart_runner/integration:dart_aot_runner_test",
    "//topaz/runtime/dart_runner/integration:dart_jit_runner_test",
    "//topaz/runtime/dart/utils:run_vmservice_object_tests",
    "//topaz/runtime/flutter_runner:flutter_runner_tests",
    "//topaz/shell/mondrian_story_shell:mondrian_story_shell_tests($host_toolchain)",
    "//topaz/tests/fidl-changes",
    "//topaz/tests/fidl-dangerous-identifiers",
    "//topaz/tests/web_runner_tests",
  ]
}

group("dart_unittests") {
  testonly = true

  deps = [
    "examples/test/flutter_widget_test:flutter_widget_test",
    "public/dart/sledge:dart_sledge_tests",
    "shell:tests",
  ]
}

group("deprecated_shell_allowlist") {
  #  ________  _________  ________  ________
  # |\   ____\|\___   ___\\   __  \|\   __  \
  # \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
  #  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
  #   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
  #     ____\_\  \   \ \__\ \ \_______\ \__\
  #    |\_________\   \|__|  \|_______|\|__|
  #    \|_________|
  # This is an allowlist of packages that have components manifests that include
  # the "deprecated-shell" feature. Do not add to this list. If the manifest
  # does not otherwise include the feature you need, please file a feature
  # request for that fine-grained feature to help us support least-privileged
  # components.
  visibility = [
    "//topaz/app/term:term",
    "//topaz/bin/flutter_screencap_test:flutter_screencap_test_pkg",
    "//topaz/examples/test/driver_example_mod:driver_example_mod_tests_pkg",
    "//topaz/public/dart/fuchsia_inspect/examples/inspect_mod:inspect_mod_test_pkg",
    "//topaz/public/dart/fuchsia_inspect/test/inspect_flutter_integration_tester:inspect_dart_integration_test_driver_pkg",
    "//topaz/public/dart/fuchsia_inspect/test/integration:dart_inspect_vmo_test",
    "//topaz/public/dart/fuchsia_modular/examples/slider_mod:slider_mod_tests_pkg",
    "//topaz/tests/benchmarks/input_latency:topaz_input_latency_benchmarks",
  ]
}

group("rootjob_svc_allowlist") {
  #  ________  _________  ________  ________
  # |\   ____\|\___   ___\\   __  \|\   __  \
  # \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
  #  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
  #   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
  #     ____\_\  \   \ \__\ \ \_______\ \__\
  #    |\_________\   \|__|  \|_______|\|__|
  #    \|_________|
  # This is an allowlist of packages that have components manifests that include
  # the "fuchsia.boot.RootJob" service. This is a highly privileged service that vends
  # out a very powerful capability. Do not add yourself to this unless this is the only
  # way to accomplish your goal and you have talked to the security team about this.
  visibility = [
    "//topaz/tests/benchmarks/input_latency:topaz_input_latency_benchmarks",
  ]
}
