# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# ==============================================================================
# TEST SETUP
# ==============================================================================

# Define a test as an executable (or apk on Android) with the "testonly" flag
# set.
# Variable:
#   use_raw_android_executable: Use executable() rather than android_apk().
#   use_native_activity: Test implements ANativeActivity_onCreate().
template("test") {
  if (is_android) {
    import("//build/config/android/config.gni")
    import("//build/config/android/rules.gni")
    import("//build/config/sanitizers/sanitizers.gni")

    _use_raw_android_executable = defined(invoker.use_raw_android_executable) &&
                                  invoker.use_raw_android_executable

    # output_name is used to allow targets with the same name but in different
    # packages to still produce unique runner scripts.
    _output_name = invoker.target_name
    if (defined(invoker.output_name)) {
      _output_name = invoker.output_name
    }

    _test_runner_target = "${_output_name}__test_runner_script"
    _wrapper_script_vars = [
      "ignore_all_data_deps",
      "shard_timeout",
    ]

    assert(_use_raw_android_executable || enable_java_templates)

    if (_use_raw_android_executable) {
      _exec_target = "${target_name}__exec"
      _dist_target = "${target_name}__dist"
      _exec_output =
          "$target_out_dir/${invoker.target_name}/${invoker.target_name}"

      executable(_exec_target) {
        # Configs will always be defined since we set_defaults in BUILDCONFIG.gn.
        configs = []
        data_deps = []
        forward_variables_from(invoker,
                               "*",
                               _wrapper_script_vars + [ "extra_dist_files" ])
        testonly = true

        # Thanks to the set_defaults() for test(), configs are initialized with
        # the default shared_library configs rather than executable configs.
        configs -= [
          "//build/config:shared_library_config",
          "//build/config/android:hide_all_but_jni_onload",
        ]
        configs += [
          "//build/config:executable_config",
          "//build/config/android:hide_all_but_jni",
        ]

        # Don't output to the root or else conflict with the group() below.
        output_name = rebase_path(_exec_output, root_out_dir)
        if (is_component_build || is_asan) {
          data_deps += [ "//build/android:cpplib_stripped" ]
        }
      }

      create_native_executable_dist(_dist_target) {
        testonly = true
        dist_dir = "$root_out_dir/$target_name"
        binary = _exec_output
        deps = [
          ":$_exec_target",
        ]
        if (defined(invoker.extra_dist_files)) {
          extra_files = invoker.extra_dist_files
        }
      }
    } else {
      _library_target = "_${target_name}__library"
      _apk_target = "${target_name}_apk"
      _apk_specific_vars = [
        "android_manifest",
        "android_manifest_dep",
        "enable_multidex",
        "proguard_configs",
        "proguard_enabled",
        "use_default_launcher",
        "write_asset_list",
        "use_native_activity",
      ]
      shared_library(_library_target) {
        # Configs will always be defined since we set_defaults in BUILDCONFIG.gn.
        configs = []  # Prevent list overwriting warning.
        configs = invoker.configs
        testonly = true

        deps = []
        forward_variables_from(
            invoker,
            "*",
            _apk_specific_vars + _wrapper_script_vars + [ "visibility" ])

        if (!defined(invoker.use_default_launcher) ||
            invoker.use_default_launcher) {
          deps += [ "//testing/android/native_test:native_test_native_code" ]
        }
      }
      unittest_apk(_apk_target) {
        forward_variables_from(invoker, _apk_specific_vars + [ "deps" ])
        shared_library = ":$_library_target"
        apk_name = invoker.target_name
        if (defined(invoker.output_name)) {
          apk_name = invoker.output_name
          install_script_name = "install_${invoker.output_name}"
        }

        # TODO(agrieve): Remove this data_dep once bots don't build the _apk
        #     target (post-GYP).
        # It's a bit backwards for the apk to depend on the runner script, since
        # the apk is conceptually a runtime_dep of the script. However, it is
        # currently necessary because the bots build this _apk target directly
        # rather than the group() below.
        data_deps = [
          ":$_test_runner_target",
        ]
      }

      # Incremental test targets work only for .apks.
      _incremental_test_runner_target =
          "${_output_name}_incremental__test_runner_script"
      test_runner_script(_incremental_test_runner_target) {
        forward_variables_from(invoker,
                               _wrapper_script_vars + [
                                     "data",
                                     "data_deps",
                                     "deps",
                                     "public_deps",
                                   ])
        apk_target = ":$_apk_target"
        test_name = "${_output_name}_incremental"
        test_type = "gtest"
        test_suite = _output_name
        incremental_install = true
      }
      group("${target_name}_incremental") {
        testonly = true
        datadeps = [
          ":$_incremental_test_runner_target",
        ]
        deps = [
          ":${_apk_target}_incremental",
        ]
      }
    }

    _test_runner_target = "${_output_name}__test_runner_script"
    test_runner_script(_test_runner_target) {
      forward_variables_from(invoker,
                             _wrapper_script_vars + [
                                   "data",
                                   "data_deps",
                                   "deps",
                                   "public_deps",
                                 ])

      if (_use_raw_android_executable) {
        executable_dist_dir = "$root_out_dir/$_dist_target"
      } else {
        apk_target = ":$_apk_target"
      }
      test_name = _output_name
      test_type = "gtest"
      test_suite = _output_name
    }

    group(target_name) {
      testonly = true
      deps = [
        ":$_test_runner_target",
      ]
      if (_use_raw_android_executable) {
        deps += [ ":$_dist_target" ]
      } else {
        deps += [ ":$_apk_target" ]
      }
    }
  } else if (is_ios) {
    import("//build/config/ios/rules.gni")

    _test_target = target_name
    _resources_bundle_data = target_name + "_resources_bundle_data"

    bundle_data(_resources_bundle_data) {
      visibility = [ ":$_test_target" ]
      sources = [
        "//testing/gtest_ios/Default.png",
      ]
      outputs = [
        "{{bundle_resources_dir}}/{{source_file_part}}",
      ]
    }

    ios_app_bundle(_test_target) {
      testonly = true

      # See above call.
      set_sources_assignment_filter([])
      forward_variables_from(invoker, "*", [ "testonly" ])

      # Provide sensible defaults in case invoker did not define any of those
      # required variables.
      if (!defined(info_plist) && !defined(info_plist_target)) {
        info_plist = "//testing/gtest_ios/unittest-Info.plist"
      }

      _bundle_id_suffix = target_name
      if (ios_automatically_manage_certs) {
        # Use the same bundle identifier for all unit tests when managing
        # certificates automatically as the number of free certs is limited.
        _bundle_id_suffix = "generic-unit-test"
      }
      if (!defined(extra_substitutions)) {
        extra_substitutions = []
      }
      extra_substitutions += [ "GTEST_BUNDLE_ID_SUFFIX=$_bundle_id_suffix" ]

      if (!defined(deps)) {
        deps = []
      }
      deps += [
        # All shared libraries must have the sanitizer deps to properly link in
        # asan mode (this target will be empty in other cases).
        "//build/config/sanitizers:deps",
      ]
      if (!defined(bundle_deps)) {
        bundle_deps = []
      }
      bundle_deps += [ ":$_resources_bundle_data" ]
    }
  } else {
    executable(target_name) {
      deps = []
      forward_variables_from(invoker, "*")

      testonly = true
      deps += [
        # All shared libraries must have the sanitizer deps to properly link in
        # asan mode (this target will be empty in other cases).
        "//build/config/sanitizers:deps",

        # Give tests the default manifest on Windows (a no-op elsewhere).
        "//build/win:default_exe_manifest",
      ]
    }

    if (defined(invoker.output_name) && target_name != invoker.output_name) {
      group("${invoker.output_name}_run") {
        testonly = true
        deps = [
          ":${invoker.target_name}",
        ]
      }
    }
  }
}

# Test defaults.
set_defaults("test") {
  if (is_android) {
    configs = default_shared_library_configs
  } else {
    configs = default_executable_configs
  }
}
