131c75014Sopenharmony_ci# Copyright (c) 2021 Huawei Device Co., Ltd.
231c75014Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
331c75014Sopenharmony_ci# you may not use this file except in compliance with the License.
431c75014Sopenharmony_ci# You may obtain a copy of the License at
531c75014Sopenharmony_ci#
631c75014Sopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
731c75014Sopenharmony_ci#
831c75014Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
931c75014Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
1031c75014Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1131c75014Sopenharmony_ci# See the License for the specific language governing permissions and
1231c75014Sopenharmony_ci# limitations under the License.
1331c75014Sopenharmony_ci
1431c75014Sopenharmony_ciimport("//build/ohos.gni")
1531c75014Sopenharmony_ciimport("//build/test.gni")
1631c75014Sopenharmony_ciif (precise_xts) {
1731c75014Sopenharmony_ci  import("//out/preloader/precise_run.gni")
1831c75014Sopenharmony_ci}
1931c75014Sopenharmony_ci
2031c75014Sopenharmony_cideclare_args() {
2131c75014Sopenharmony_ci  SUITES_OUTPUT_ROOT = "$root_out_dir/suites"
2231c75014Sopenharmony_ci  SUITE_ARCHIVE_DIR = "$root_out_dir/suites/archives"
2331c75014Sopenharmony_ci  TESTCONFIG_FILENAME = "Test.xml"
2431c75014Sopenharmony_ci  XTS_ROOT = "//test/xts"
2531c75014Sopenharmony_ci  ACTS_ROOT = "//test/xts/acts"
2631c75014Sopenharmony_ci  HATS_ROOT = "//test/xts/hats"
2731c75014Sopenharmony_ci  HITS_ROOT = "//test/xts/hits"
2831c75014Sopenharmony_ci  DCTS_ROOT = "//test/xts/dcts"
2931c75014Sopenharmony_ci
3031c75014Sopenharmony_ci  # create testsuite archive is time-consuming, do it only if necessary
3131c75014Sopenharmony_ci  make_archive = false
3231c75014Sopenharmony_ci  XTS_SUITENAME = getenv("XTS_SUITENAME")
3331c75014Sopenharmony_ci}
3431c75014Sopenharmony_ci
3531c75014Sopenharmony_citemplate("ohos_testsuite_base") {
3631c75014Sopenharmony_ci  assert(defined(invoker.project_type),
3731c75014Sopenharmony_ci         "project_type is required in target ${target_name}")
3831c75014Sopenharmony_ci
3931c75014Sopenharmony_ci  _part_name = "common"
4031c75014Sopenharmony_ci
4131c75014Sopenharmony_ci  if (defined(invoker.part_name)) {
4231c75014Sopenharmony_ci    _part_name = invoker.part_name
4331c75014Sopenharmony_ci  }
4431c75014Sopenharmony_ci
4531c75014Sopenharmony_ci  precise_build_boolean = true
4631c75014Sopenharmony_ci  if (precise_xts && filter_include(precise_run,
4731c75014Sopenharmony_ci                                    [
4831c75014Sopenharmony_ci                                      "all",
4931c75014Sopenharmony_ci                                      _part_name,
5031c75014Sopenharmony_ci                                    ]) == []) {
5131c75014Sopenharmony_ci    print("precise_xts is on ,${_part_name} is not on build")
5231c75014Sopenharmony_ci    precise_build_boolean = false
5331c75014Sopenharmony_ci  }
5431c75014Sopenharmony_ci  if (precise_build_boolean) {
5531c75014Sopenharmony_ci    _subsystem_name = "common"
5631c75014Sopenharmony_ci    if (defined(invoker.subsystem_name)) {
5731c75014Sopenharmony_ci      _subsystem_name = invoker.subsystem_name
5831c75014Sopenharmony_ci    }
5931c75014Sopenharmony_ci    _project_type = invoker.project_type
6031c75014Sopenharmony_ci
6131c75014Sopenharmony_ci    _build_part_boolean = false
6231c75014Sopenharmony_ci    tmp_subsystem_part = "${_subsystem_name}_${_part_name}"
6331c75014Sopenharmony_ci    _part_script_judge = "//test/xts/tools/build/judgePart.py"
6431c75014Sopenharmony_ci    _script_judge_args1 = [
6531c75014Sopenharmony_ci      rebase_path("$preloader_output_dir") + "/parts_config.json",
6631c75014Sopenharmony_ci      tmp_subsystem_part,
6731c75014Sopenharmony_ci      "judgePart",
6831c75014Sopenharmony_ci    ]
6931c75014Sopenharmony_ci    _build_part_boolean_str = exec_script(rebase_path(_part_script_judge),
7031c75014Sopenharmony_ci                                          _script_judge_args1,
7131c75014Sopenharmony_ci                                          "trim string")
7231c75014Sopenharmony_ci    if (_build_part_boolean_str == "True") {
7331c75014Sopenharmony_ci      _build_part_boolean = true
7431c75014Sopenharmony_ci    }
7531c75014Sopenharmony_ci
7631c75014Sopenharmony_ci    if (_subsystem_name == "kernel" || _subsystem_name == "common") {
7731c75014Sopenharmony_ci      _build_part_boolean = true
7831c75014Sopenharmony_ci    }
7931c75014Sopenharmony_ci
8031c75014Sopenharmony_ci    _test_files = ""
8131c75014Sopenharmony_ci    if (defined(invoker.generated_testfiles)) {
8231c75014Sopenharmony_ci      foreach(file, invoker.generated_testfiles) {
8331c75014Sopenharmony_ci        _test_files =
8431c75014Sopenharmony_ci            _test_files + "," + rebase_path("$root_gen_dir") + "/" + file
8531c75014Sopenharmony_ci      }
8631c75014Sopenharmony_ci    }
8731c75014Sopenharmony_ci
8831c75014Sopenharmony_ci    _is_testbundle = defined(invoker.is_testbundle) && invoker.is_testbundle
8931c75014Sopenharmony_ci
9031c75014Sopenharmony_ci    if (defined(invoker.sub_output_dir)) {
9131c75014Sopenharmony_ci      _output_file_dir = rebase_path(
9231c75014Sopenharmony_ci              "$root_out_dir/tests/moduletest/${invoker.sub_output_dir}")
9331c75014Sopenharmony_ci    } else if (defined(invoker.module_out_path)) {
9431c75014Sopenharmony_ci      _output_file_dir = rebase_path(
9531c75014Sopenharmony_ci              "$root_out_dir/tests/moduletest/${invoker.module_out_path}")
9631c75014Sopenharmony_ci    } else {
9731c75014Sopenharmony_ci      _output_file_dir = rebase_path("$root_out_dir/tests/moduletest")
9831c75014Sopenharmony_ci    }
9931c75014Sopenharmony_ci    _output_file = "${_output_file_dir}/module_${target_name}"
10031c75014Sopenharmony_ci
10131c75014Sopenharmony_ci    if (_project_type == "gtest" || _project_type == "ctestbundle") {
10231c75014Sopenharmony_ci      _output_file = "${_output_file_dir}/${target_name}"
10331c75014Sopenharmony_ci      _archive_filename = "${target_name}"
10431c75014Sopenharmony_ci      if (_build_part_boolean == true) {
10531c75014Sopenharmony_ci        target("ohos_moduletest", "module_${target_name}") {
10631c75014Sopenharmony_ci          forward_variables_from(invoker, "*")
10731c75014Sopenharmony_ci          testonly = true
10831c75014Sopenharmony_ci        }
10931c75014Sopenharmony_ci      } else {
11031c75014Sopenharmony_ci        print(tmp_subsystem_part + " is not build")
11131c75014Sopenharmony_ci        if (defined(invoker.public_configs)) {
11231c75014Sopenharmony_ci          print(invoker.public_configs)
11331c75014Sopenharmony_ci        }
11431c75014Sopenharmony_ci        if (defined(invoker.external_deps)) {
11531c75014Sopenharmony_ci          print(invoker.external_deps)
11631c75014Sopenharmony_ci        }
11731c75014Sopenharmony_ci        if (defined(invoker.deps)) {
11831c75014Sopenharmony_ci          print(invoker.deps)
11931c75014Sopenharmony_ci        }
12031c75014Sopenharmony_ci        if (defined(invoker.configs)) {
12131c75014Sopenharmony_ci          print(invoker.configs)
12231c75014Sopenharmony_ci        }
12331c75014Sopenharmony_ci        if (defined(invoker.sources)) {
12431c75014Sopenharmony_ci          print(invoker.sources)
12531c75014Sopenharmony_ci        }
12631c75014Sopenharmony_ci      }
12731c75014Sopenharmony_ci    } else if (_project_type == "zunit" || _project_type == "javatestbundle") {
12831c75014Sopenharmony_ci      _output_file = "${_output_file_dir}/module_${target_name}.dex"
12931c75014Sopenharmony_ci      _archive_filename = "${target_name}.dex"
13031c75014Sopenharmony_ci      if (_build_part_boolean == true) {
13131c75014Sopenharmony_ci        target("ohos_java_moduletest", "module_${target_name}") {
13231c75014Sopenharmony_ci          forward_variables_from(invoker, "*")
13331c75014Sopenharmony_ci          testonly = true
13431c75014Sopenharmony_ci        }
13531c75014Sopenharmony_ci      }
13631c75014Sopenharmony_ci    } else if (_project_type == "hostjunit") {
13731c75014Sopenharmony_ci      _output_file = "${_output_file_dir}/module_${target_name}.jar"
13831c75014Sopenharmony_ci      if (defined(invoker.final_jar_path)) {
13931c75014Sopenharmony_ci        _output_file = invoker.final_jar_path
14031c75014Sopenharmony_ci      }
14131c75014Sopenharmony_ci      _archive_filename = "${target_name}.jar"
14231c75014Sopenharmony_ci      if (_build_part_boolean == true) {
14331c75014Sopenharmony_ci        target("java_library", "module_${target_name}") {
14431c75014Sopenharmony_ci          forward_variables_from(invoker, "*")
14531c75014Sopenharmony_ci          is_host_library = true
14631c75014Sopenharmony_ci        }
14731c75014Sopenharmony_ci      }
14831c75014Sopenharmony_ci    } else if (_project_type == "testhap" || _project_type == "haptestbundle" ||
14931c75014Sopenharmony_ci               _project_type == "testhapassist" || _project_type == "testapp" ||
15031c75014Sopenharmony_ci               _project_type == "testappassist") {
15131c75014Sopenharmony_ci      assert(defined(invoker.hap_name),
15231c75014Sopenharmony_ci             "hap_name is required in target ${target_name}")
15331c75014Sopenharmony_ci      assert(!defined(invoker.final_hap_path),
15431c75014Sopenharmony_ci             "please use hap_name instead of final_hap_path")
15531c75014Sopenharmony_ci
15631c75014Sopenharmony_ci      _hap_name = invoker.hap_name
15731c75014Sopenharmony_ci      _final_hap_path = ""
15831c75014Sopenharmony_ci      _target_name = ""
15931c75014Sopenharmony_ci      _suite_out_dir = "${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}"
16031c75014Sopenharmony_ci      subsystem_name = XTS_SUITENAME
16131c75014Sopenharmony_ci      if (subsystem_name == "acts") {
16231c75014Sopenharmony_ci        _suite_out_dir = "${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}/acts"
16331c75014Sopenharmony_ci      }
16431c75014Sopenharmony_ci      if (_project_type == "testhapassist") {
16531c75014Sopenharmony_ci        _final_hap_path = "${_suite_out_dir}/testcases/${_hap_name}.hap"
16631c75014Sopenharmony_ci        _target_name = target_name
16731c75014Sopenharmony_ci      } else {
16831c75014Sopenharmony_ci        _final_hap_path = "${SUITES_OUTPUT_ROOT}/haps/${_hap_name}.hap"
16931c75014Sopenharmony_ci        _target_name = "module_${target_name}"
17031c75014Sopenharmony_ci      }
17131c75014Sopenharmony_ci      _output_file = _final_hap_path
17231c75014Sopenharmony_ci      _archive_filename = "${_hap_name}.hap"
17331c75014Sopenharmony_ci      if (_build_part_boolean == true) {
17431c75014Sopenharmony_ci        if (_project_type == "testapp") {
17531c75014Sopenharmony_ci          target("ohos_app", _target_name) {
17631c75014Sopenharmony_ci            forward_variables_from(invoker, "*")
17731c75014Sopenharmony_ci            subsystem_name = XTS_SUITENAME
17831c75014Sopenharmony_ci            hap_out_dir = "${SUITES_OUTPUT_ROOT}/haps"
17931c75014Sopenharmony_ci            testonly = true
18031c75014Sopenharmony_ci          }
18131c75014Sopenharmony_ci        } else if (_project_type == "testappassist") {
18231c75014Sopenharmony_ci          target("ohos_app", target_name) {
18331c75014Sopenharmony_ci            forward_variables_from(invoker, "*")
18431c75014Sopenharmony_ci            subsystem_name = XTS_SUITENAME
18531c75014Sopenharmony_ci            hap_out_dir = "${_suite_out_dir}/testcases"
18631c75014Sopenharmony_ci            testonly = true
18731c75014Sopenharmony_ci          }
18831c75014Sopenharmony_ci        } else {
18931c75014Sopenharmony_ci          target("ohos_hap", _target_name) {
19031c75014Sopenharmony_ci            forward_variables_from(invoker, "*")
19131c75014Sopenharmony_ci            subsystem_name = XTS_SUITENAME
19231c75014Sopenharmony_ci            final_hap_path = _final_hap_path
19331c75014Sopenharmony_ci            testonly = true
19431c75014Sopenharmony_ci          }
19531c75014Sopenharmony_ci        }
19631c75014Sopenharmony_ci      } else {
19731c75014Sopenharmony_ci        print(tmp_subsystem_part + " is not build")
19831c75014Sopenharmony_ci        not_needed(invoker, "*")
19931c75014Sopenharmony_ci      }
20031c75014Sopenharmony_ci    } else if (_project_type == "pythontest") {
20131c75014Sopenharmony_ci      if (defined(invoker.outputs_dir)) {
20231c75014Sopenharmony_ci        _out_put_dir = invoker.outputs_dir
20331c75014Sopenharmony_ci        _archive_filename = "${_subsystem_name}/${_out_put_dir}"
20431c75014Sopenharmony_ci      } else {
20531c75014Sopenharmony_ci        _archive_filename = "${_subsystem_name}"
20631c75014Sopenharmony_ci      }
20731c75014Sopenharmony_ci      _test_files = invoker.output_file
20831c75014Sopenharmony_ci      _deps = []
20931c75014Sopenharmony_ci      if (defined(invoker.deps)) {
21031c75014Sopenharmony_ci        _deps = invoker.deps
21131c75014Sopenharmony_ci      }
21231c75014Sopenharmony_ci    } else if (_project_type == "js_test_hap") {
21331c75014Sopenharmony_ci      _hap_name = invoker.test_hap_name
21431c75014Sopenharmony_ci      _output_file = invoker.hap_source_path
21531c75014Sopenharmony_ci      _archive_filename = "${_hap_name}.hap"
21631c75014Sopenharmony_ci    }
21731c75014Sopenharmony_ci
21831c75014Sopenharmony_ci    _apilibrary_deps = ""
21931c75014Sopenharmony_ci    if (_is_testbundle && defined(invoker.deps)) {
22031c75014Sopenharmony_ci      foreach(dep, invoker.deps) {
22131c75014Sopenharmony_ci        _apilibrary_deps = _apilibrary_deps + "," + dep
22231c75014Sopenharmony_ci      }
22331c75014Sopenharmony_ci    }
22431c75014Sopenharmony_ci
22531c75014Sopenharmony_ci    if (_project_type != "pythontest" && _project_type != "js_test_hap" &&
22631c75014Sopenharmony_ci        _project_type != "testhapassist" && _project_type != "testappassist") {
22731c75014Sopenharmony_ci      _deps = [ ":module_${target_name}" ]
22831c75014Sopenharmony_ci    } else if (_project_type == "pythontest") {
22931c75014Sopenharmony_ci      print("this is pythontest")
23031c75014Sopenharmony_ci    } else if (_project_type != "testhapassist" &&
23131c75014Sopenharmony_ci               _project_type != "testappassist") {
23231c75014Sopenharmony_ci      _deps = []
23331c75014Sopenharmony_ci    }
23431c75014Sopenharmony_ci    _suite_out_dir = "${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}"
23531c75014Sopenharmony_ci
23631c75014Sopenharmony_ci    _archive_testfile = ""
23731c75014Sopenharmony_ci    subsystem_name = XTS_SUITENAME
23831c75014Sopenharmony_ci    if (subsystem_name == "acts") {
23931c75014Sopenharmony_ci      _suite_out_dir = "${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}/acts"
24031c75014Sopenharmony_ci    }
24131c75014Sopenharmony_ci    if (_project_type == "testhapassist" || _project_type == "testappassist") {
24231c75014Sopenharmony_ci      _archive_testfile =
24331c75014Sopenharmony_ci          "${_suite_out_dir}/testcases/module_${_archive_filename}"
24431c75014Sopenharmony_ci    } else if (_project_type == "testapp") {
24531c75014Sopenharmony_ci      _hap_name = invoker.hap_name
24631c75014Sopenharmony_ci      if (_hap_name == "validator" && subsystem_name == "acts") {
24731c75014Sopenharmony_ci        _suite_out_dir = "${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}/acts-validator"
24831c75014Sopenharmony_ci        _archive_testfile = "${_suite_out_dir}/testcases/${_archive_filename}"
24931c75014Sopenharmony_ci      } else {
25031c75014Sopenharmony_ci        _archive_testfile = "${_suite_out_dir}/testcases/${_archive_filename}"
25131c75014Sopenharmony_ci      }
25231c75014Sopenharmony_ci    } else {
25331c75014Sopenharmony_ci      _archive_testfile = "${_suite_out_dir}/testcases/${_archive_filename}"
25431c75014Sopenharmony_ci    }
25531c75014Sopenharmony_ci    _arguments = [
25631c75014Sopenharmony_ci      "build_module_with_testbundle",
25731c75014Sopenharmony_ci      "--build_gen_dir",
25831c75014Sopenharmony_ci      rebase_path("$root_gen_dir"),
25931c75014Sopenharmony_ci      "--build_target_name",
26031c75014Sopenharmony_ci      target_name,
26131c75014Sopenharmony_ci      "--buildgen_testfile",
26231c75014Sopenharmony_ci      rebase_path(_output_file),
26331c75014Sopenharmony_ci      "--project_path",
26431c75014Sopenharmony_ci      rebase_path("."),
26531c75014Sopenharmony_ci      "--test_xml",
26631c75014Sopenharmony_ci      rebase_path(TESTCONFIG_FILENAME),
26731c75014Sopenharmony_ci      "--project_type",
26831c75014Sopenharmony_ci      _project_type,
26931c75014Sopenharmony_ci      "--suite_out_dir",
27031c75014Sopenharmony_ci      rebase_path("${_suite_out_dir}"),
27131c75014Sopenharmony_ci      "--archive_testfile",
27231c75014Sopenharmony_ci      rebase_path("${_archive_testfile}"),
27331c75014Sopenharmony_ci    ]
27431c75014Sopenharmony_ci
27531c75014Sopenharmony_ci    if (_subsystem_name != "") {
27631c75014Sopenharmony_ci      _arguments += [
27731c75014Sopenharmony_ci        "--subsystem_name",
27831c75014Sopenharmony_ci        _subsystem_name,
27931c75014Sopenharmony_ci      ]
28031c75014Sopenharmony_ci    }
28131c75014Sopenharmony_ci    if (_part_name != "") {
28231c75014Sopenharmony_ci      _arguments += [
28331c75014Sopenharmony_ci        "--part_name",
28431c75014Sopenharmony_ci        _part_name,
28531c75014Sopenharmony_ci      ]
28631c75014Sopenharmony_ci    }
28731c75014Sopenharmony_ci    if (_apilibrary_deps != "") {
28831c75014Sopenharmony_ci      _arguments += [
28931c75014Sopenharmony_ci        "--apilibrary_deps",
29031c75014Sopenharmony_ci        _apilibrary_deps,
29131c75014Sopenharmony_ci      ]
29231c75014Sopenharmony_ci    }
29331c75014Sopenharmony_ci
29431c75014Sopenharmony_ci    if (_test_files != "") {
29531c75014Sopenharmony_ci      _arguments += [
29631c75014Sopenharmony_ci        "--test_files",
29731c75014Sopenharmony_ci        _test_files,
29831c75014Sopenharmony_ci      ]
29931c75014Sopenharmony_ci    }
30031c75014Sopenharmony_ci    if (_build_part_boolean == true && _project_type != "testhapassist" &&
30131c75014Sopenharmony_ci        _project_type != "testappassist") {
30231c75014Sopenharmony_ci      action(target_name) {
30331c75014Sopenharmony_ci        deps = _deps
30431c75014Sopenharmony_ci        script = rebase_path("//test/xts/tools/build/suite.py")
30531c75014Sopenharmony_ci        args = _arguments
30631c75014Sopenharmony_ci        outputs = [ _archive_testfile ]
30731c75014Sopenharmony_ci        testonly = true
30831c75014Sopenharmony_ci      }
30931c75014Sopenharmony_ci    } else if (_build_part_boolean == false) {
31031c75014Sopenharmony_ci      action(target_name) {
31131c75014Sopenharmony_ci        script = rebase_path("//test/xts/tools/build/judgePart.py")
31231c75014Sopenharmony_ci        args = _arguments
31331c75014Sopenharmony_ci        outputs = [ _archive_testfile ]
31431c75014Sopenharmony_ci        testonly = true
31531c75014Sopenharmony_ci      }
31631c75014Sopenharmony_ci      if (defined(_deps)) {
31731c75014Sopenharmony_ci        print(_deps)
31831c75014Sopenharmony_ci      }
31931c75014Sopenharmony_ci    }
32031c75014Sopenharmony_ci  } else {
32131c75014Sopenharmony_ci    group(target_name) {
32231c75014Sopenharmony_ci      print(target_name + " is not build")
32331c75014Sopenharmony_ci      not_needed(invoker, "*")
32431c75014Sopenharmony_ci    }
32531c75014Sopenharmony_ci  }
32631c75014Sopenharmony_ci}
32731c75014Sopenharmony_ci
32831c75014Sopenharmony_citemplate("ohos_moduletest_suite") {
32931c75014Sopenharmony_ci  target("ohos_testsuite_base", "${target_name}") {
33031c75014Sopenharmony_ci    forward_variables_from(invoker, "*")
33131c75014Sopenharmony_ci    if (!defined(module_out_path)) {
33231c75014Sopenharmony_ci      module_out_path = "xts/modules"
33331c75014Sopenharmony_ci    }
33431c75014Sopenharmony_ci    project_type = "gtest"
33531c75014Sopenharmony_ci  }
33631c75014Sopenharmony_ci}
33731c75014Sopenharmony_ci
33831c75014Sopenharmony_citemplate("ohos_hap_suite") {
33931c75014Sopenharmony_ci  target("ohos_testsuite_base", "${target_name}") {
34031c75014Sopenharmony_ci    forward_variables_from(invoker, "*")
34131c75014Sopenharmony_ci
34231c75014Sopenharmony_ci    # auto add HJUnitRunner entry ability and test-framework
34331c75014Sopenharmony_ci    if (defined(hap_profile)) {
34431c75014Sopenharmony_ci      # NOTE:: the GN tool disallow source files located in the ${out_dir}
34531c75014Sopenharmony_ci      # so we put the generated files in the xts dir. remember to REMOVE these.
34631c75014Sopenharmony_ci      _profile_relative_path = rebase_path(hap_profile, rebase_path(XTS_ROOT))
34731c75014Sopenharmony_ci      _fixed_profile_path =
34831c75014Sopenharmony_ci          "${XTS_ROOT}/autogen_apiobjs/${_profile_relative_path}"
34931c75014Sopenharmony_ci      _fixer_script = rebase_path(
35031c75014Sopenharmony_ci              "//test/xts/tools/build/adapter/haptest_manifest_fixer.py")
35131c75014Sopenharmony_ci      exec_script(_fixer_script,
35231c75014Sopenharmony_ci                  [
35331c75014Sopenharmony_ci                    "add_entryability",
35431c75014Sopenharmony_ci                    "--raw_file=" + rebase_path(hap_profile),
35531c75014Sopenharmony_ci                    "--dest_file=" + rebase_path(_fixed_profile_path),
35631c75014Sopenharmony_ci                  ])
35731c75014Sopenharmony_ci      hap_profile = _fixed_profile_path
35831c75014Sopenharmony_ci    }
35931c75014Sopenharmony_ci
36031c75014Sopenharmony_ci    if (defined(deps)) {
36131c75014Sopenharmony_ci      deps += [ "//test/xts/tools/hjunit:testkit_harmonyjunitrunner_java" ]
36231c75014Sopenharmony_ci    } else {
36331c75014Sopenharmony_ci      deps = [ "//test/xts/tools/hjunit:testkit_harmonyjunitrunner_java" ]
36431c75014Sopenharmony_ci    }
36531c75014Sopenharmony_ci
36631c75014Sopenharmony_ci    project_type = "testhap"
36731c75014Sopenharmony_ci  }
36831c75014Sopenharmony_ci}
36931c75014Sopenharmony_ci
37031c75014Sopenharmony_citemplate("ohos_js_hap_suite") {
37131c75014Sopenharmony_ci  target("ohos_testsuite_base", "${target_name}") {
37231c75014Sopenharmony_ci    forward_variables_from(invoker, "*")
37331c75014Sopenharmony_ci    project_type = "testhap"
37431c75014Sopenharmony_ci
37531c75014Sopenharmony_ci    #js_build_mode = "debug"
37631c75014Sopenharmony_ci  }
37731c75014Sopenharmony_ci}
37831c75014Sopenharmony_ci
37931c75014Sopenharmony_citemplate("ohos_js_app_suite") {
38031c75014Sopenharmony_ci  target("ohos_testsuite_base", "${target_name}") {
38131c75014Sopenharmony_ci    forward_variables_from(invoker, "*")
38231c75014Sopenharmony_ci    project_type = "testapp"
38331c75014Sopenharmony_ci  }
38431c75014Sopenharmony_ci}
38531c75014Sopenharmony_ci
38631c75014Sopenharmony_citemplate("ohos_shell_app_suite") {
38731c75014Sopenharmony_ci  target("ohos_adapter_shell_app_suite", "${target_name}") {
38831c75014Sopenharmony_ci    forward_variables_from(invoker, "*")
38931c75014Sopenharmony_ci  }
39031c75014Sopenharmony_ci}
39131c75014Sopenharmony_ci
39231c75014Sopenharmony_citemplate("ohos_prebuilt_suite") {
39331c75014Sopenharmony_ci  assert(!defined(invoker.source_files) || !defined(invoker.jar_path) ||
39431c75014Sopenharmony_ci             !defined(invoker.source_dir),
39531c75014Sopenharmony_ci         "source_files, jar_path or source_dir must be specified one.")
39631c75014Sopenharmony_ci  assert(!defined(invoker.final_jar_path),
39731c75014Sopenharmony_ci         "final_jar_path is not allowed in target ${target_name}")
39831c75014Sopenharmony_ci
39931c75014Sopenharmony_ci  if (defined(invoker.jar_path)) {
40031c75014Sopenharmony_ci    _output_name = "${target_name}.jar"
40131c75014Sopenharmony_ci    if (defined(invoker.output_name)) {
40231c75014Sopenharmony_ci      _output_name = "${invoker.output_name}.jar"
40331c75014Sopenharmony_ci    }
40431c75014Sopenharmony_ci
40531c75014Sopenharmony_ci    _output_type = "tools"
40631c75014Sopenharmony_ci    if (defined(invoker.output_type)) {
40731c75014Sopenharmony_ci      _output_type = invoker.output_type
40831c75014Sopenharmony_ci    }
40931c75014Sopenharmony_ci
41031c75014Sopenharmony_ci    _final_jar_path =
41131c75014Sopenharmony_ci        "${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}/${_output_type}/${_output_name}"
41231c75014Sopenharmony_ci
41331c75014Sopenharmony_ci    target("java_prebuilt", "${target_name}") {
41431c75014Sopenharmony_ci      forward_variables_from(invoker, "*")
41531c75014Sopenharmony_ci      final_jar_path = _final_jar_path
41631c75014Sopenharmony_ci      is_host_library = true
41731c75014Sopenharmony_ci    }
41831c75014Sopenharmony_ci  } else {
41931c75014Sopenharmony_ci    assert(defined(invoker.output_dir),
42031c75014Sopenharmony_ci           "output_dir is require in target ${target_name}")
42131c75014Sopenharmony_ci    _outputs = []
42231c75014Sopenharmony_ci    _copy_args = [
42331c75014Sopenharmony_ci      "--method_name",
42431c75014Sopenharmony_ci      "copy_file",
42531c75014Sopenharmony_ci    ]
42631c75014Sopenharmony_ci    _deps = []
42731c75014Sopenharmony_ci    _output_dir = "${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}/${invoker.output_dir}"
42831c75014Sopenharmony_ci    if (defined(invoker.source_dir)) {
42931c75014Sopenharmony_ci      _copy_args += [
43031c75014Sopenharmony_ci        "--arguments",
43131c75014Sopenharmony_ci        "output=" + rebase_path(_output_dir) + "#source_dirs=" +
43231c75014Sopenharmony_ci            rebase_path(invoker.source_dir) + "#to_dir=True",
43331c75014Sopenharmony_ci      ]
43431c75014Sopenharmony_ci      _outputs = [ _output_dir ]
43531c75014Sopenharmony_ci    } else if (defined(invoker.source_files)) {
43631c75014Sopenharmony_ci      _sources = ""
43731c75014Sopenharmony_ci      foreach(src, invoker.source_files) {
43831c75014Sopenharmony_ci        _sources = _sources + rebase_path(src) + ","
43931c75014Sopenharmony_ci      }
44031c75014Sopenharmony_ci      _copy_args += [
44131c75014Sopenharmony_ci        "--arguments",
44231c75014Sopenharmony_ci        "output=" + rebase_path(_output_dir) + "#sources=" + _sources +
44331c75014Sopenharmony_ci            "#to_dir=True",
44431c75014Sopenharmony_ci      ]
44531c75014Sopenharmony_ci      _outputs = [ _output_dir ]
44631c75014Sopenharmony_ci    }
44731c75014Sopenharmony_ci    if (defined(invoker.deps)) {
44831c75014Sopenharmony_ci      _deps = invoker.deps
44931c75014Sopenharmony_ci    }
45031c75014Sopenharmony_ci    action(target_name) {
45131c75014Sopenharmony_ci      script = rebase_path("//test/xts/tools/build/utils.py")
45231c75014Sopenharmony_ci      deps = _deps
45331c75014Sopenharmony_ci      args = _copy_args
45431c75014Sopenharmony_ci      outputs = _outputs
45531c75014Sopenharmony_ci    }
45631c75014Sopenharmony_ci  }
45731c75014Sopenharmony_ci}
45831c75014Sopenharmony_ci
45931c75014Sopenharmony_citemplate("ohos_deploy_xdevice") {
46031c75014Sopenharmony_ci  _suite_out_dir = "${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}"
46131c75014Sopenharmony_ci  subsystem_name = XTS_SUITENAME
46231c75014Sopenharmony_ci  if (subsystem_name == "acts") {
46331c75014Sopenharmony_ci    _hap_name = target_name
46431c75014Sopenharmony_ci    if (_hap_name == "validator") {
46531c75014Sopenharmony_ci      _suite_out_dir = "${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}/acts-validator"
46631c75014Sopenharmony_ci    } else {
46731c75014Sopenharmony_ci      _suite_out_dir = "${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}/acts"
46831c75014Sopenharmony_ci    }
46931c75014Sopenharmony_ci  }
47031c75014Sopenharmony_ci
47131c75014Sopenharmony_ci  _args = [
47231c75014Sopenharmony_ci    "build_xdevice",
47331c75014Sopenharmony_ci    "--source_dir",
47431c75014Sopenharmony_ci    rebase_path("//test/testfwk/xdevice"),
47531c75014Sopenharmony_ci    "--suite_out_dir",
47631c75014Sopenharmony_ci    rebase_path(_suite_out_dir),
47731c75014Sopenharmony_ci  ]
47831c75014Sopenharmony_ci
47931c75014Sopenharmony_ci  if (defined(invoker.configs_dir)) {
48031c75014Sopenharmony_ci    _args += [
48131c75014Sopenharmony_ci      "--configs_dir",
48231c75014Sopenharmony_ci      rebase_path(rebase_path(invoker.configs_dir)),
48331c75014Sopenharmony_ci    ]
48431c75014Sopenharmony_ci  }
48531c75014Sopenharmony_ci
48631c75014Sopenharmony_ci  if (defined(invoker.resources_dir)) {
48731c75014Sopenharmony_ci    _args += [
48831c75014Sopenharmony_ci      "--resources_dir",
48931c75014Sopenharmony_ci      rebase_path(rebase_path(invoker.resources_dir)),
49031c75014Sopenharmony_ci    ]
49131c75014Sopenharmony_ci  }
49231c75014Sopenharmony_ci
49331c75014Sopenharmony_ci  action(target_name) {
49431c75014Sopenharmony_ci    testonly = true
49531c75014Sopenharmony_ci    script = rebase_path("//test/xts/tools/build/suite.py")
49631c75014Sopenharmony_ci    args = _args
49731c75014Sopenharmony_ci    outputs = [
49831c75014Sopenharmony_ci      "${_suite_out_dir}/tools/xdevice-ohos-0.0.0.tar.gz",
49931c75014Sopenharmony_ci      "${_suite_out_dir}/tools/xdevice-0.0.0.tar.gz",
50031c75014Sopenharmony_ci      "${_suite_out_dir}/tools/xdevice-devicetest-0.0.0.tar.gz",
50131c75014Sopenharmony_ci      "${_suite_out_dir}/tools/run.sh",
50231c75014Sopenharmony_ci      "${_suite_out_dir}/tools/run.bat",
50331c75014Sopenharmony_ci    ]
50431c75014Sopenharmony_ci  }
50531c75014Sopenharmony_ci}
50631c75014Sopenharmony_ci
50731c75014Sopenharmony_citemplate("ohos_test_suite") {
50831c75014Sopenharmony_ci  _output = "${SUITES_OUTPUT_ROOT}/${target_name}.zip"
50931c75014Sopenharmony_ci  _suite_path = rebase_path("${SUITES_OUTPUT_ROOT}/${XTS_SUITENAME}")
51031c75014Sopenharmony_ci  _suite_archive_dir = rebase_path("${SUITE_ARCHIVE_DIR}")
51131c75014Sopenharmony_ci  _prebuilts_files = rebase_path("//xts/resource")
51231c75014Sopenharmony_ci  _gen_args = [
51331c75014Sopenharmony_ci    "archive_suite",
51431c75014Sopenharmony_ci    "--suite_path",
51531c75014Sopenharmony_ci    _suite_path,
51631c75014Sopenharmony_ci    "--prebuilts_resource",
51731c75014Sopenharmony_ci    _prebuilts_files,
51831c75014Sopenharmony_ci    "--suite_archive_dir",
51931c75014Sopenharmony_ci    _suite_archive_dir,
52031c75014Sopenharmony_ci    "--make_archive",
52131c75014Sopenharmony_ci    "${make_archive}",
52231c75014Sopenharmony_ci  ]
52331c75014Sopenharmony_ci
52431c75014Sopenharmony_ci  _deps = []
52531c75014Sopenharmony_ci  if (defined(invoker.deps)) {
52631c75014Sopenharmony_ci    _deps += invoker.deps
52731c75014Sopenharmony_ci  }
52831c75014Sopenharmony_ci
52931c75014Sopenharmony_ci  action(target_name) {
53031c75014Sopenharmony_ci    testonly = true
53131c75014Sopenharmony_ci    script = rebase_path("//test/xts/tools/build/suite.py")
53231c75014Sopenharmony_ci    deps = _deps
53331c75014Sopenharmony_ci    args = _gen_args
53431c75014Sopenharmony_ci    outputs = [ _output ]
53531c75014Sopenharmony_ci  }
53631c75014Sopenharmony_ci}
53731c75014Sopenharmony_ci
53831c75014Sopenharmony_citemplate("pythontest_suite") {
53931c75014Sopenharmony_ci  assert(defined(invoker.script), "script is required in target ${target_name}")
54031c75014Sopenharmony_ci
54131c75014Sopenharmony_ci  _subsystem_name = ""
54231c75014Sopenharmony_ci  if (defined(invoker.subsystem_name)) {
54331c75014Sopenharmony_ci    _subsystem_name = invoker.subsystem_name
54431c75014Sopenharmony_ci  } else {
54531c75014Sopenharmony_ci    _local_path = rebase_path(".")
54631c75014Sopenharmony_ci    _args1 = [
54731c75014Sopenharmony_ci      "--method_name",
54831c75014Sopenharmony_ci      "get_subsystem_name",
54931c75014Sopenharmony_ci      "--arguments",
55031c75014Sopenharmony_ci      "path=${_local_path}",
55131c75014Sopenharmony_ci    ]
55231c75014Sopenharmony_ci    _subsystem_name =
55331c75014Sopenharmony_ci        exec_script(rebase_path("//test/xts/tools/build/utils.py"),
55431c75014Sopenharmony_ci                    _args1,
55531c75014Sopenharmony_ci                    "trim string")
55631c75014Sopenharmony_ci  }
55731c75014Sopenharmony_ci  _deps = []
55831c75014Sopenharmony_ci  if (defined(invoker.deps)) {
55931c75014Sopenharmony_ci    _deps = invoker.deps + _deps
56031c75014Sopenharmony_ci  }
56131c75014Sopenharmony_ci  _outputs_dir = ""
56231c75014Sopenharmony_ci  if (defined(invoker.outputs_dir)) {
56331c75014Sopenharmony_ci    _outputs_dir = invoker.outputs_dir
56431c75014Sopenharmony_ci  }
56531c75014Sopenharmony_ci  _output_file = rebase_path("${invoker.script}")
56631c75014Sopenharmony_ci
56731c75014Sopenharmony_ci  target("ohos_testsuite_base", "${target_name}") {
56831c75014Sopenharmony_ci    project_type = "pythontest"
56931c75014Sopenharmony_ci    subsystem_name = _subsystem_name
57031c75014Sopenharmony_ci    output_file = _output_file
57131c75014Sopenharmony_ci    deps = _deps
57231c75014Sopenharmony_ci    outputs_dir = _outputs_dir
57331c75014Sopenharmony_ci  }
57431c75014Sopenharmony_ci}
57531c75014Sopenharmony_ci
57631c75014Sopenharmony_citemplate("executable_suite") {
57731c75014Sopenharmony_ci  assert(defined(invoker.suite_name),
57831c75014Sopenharmony_ci         "suite_name is required in target ${target_name}")
57931c75014Sopenharmony_ci  _suite_name = invoker.suite_name
58031c75014Sopenharmony_ci  _local_path = rebase_path(".")
58131c75014Sopenharmony_ci  _args1 = [
58231c75014Sopenharmony_ci    "--method_name",
58331c75014Sopenharmony_ci    "get_subsystem_name",
58431c75014Sopenharmony_ci    "--arguments",
58531c75014Sopenharmony_ci    "path=${_local_path}",
58631c75014Sopenharmony_ci  ]
58731c75014Sopenharmony_ci  _subsystem_name = exec_script(rebase_path("//test/xts/tools/build/utils.py"),
58831c75014Sopenharmony_ci                                _args1,
58931c75014Sopenharmony_ci                                "trim string")
59031c75014Sopenharmony_ci
59131c75014Sopenharmony_ci  _outputs_dir = ""
59231c75014Sopenharmony_ci  if (defined(invoker.outputs_dir)) {
59331c75014Sopenharmony_ci    _outputs_dir = "${invoker.outputs_dir}"
59431c75014Sopenharmony_ci  }
59531c75014Sopenharmony_ci  ohos_executable(target_name) {
59631c75014Sopenharmony_ci    forward_variables_from(invoker,
59731c75014Sopenharmony_ci                           "*",
59831c75014Sopenharmony_ci                           [
59931c75014Sopenharmony_ci                             "test_type",
60031c75014Sopenharmony_ci                             "module_out_path",
60131c75014Sopenharmony_ci                             "visibility",
60231c75014Sopenharmony_ci                           ])
60331c75014Sopenharmony_ci    forward_variables_from(invoker, [ "visibility" ])
60431c75014Sopenharmony_ci    if (!defined(deps)) {
60531c75014Sopenharmony_ci      deps = []
60631c75014Sopenharmony_ci    }
60731c75014Sopenharmony_ci
60831c75014Sopenharmony_ci    subsystem_name = "tests"
60931c75014Sopenharmony_ci    part_name = "ssts"
61031c75014Sopenharmony_ci    ohos_test = true
61131c75014Sopenharmony_ci    testonly = true
61231c75014Sopenharmony_ci    output_name = "$target_name"
61331c75014Sopenharmony_ci    test_output_dir = "$SUITES_OUTPUT_ROOT/${_suite_name}/testcases/${_subsystem_name}/${_outputs_dir}"
61431c75014Sopenharmony_ci    if (defined(invoker.output_extension)) {
61531c75014Sopenharmony_ci      output_extension = invoker.output_extension
61631c75014Sopenharmony_ci    }
61731c75014Sopenharmony_ci  }
61831c75014Sopenharmony_ci}
61931c75014Sopenharmony_ci
62031c75014Sopenharmony_citemplate("js_hap_suite") {
62131c75014Sopenharmony_ci  assert(defined(invoker.hap_source_path),
62231c75014Sopenharmony_ci         "hap_source_path is required in target ${target_name}")
62331c75014Sopenharmony_ci  assert(defined(invoker.test_hap_name),
62431c75014Sopenharmony_ci         "test_hap_name is required in target ${target_name}")
62531c75014Sopenharmony_ci  if (defined(invoker.deps)) {
62631c75014Sopenharmony_ci    _deps = invoker.deps
62731c75014Sopenharmony_ci  }
62831c75014Sopenharmony_ci  target("ohos_testsuite_base", "${target_name}") {
62931c75014Sopenharmony_ci    forward_variables_from(invoker, "*")
63031c75014Sopenharmony_ci    project_type = "js_test_hap"
63131c75014Sopenharmony_ci  }
63231c75014Sopenharmony_ci}
63331c75014Sopenharmony_ci
63431c75014Sopenharmony_citemplate("ohos_hap_assist_suite") {
63531c75014Sopenharmony_ci  target("ohos_testsuite_base", target_name) {
63631c75014Sopenharmony_ci    forward_variables_from(invoker, "*")
63731c75014Sopenharmony_ci    project_type = "testhapassist"
63831c75014Sopenharmony_ci  }
63931c75014Sopenharmony_ci}
64031c75014Sopenharmony_ci
64131c75014Sopenharmony_citemplate("ohos_app_assist_suite") {
64231c75014Sopenharmony_ci  target("ohos_testsuite_base", target_name) {
64331c75014Sopenharmony_ci    forward_variables_from(invoker, "*")
64431c75014Sopenharmony_ci    project_type = "testappassist"
64531c75014Sopenharmony_ci  }
64631c75014Sopenharmony_ci}
64731c75014Sopenharmony_ci
64831c75014Sopenharmony_citemplate("ohos_sh_assist_suite") {
64931c75014Sopenharmony_ci  _part_name = "common"
65031c75014Sopenharmony_ci
65131c75014Sopenharmony_ci  if (defined(invoker.part_name)) {
65231c75014Sopenharmony_ci    _part_name = invoker.part_name
65331c75014Sopenharmony_ci  }
65431c75014Sopenharmony_ci
65531c75014Sopenharmony_ci  precise_build_boolean = true
65631c75014Sopenharmony_ci  if (precise_xts && filter_include(precise_run,
65731c75014Sopenharmony_ci                                    [
65831c75014Sopenharmony_ci                                      "all",
65931c75014Sopenharmony_ci                                      _part_name,
66031c75014Sopenharmony_ci                                    ]) == []) {
66131c75014Sopenharmony_ci    print("precise_xts is on ,${_part_name} is not on build")
66231c75014Sopenharmony_ci    precise_build_boolean = false
66331c75014Sopenharmony_ci  }
66431c75014Sopenharmony_ci
66531c75014Sopenharmony_ci  if (precise_build_boolean) {
66631c75014Sopenharmony_ci    action(target_name) {
66731c75014Sopenharmony_ci      forward_variables_from(invoker, "*")
66831c75014Sopenharmony_ci    }
66931c75014Sopenharmony_ci  } else {
67031c75014Sopenharmony_ci    group(target_name) {
67131c75014Sopenharmony_ci      print(target_name + " is not build")
67231c75014Sopenharmony_ci      not_needed(invoker, "*")
67331c75014Sopenharmony_ci    }
67431c75014Sopenharmony_ci  }
67531c75014Sopenharmony_ci}
676