# Copyright 2024 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/python/python_action.gni")
import("//build/sdk/sdk_atom.gni")
import("//sdk/categories/compatibility.gni")

# Declares an in-tree Python E2E Mobly test for distribution in the SDK.
#
# Example:
# ```
# python_mobly_test("my-test") {
#   main_source = "main.py"
#   testonly = false  # Required for SDK inclusion.
# }
#
# sdk_python_mobly_test("my-sdk-test") {
#   sdk_name = "my-test"
#   test_label = ":my-test"
#   category = "partner"
# }
# ```
#
# Parameters
#
#   test_label
#     The Python E2E test to distribute. Must point to a python_mobly_test()
#     target.
#     Type: label.
#
#   sdk_name
#     Name of the test in the SDK.
#     Type: string.
#
#   category
#     Publication level of the library in SDKs.
#     See //build/sdk/sdk_atom.gni for more.
#     Type: string.
#
#   sdk_area (optional)
#     [string] The API area responsible for maintaining this library.
#     See //build/sdk/sdk_atom.gni.
template("sdk_python_mobly_test") {
  visibility = [ ":*" ]

  assert(defined(invoker.category), "Must define an SDK category")
  assert(defined(invoker.sdk_name),
         "Must define a distribution name for this test.")

  _sdk_name = invoker.sdk_name

  # IDK-bound targets cannot depend on `testonly` targets so instead of
  # depending on the main python_mobly_test() target which is a host_test()
  # with `testonly` hardcoded to true, we can instead depend on the
  # `.binary_and_config` group target for bundling purposes.
  _full_test_label = get_label_info(invoker.test_label, "label_no_toolchain")
  _full_test_bundle_label = "${_full_test_label}.binary_and_config"

  _targets = {
    test_sources_list = "${target_name}_test_sources"
  }

  _files = {
    test_sources_list = "${target_gen_dir}/${target_name}_test_sources.json"
  }

  generated_file(_targets.test_sources_list) {
    public_deps = [ _full_test_bundle_label ]

    outputs = [ _files.test_sources_list ]
    output_conversion = "json"
    data_keys = [ "hermetic_test_sources" ]
  }

  sdk_atom(target_name) {
    # TODO(https://fxbug.dev/347094435): Make `sdk_atom()` support `visibility` and uncomment.
    # visibility = ["//sdk:*"]

    forward_variables_from(invoker,
                           [
                             "category",
                             "sdk_area",
                           ])

    id = "sdk://python/${_sdk_name}"

    meta = {
      type = "experimental_python_e2e_test"
      dest = "python/${_sdk_name}/meta.json"
      source_prebuild_info = {
        name = _sdk_name
        file_base = "python/${_sdk_name}"
        api_level = "unversioned"
        test_sources_list =
            "GN_GENERATED(" +
            rebase_path(_files.test_sources_list, root_build_dir) + ")"
      }
    }

    non_sdk_deps = [ ":${_targets.test_sources_list}" ]

    # Ensure all FIDL dependencies meet the compatibility and stability
    # requirements.
    # There are currently exceptions for host tests: https://fxbug.dev/326090508.
    assert(invoker.category == "partner")

    # Since these tests can depend on ffx, allow use of APIs from the
    # "host_tool" category.
    assert_no_deps = markers_partner_idk_host_tools_must_not_depend_on
  }
}
