# Copyright 2023 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/testing/validated_test_types_group.gni")

assert(is_fuchsia, "These can only be defined in the default toolchain")

# For use with the 'hermetic_test_package_labels' GN build argument.
# WARNING: Known to infrastructure
validated_test_types_group("hermetic_tests") {
  testonly = true
  allowed_test_types = [ "hermetic" ]
  deps = [
    "//examples:hermetic_tests",
    "//src/sys/component_manager:hermetic_tests",
  ]
}

# For use with the 'test_package_labels' GN build argument.
# WARNING: Known to infrastructure
group("non-hermetic_tests") {
  testonly = true
  deps = []
  public_deps = []
  data_deps = []

  # Ensure that no tests are added to the non-hermetic tests group
  assert(
      deps + public_deps + data_deps == [],
      "The minimal product does not support the running of non-hermetic tests in infra.")
}

# For use with the 'e2e_test_labels' GN build argument.
# WARNING: Known to infrastructure
group("e2e_tests") {
  testonly = true
  deps = []
  public_deps = []
  data_deps = []

  # Ensure that no tests are added to the e2e_tests tests group
  assert(
      deps + public_deps + data_deps == [],
      "The minimal product does not support the running of end-to-end tests in infra.")
}

# WARNING: Known to infrastructure
group("minimal") {
  testonly = true

  # The buildbot groups are not allowed to add platform features, only tests
  # and tools.
  assert_no_deps = [ "//bundles/platform/*" ]

  deps = [
    # All tests from the standardized test groups:
    ":e2e_tests",
    ":hermetic_tests",
    ":non-hermetic_tests",

    # Additional non-test things to build:
    ":additional_build_targets",

    # TODO(https://fxbug.dev/42081259): Migrate from this list to ":hermetic_tests", which
    # will include all hermetic tests, including those from the targets below.
    "//examples:tests",
    "//sdk:tests",
    "//src/connectivity/network:tests",

    # TODO(https://fxbug.dev/42082585): Uncomment once all tests pass on minimal.x64.
    # "//src/developer:tests",
    "//src/bringup:tests",
    "//src/devices:tests",
    "//src/diagnostics:tests",
    "//src/fonts:tests",
    "//src/hwinfo:tests",
    "//src/intl:tests",
    "//src/lib:tests",
    "//src/performance:tests",
    "//src/power:tests",
    "//src/starnix:tests",
    "//src/storage:tests",
    "//src/sys:tests",
    "//src/ui:tests",
    "//src/zircon:tests",
  ]

  if (current_cpu == "riscv64") {
    deps -= [
      # TODO(https://fxbug.dev/42073578): Remove after removing Go dependencies on RISC-V.
      "//src/connectivity/network:tests",
      # TODO(https://fxbug.dev/292292675): Enable once all dependencies succeed on RISC-V.
      # TODO(https://fxbug.dev/42082585): Uncomment when adding to the default targets.
      # "//src/developer:tests",
    ]

    deps += [
      # Run a subset of the network tests until https://fxbug.dev/42073578 is addressed
      # and all tests (removed above) can be built and run.
      "//src/connectivity/network/tests:tests",
    ]
  } else if (current_cpu == "x64") {
    deps -= [
      # The integration tests that require WebEngine fail when run. See
      # https://fxbug.dev/42083237. Since they are only run on x64 (the test spec
      # requires AEMU), disable them only for that architecture
      # TODO(https://fxbug.dev/42081259): Remove once the corresponding entry above is
      # replaced with a `hermetic_tests`.target.
      "//src/ui:tests",
    ]
  }
}

# Contains additional targets to be built that are not needed for tests.
# This allows bots to ensure buildable targets do not regress even if they are
# not being run by another bot (i.e., during bringup of a new CPU architecture).
group("additional_build_targets") {
  testonly = true
  deps = [ "//examples" ]
}
