# 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.

import("//build/dart/fidl_move.gni")

group("topaz") {
  testonly = true
  public_deps = [
    "//topaz:tests",
    "//topaz/examples/fuchsia_services_examples/mind_reader/bin:mind-reader-dart",
    "//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_webview_flutter/examples/webview_mod",
    "//topaz/public/sdk",
  ]
}

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)",
      get_label_info(dart_package_label.fuchsia_scenic_flutter, "dir") +
          ":fuchsia_scenic_flutter_unittests($host_toolchain)",
      get_label_info(dart_package_label.fuchsia_services, "dir") +
          ":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)",
                  get_label_info(dart_package_label.fuchsia_inspect, "dir") +
                      ":fuchsia_inspect_package_unittests($host_toolchain)",

                  # TODO(fxb/38305): Re-enable test when unblocked and inspect paths are corrected
                  # "//topaz/examples/fuchsia_inspect_examples/inspect_mod:inspect-mod-test",
                  get_label_info(dart_package_label.fuchsia_inspect, "dir") +
                      "/test/inspect_flutter_integration_tester",

                  # TODO(fxb/38305): Re-enable test when unblocked and inspect paths are corrected
                  # get_label_info(dart_package_label.fuchsia_inspect, "dir") + "/test/inspect_flutter_integration_tester:inspect-dart-integration-test-driver",
                  get_label_info(dart_package_label.fuchsia_inspect, "dir") +
                      "/test/integration:dart_inspect_vmo_test",
                  get_label_info(dart_package_label.fuchsia_inspect, "dir") +
                      "/test/integration:dart_inspect_vmo_test_writer",
                  get_label_info(dart_package_label.fuchsia_inspect, "dir") +
                      "/test/validator_puppet:tests",
                  "//topaz/public/dart/fuchsia_inspect_flutter/examples/torus15",
                  "//topaz/public/dart/fuchsia_inspect_flutter/examples/torus15:torus15-dart-test",
                  get_label_info(dart_package_label.fuchsia_logger, "dir") +
                      ":" +
                      get_label_info(dart_package_label.fuchsia_logger,
                                     "name") +
                      "_package_unittests($host_toolchain)",
                  get_label_info(dart_package_label.fuchsia_logger, "dir") +
                      "/test/integration:fuchsia-logger-integration-tests",
                  "//topaz/public/dart/fuchsia_modular:fuchsia-modular-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-integration-tests",
                  get_label_info(dart_package_label.fuchsia_services, "dir") +
                      "/test_support:fuchsia-services-foo-test-server",
                  get_label_info(dart_package_label.fuchsia_services, "dir") +
                      ":fuchsia-services-integration-tests",
                  get_label_info(dart_package_label.zircon, "dir") +
                      ":test_extract_zircon_constants($host_toolchain)",
                  ":test_config",
                  "//topaz/bundles/fidl:tests",
                ] + _flutter_tester_tests
}

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