# 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 = [
    "//topaz:tests",
    "//topaz/bin/fidlgen_dart:install(//build/toolchain:host_x64)",
    "//topaz/examples/fidl:all",
    "//topaz/public/dart/fuchsia_inspect/codelab:bin",
    "//topaz/public/dart/fuchsia_inspect/examples/inspect_mod",
    "//topaz/public/dart/fuchsia_modular/examples/fibonacci_agent",
    "//topaz/public/dart/fuchsia_modular/examples/multilevel_mod",
    "//topaz/public/dart/fuchsia_modular/examples/slider_mod",
    "//topaz/public/dart/fuchsia_services/examples/mind_reader/bin:mind_reader_dart",
    "//topaz/public/dart/fuchsia_webview_flutter/examples/webview_mod",
    "//topaz/public/sdk",
    "//topaz/runtime/dart_runner:dart_aot_product_runner",
    "//topaz/runtime/dart_runner:dart_aot_runner",
    "//topaz/runtime/dart_runner:dart_jit_product_runner",
    "//topaz/runtime/dart_runner:dart_jit_runner",
    "//topaz/runtime/dart_runner/examples/goodbye_dart:goodbye_dart_aot",
    "//topaz/runtime/dart_runner/examples/goodbye_dart:goodbye_dart_jit",
    "//topaz/runtime/dart_runner/examples/hello_app_dart:hello_app_dart_aot",
    "//topaz/runtime/dart_runner/examples/hello_app_dart:hello_app_dart_jit",
    "//topaz/runtime/dart_runner/examples/hello_dart:hello_dart_aot",
    "//topaz/runtime/dart_runner/examples/hello_dart:hello_dart_aot_product",
    "//topaz/runtime/dart_runner/examples/hello_dart:hello_dart_debug",
    "//topaz/runtime/dart_runner/examples/hello_dart:hello_dart_jit",
    "//topaz/runtime/dart_runner/examples/hello_dart:hello_dart_jit_product",
  ]
}

group("tests") {
  testonly = true

  # TODO(fxb/41505): Temporarily disable flutter_tester tests on mac hosts.
  _flutter_tester_tests = []
  if (host_os != "mac") {
    _flutter_tester_tests += [
      "//topaz/public/dart/fuchsia_webview_flutter:fuchsia_webview_flutter_unittests($host_toolchain)",
      "//topaz/public/dart/fuchsia_internationalization_flutter:tests($host_toolchain)",
      "//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_package_unittests($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)",
    ]
  }

  public_deps = [
                  # TODO: This target should just aggregate the top-level directories and
                  # most of these dependencies should be in those subdirectories.
                  "//garnet/packages:garnet",
                  "//garnet/packages/testing:run_test_component",
                  "//garnet/packages/tests:scenic",
                  "//garnet/packages/tools:scenic",
                  "//src/modular/bundles:framework",
                  "//src/modular/bundles:tools",
                  "//src/modular/bundles:integration_testing",
                  "//src/fonts",
                  "//topaz/bin/dart_fidl_json/test:dart_fidl_json_test($host_toolchain)",

                  "//topaz/public/dart/composition_delegate:composition_delegate_tests($host_toolchain)",
                  "//topaz/public/dart/fuchsia_inspect:fuchsia_inspect_package_unittests($host_toolchain)",
                  "//topaz/public/dart/fuchsia_inspect/examples/inspect_mod",
                  "//topaz/public/dart/fuchsia_inspect/codelab:tests",

                  # TODO(fxb/38305): Re-enable test when unblocked and inspect paths are corrected
                  # "//topaz/public/dart/fuchsia_inspect/examples/inspect_mod:inspect_mod_test",
                  "//topaz/public/dart/fuchsia_inspect/test/inspect_flutter_integration_tester",

                  # TODO(fxb/38305): Re-enable test when unblocked and inspect paths are corrected
                  # "//topaz/public/dart/fuchsia_inspect/test/inspect_flutter_integration_tester:inspect_dart_integration_test_driver",
                  "//topaz/public/dart/fuchsia_inspect/test/integration:dart_inspect_vmo_test",
                  "//topaz/public/dart/fuchsia_inspect/test/integration:dart_inspect_vmo_test_writer",
                  "//topaz/public/dart/fuchsia_inspect/test/validator_puppet:tests",
                  "//topaz/public/dart/fuchsia_inspect_flutter/examples/torus15",
                  "//topaz/public/dart/fuchsia_inspect_flutter/examples/torus15:torus15_dart_test",
                  "//topaz/public/dart/fuchsia_logger:fuchsia_logger_package_unittests($host_toolchain)",
                  "//topaz/public/dart/fuchsia_logger/test/integration:fuchsia-logger-package-integration-test",
                  "//topaz/public/dart/fuchsia_modular:fuchsia_modular_package_integration_tests",
                  "//topaz/public/dart/fuchsia_modular/examples/slider_mod",
                  "//topaz/public/dart/fuchsia_modular/examples/slider_mod:slider_mod_tests",
                  "//topaz/public/dart/fuchsia_modular_testing:fuchsia_modular_testing_package_integration_tests",
                  "//topaz/public/dart/fuchsia_services/test_support:fuchsia-services-foo-test-server",
                  "//topaz/public/dart/fuchsia_services:fuchsia_services_package_integration_tests",
                  "//topaz/public/dart/fuchsia_vfs:fuchsia_vfs_package_unittests",
                  "//topaz/public/dart/zircon:test_extract_zircon_constants($host_toolchain)",
                  "//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",
                  ":test_config",
                  "//topaz/bundles/fidl:tests",
                ] + _flutter_tester_tests
}

group("test_config") {
  testonly = true
  deps = [ "tests/config" ]
}
