# Copyright (c) 2025 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build/config/components/ets_frontend/es2abc_config.gni")
import("//build/test.gni")

if (!defined(ark_standalone_build)) {
ark_standalone_build = false
}

if (is_standard_system || ark_standalone_build) {
  _icu_path_ = "thirdparty/icu"
} else {
  _icu_path_ = "global/i18n"
}

common_options = ""
if (defined(disable_force_gc) && disable_force_gc) {
  common_options += " --enable-force-gc=false"
}
if (defined(timeout)) {
  _timeout_ = timeout
} else {
  _timeout_ = 1200
}

template("host_unittest_action") {
  _target_name_ = "${target_name}"

  # unittest for phone running
  ohos_unittest(_target_name_) {
    resource_config_file =
        "//arkcompiler/ets_runtime/common_components/tests/ohos_test.xml"
    forward_variables_from(invoker, "*")
  }

  _module_out_path_ = invoker.module_out_path

  # unittest for host running
  action("${_target_name_}ActionWithoutQemu") {
    testonly = true

    _host_test_target_ = ":${_target_name_}(${host_toolchain})"
    _root_out_dir_ = get_label_info(_host_test_target_, "root_out_dir")

    deps = [ _host_test_target_ ]

    script = "//arkcompiler/ets_runtime/script/run_ark_executable.py"

    args = [
      "--script-file",
      rebase_path(_root_out_dir_) +
          "/tests/unittest/${_module_out_path_}/${_target_name_}",
      "--expect-output",
      "0",
      "--env-path",
      rebase_path(_root_out_dir_) + "/arkcompiler/ets_runtime:" +
          rebase_path(_root_out_dir_) + "/arkcompiler/runtime_core:" +
          rebase_path(_root_out_dir_) + "/${_icu_path_}:" +
          rebase_path(_root_out_dir_) + "/thirdparty/zlib:" +
          rebase_path(_root_out_dir_) + "/resourceschedule/frame_aware_sched:" +
          rebase_path(_root_out_dir_) + "/hiviewdfx/hilog:" +
          rebase_path(_root_out_dir_) +
          "/thirdparty/bounds_checking_function:" +
          rebase_path("//prebuilts/clang/ohos/linux-x86_64/llvm/lib:") +
          rebase_path(_root_out_dir_) + "/hmosbundlemanager/zlib_override/",
      "--timeout-limit",
      "${_timeout_}",
    ]

    inputs = [
      "$_root_out_dir_/tests/unittest/${_module_out_path_}/${_target_name_}",
    ]
    outputs = [ "$target_out_dir/${_target_name_}/" ]
  }
  if (ark_standalone_build && host_os == "linux" && target_os == "ohos") {
    import("$ark_third_party_root/musl/musl_template.gni")
    import("$build_root/config/qemu/config.gni")

    action("${_target_name_}ActionWithQemu") {
      testonly = true

      _host_test_target_ = ":${_target_name_}"

      # path of root_out_dir based on root_src_dir
      _root_out_dir_ = get_label_info(_host_test_target_, "root_out_dir")

      deps = [
        "$ark_third_party_root/musl:soft_create_linker_for_qemu",
        _host_test_target_,
      ]

      script = "//arkcompiler/ets_runtime/script/run_ark_executable.py"

      args = [
        "--script-file",
        rebase_path(
            "$_root_out_dir_/tests/unittest/${_module_out_path_}/${_target_name_}",
            root_build_dir),
        "--expect-output",
        "0",
        "--clang-lib-path",
        rebase_path("${clang_base_path}/lib/${musl_arch}-linux-ohos",
                    root_build_dir),
        "--qemu-binary-path",
        "${QEMU_INSTALLATION_PATH}/bin/qemu-${musl_arch}",
        "--qemu-ld-prefix",
        rebase_path(musl_linker_so_out_dir, root_build_dir),
        "--timeout-limit",
        "${_timeout_}",
      ]

      inputs = [
        "$_root_out_dir_/tests/unittest/${_module_out_path_}/${_target_name_}",
      ]
      outputs = [ "$target_out_dir/${_target_name_}WithQemu/" ]
    }
  }
  group("${_target_name_}Action") {
    testonly = true

    deps = []
    if (ark_standalone_build && host_os == "linux" && target_os == "ohos" &&
        run_with_qemu) {
      deps += [ ":${_target_name_}ActionWithQemu" ]
    } else {
      deps += [ ":${_target_name_}ActionWithoutQemu" ]
    }
  }
}