15f9996aaSopenharmony_ci# Copyright (c) 2020 Huawei Device Co., Ltd.
25f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
35f9996aaSopenharmony_ci# you may not use this file except in compliance with the License.
45f9996aaSopenharmony_ci# You may obtain a copy of the License at
55f9996aaSopenharmony_ci#
65f9996aaSopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
75f9996aaSopenharmony_ci#
85f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software
95f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
105f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
115f9996aaSopenharmony_ci# See the License for the specific language governing permissions and
125f9996aaSopenharmony_ci# limitations under the License.
135f9996aaSopenharmony_ci
145f9996aaSopenharmony_ciimport("//build/lite/config/subsystem/aafwk/path.gni")
155f9996aaSopenharmony_ci
165f9996aaSopenharmony_ci# liteos c test template
175f9996aaSopenharmony_ci
185f9996aaSopenharmony_citest_common_include_dirs = [ "//third_party/googletest/googletest/include" ]
195f9996aaSopenharmony_ci
205f9996aaSopenharmony_citest_include_dirs = [
215f9996aaSopenharmony_ci  "//commonlibrary/utils_lite/include",
225f9996aaSopenharmony_ci  "//third_party/bounds_checking_function/include",
235f9996aaSopenharmony_ci]
245f9996aaSopenharmony_ci
255f9996aaSopenharmony_citemplate("_lite_testcase_resources") {
265f9996aaSopenharmony_ci  assert(defined(invoker.testcase_target_name))
275f9996aaSopenharmony_ci  assert(defined(invoker._output_dir))
285f9996aaSopenharmony_ci  _deps = []
295f9996aaSopenharmony_ci  if (defined(invoker.deps)) {
305f9996aaSopenharmony_ci    _deps += invoker.deps
315f9996aaSopenharmony_ci  }
325f9996aaSopenharmony_ci  action(target_name) {
335f9996aaSopenharmony_ci    if (defined(invoker.testonly)) {
345f9996aaSopenharmony_ci      testonly = invoker.testonly
355f9996aaSopenharmony_ci    }
365f9996aaSopenharmony_ci    deps = _deps
375f9996aaSopenharmony_ci    inputs = []
385f9996aaSopenharmony_ci    script = "//build/lite/testfwk/lite_testcase_resource_copy.py"
395f9996aaSopenharmony_ci    output_file = "$target_out_dir/$target_name.json"
405f9996aaSopenharmony_ci    outputs = [ output_file ]
415f9996aaSopenharmony_ci    args = []
425f9996aaSopenharmony_ci    if (defined(invoker.resource_config_file)) {
435f9996aaSopenharmony_ci      args += [
445f9996aaSopenharmony_ci        "--resource-config-file",
455f9996aaSopenharmony_ci        rebase_path(invoker.resource_config_file, root_build_dir),
465f9996aaSopenharmony_ci      ]
475f9996aaSopenharmony_ci      inputs += [ invoker.resource_config_file ]
485f9996aaSopenharmony_ci    }
495f9996aaSopenharmony_ci    args += [
505f9996aaSopenharmony_ci      "--testcase-target-name",
515f9996aaSopenharmony_ci      invoker.testcase_target_name,
525f9996aaSopenharmony_ci      "--part-build-out-path",
535f9996aaSopenharmony_ci      rebase_path(root_out_dir, root_build_dir),
545f9996aaSopenharmony_ci      "--resource-output-path",
555f9996aaSopenharmony_ci      rebase_path(invoker._output_dir + "/resource", root_build_dir),
565f9996aaSopenharmony_ci      "--output-file",
575f9996aaSopenharmony_ci      rebase_path(output_file, root_build_dir),
585f9996aaSopenharmony_ci    ]
595f9996aaSopenharmony_ci  }
605f9996aaSopenharmony_ci}
615f9996aaSopenharmony_ci
625f9996aaSopenharmony_citemplate("unittest") {
635f9996aaSopenharmony_ci  archive_dir_name = "test_info"
645f9996aaSopenharmony_ci  _output_dir = ""
655f9996aaSopenharmony_ci  if (defined(invoker.output_dir)) {
665f9996aaSopenharmony_ci    _output_dir = invoker.output_dir
675f9996aaSopenharmony_ci  } else {
685f9996aaSopenharmony_ci    _output_dir = "${root_out_dir}/${archive_dir_name}/unittest"
695f9996aaSopenharmony_ci  }
705f9996aaSopenharmony_ci  _deps = []
715f9996aaSopenharmony_ci  if (defined(invoker.deps)) {
725f9996aaSopenharmony_ci    _deps += invoker.deps
735f9996aaSopenharmony_ci  }
745f9996aaSopenharmony_ci
755f9996aaSopenharmony_ci  # generate module list file in gn stage
765f9996aaSopenharmony_ci  # format like: unittest("componentName_test_xx")
775f9996aaSopenharmony_ci  list_tmp = string_split(target_name, "_test")
785f9996aaSopenharmony_ci  _part_name = list_tmp[0]
795f9996aaSopenharmony_ci  _module_list_file = string_join("",
805f9996aaSopenharmony_ci                                  [
815f9996aaSopenharmony_ci                                    root_out_dir,
825f9996aaSopenharmony_ci                                    "/${archive_dir_name}/module_list_files/",
835f9996aaSopenharmony_ci                                    _part_name,
845f9996aaSopenharmony_ci                                    "/",
855f9996aaSopenharmony_ci                                    _part_name,
865f9996aaSopenharmony_ci                                    "/",
875f9996aaSopenharmony_ci                                    target_name,
885f9996aaSopenharmony_ci                                    ".mlf",
895f9996aaSopenharmony_ci                                  ])
905f9996aaSopenharmony_ci  _sources_file_search_root_dir = string_join("",
915f9996aaSopenharmony_ci                                              [
925f9996aaSopenharmony_ci                                                root_out_dir,
935f9996aaSopenharmony_ci                                                "/${archive_dir_name}/gen",
945f9996aaSopenharmony_ci                                              ])
955f9996aaSopenharmony_ci  _sources = ""
965f9996aaSopenharmony_ci  foreach(s, invoker.sources) {
975f9996aaSopenharmony_ci    _sources += s + ","
985f9996aaSopenharmony_ci  }
995f9996aaSopenharmony_ci  _arguments = [
1005f9996aaSopenharmony_ci    "--target",
1015f9996aaSopenharmony_ci    target_name,
1025f9996aaSopenharmony_ci    "--target_label",
1035f9996aaSopenharmony_ci    get_label_info(target_name, "label_with_toolchain"),
1045f9996aaSopenharmony_ci    "--source_dir",
1055f9996aaSopenharmony_ci    rebase_path(get_label_info(target_name, "dir"), root_out_dir),
1065f9996aaSopenharmony_ci    "--test_type",
1075f9996aaSopenharmony_ci    "unittest",
1085f9996aaSopenharmony_ci    "--output_dir",
1095f9996aaSopenharmony_ci    rebase_path(_output_dir),
1105f9996aaSopenharmony_ci    "--module_list_file",
1115f9996aaSopenharmony_ci    rebase_path(_module_list_file),
1125f9996aaSopenharmony_ci    "--sources_file_search_root_dir",
1135f9996aaSopenharmony_ci    rebase_path(_sources_file_search_root_dir),
1145f9996aaSopenharmony_ci    "--sources",
1155f9996aaSopenharmony_ci    _sources,
1165f9996aaSopenharmony_ci  ]
1175f9996aaSopenharmony_ci  _gen_module_list_script = "//build/lite/testfwk/gen_module_list_files.py"
1185f9996aaSopenharmony_ci  exec_script(_gen_module_list_script, _arguments)
1195f9996aaSopenharmony_ci
1205f9996aaSopenharmony_ci  # copy testcase resource
1215f9996aaSopenharmony_ci  testcase_target_name = target_name
1225f9996aaSopenharmony_ci  _lite_testcase_resources("${testcase_target_name}_resource_copy") {
1235f9996aaSopenharmony_ci    if (defined(invoker.resource_config_file)) {
1245f9996aaSopenharmony_ci      resource_config_file = invoker.resource_config_file
1255f9996aaSopenharmony_ci    }
1265f9996aaSopenharmony_ci    deps = _deps
1275f9996aaSopenharmony_ci    testonly = true
1285f9996aaSopenharmony_ci  }
1295f9996aaSopenharmony_ci
1305f9996aaSopenharmony_ci  executable(target_name) {
1315f9996aaSopenharmony_ci    if (defined(invoker.output_dir)) {
1325f9996aaSopenharmony_ci      output_dir = invoker.output_dir
1335f9996aaSopenharmony_ci    }
1345f9996aaSopenharmony_ci    if (defined(invoker.sources)) {
1355f9996aaSopenharmony_ci      sources = invoker.sources
1365f9996aaSopenharmony_ci    }
1375f9996aaSopenharmony_ci    if (defined(invoker.include_dirs)) {
1385f9996aaSopenharmony_ci      include_dirs = invoker.include_dirs
1395f9996aaSopenharmony_ci    } else {
1405f9996aaSopenharmony_ci      include_dirs = []
1415f9996aaSopenharmony_ci    }
1425f9996aaSopenharmony_ci    include_dirs += test_common_include_dirs
1435f9996aaSopenharmony_ci    if (ohos_kernel_type == "liteos_a" || ohos_kernel_type == "linux") {
1445f9996aaSopenharmony_ci      include_dirs += test_include_dirs
1455f9996aaSopenharmony_ci    }
1465f9996aaSopenharmony_ci    if (defined(invoker.deps)) {
1475f9996aaSopenharmony_ci      deps = invoker.deps
1485f9996aaSopenharmony_ci    } else {
1495f9996aaSopenharmony_ci      deps = []
1505f9996aaSopenharmony_ci    }
1515f9996aaSopenharmony_ci    if (defined(invoker.public_deps)) {
1525f9996aaSopenharmony_ci      public_deps = invoker.public_deps
1535f9996aaSopenharmony_ci    }
1545f9996aaSopenharmony_ci    if (defined(invoker.external_deps)) {
1555f9996aaSopenharmony_ci      external_deps = invoker.external_deps
1565f9996aaSopenharmony_ci    }
1575f9996aaSopenharmony_ci    if (defined(invoker.public_external_deps)) {
1585f9996aaSopenharmony_ci      public_external_deps = invoker.public_external_deps
1595f9996aaSopenharmony_ci    }
1605f9996aaSopenharmony_ci
1615f9996aaSopenharmony_ci    if (defined(invoker.defines)) {
1625f9996aaSopenharmony_ci      defines = invoker.defines
1635f9996aaSopenharmony_ci    }
1645f9996aaSopenharmony_ci    if (ohos_kernel_type == "liteos_a" || ohos_kernel_type == "linux") {
1655f9996aaSopenharmony_ci      deps += [ "//test/testfwk/developer_test/third_party/lib/cpp:gtest_main" ]
1665f9996aaSopenharmony_ci    }
1675f9996aaSopenharmony_ci    if (defined(invoker.configs)) {
1685f9996aaSopenharmony_ci      configs += invoker.configs
1695f9996aaSopenharmony_ci    }
1705f9996aaSopenharmony_ci    configs -= [ "//build/lite/config:language_cpp" ]
1715f9996aaSopenharmony_ci    configs += [ "//build/lite/config:gtest_feature_cpp" ]
1725f9996aaSopenharmony_ci    if (defined(invoker.output_extension)) {
1735f9996aaSopenharmony_ci      output_extension = invoker.output_extension
1745f9996aaSopenharmony_ci    }
1755f9996aaSopenharmony_ci    cflags = [ "-Wno-error" ]
1765f9996aaSopenharmony_ci    if (defined(invoker.cflags)) {
1775f9996aaSopenharmony_ci      cflags += invoker.cflags
1785f9996aaSopenharmony_ci    }
1795f9996aaSopenharmony_ci    ldflags = []
1805f9996aaSopenharmony_ci    if (defined(invoker.ldflags)) {
1815f9996aaSopenharmony_ci      ldflags += invoker.ldflags
1825f9996aaSopenharmony_ci    }
1835f9996aaSopenharmony_ci    if (ohos_build_compiler != "clang") {
1845f9996aaSopenharmony_ci      ldflags += [ "-lstdc++" ]
1855f9996aaSopenharmony_ci    }
1865f9996aaSopenharmony_ci    if (ohos_kernel_type == "linux") {
1875f9996aaSopenharmony_ci      ldflags += [
1885f9996aaSopenharmony_ci        "-lm",
1895f9996aaSopenharmony_ci        "-pthread",
1905f9996aaSopenharmony_ci      ]
1915f9996aaSopenharmony_ci    }
1925f9996aaSopenharmony_ci  }
1935f9996aaSopenharmony_ci}
1945f9996aaSopenharmony_ci
1955f9996aaSopenharmony_citemplate("moduletest") {
1965f9996aaSopenharmony_ci  executable(target_name) {
1975f9996aaSopenharmony_ci    output_dir = "${root_out_dir}/test/moduletest"
1985f9996aaSopenharmony_ci    forward_variables_from(invoker, "*")
1995f9996aaSopenharmony_ci    if (!defined(include_dirs)) {
2005f9996aaSopenharmony_ci      include_dirs = []
2015f9996aaSopenharmony_ci    }
2025f9996aaSopenharmony_ci    include_dirs += test_common_include_dirs
2035f9996aaSopenharmony_ci    if (ohos_kernel_type == "liteos_a" || ohos_kernel_type == "linux") {
2045f9996aaSopenharmony_ci      include_dirs += test_include_dirs
2055f9996aaSopenharmony_ci    }
2065f9996aaSopenharmony_ci    if (!defined(deps)) {
2075f9996aaSopenharmony_ci      deps = []
2085f9996aaSopenharmony_ci    }
2095f9996aaSopenharmony_ci    if (ohos_kernel_type == "liteos_a" || ohos_kernel_type == "linux") {
2105f9996aaSopenharmony_ci      deps += [ "//test/testfwk/developer_test/third_party/lib/cpp:gtest_main" ]
2115f9996aaSopenharmony_ci    }
2125f9996aaSopenharmony_ci    if (!defined(configs)) {
2135f9996aaSopenharmony_ci      configs = []
2145f9996aaSopenharmony_ci    }
2155f9996aaSopenharmony_ci    cflags = [ "-Wno-error" ]
2165f9996aaSopenharmony_ci    ldflags = []
2175f9996aaSopenharmony_ci    if (defined(invoker.ldflags)) {
2185f9996aaSopenharmony_ci      ldflags += invoker.ldflags
2195f9996aaSopenharmony_ci    }
2205f9996aaSopenharmony_ci    if (defined(invoker.external_deps)) {
2215f9996aaSopenharmony_ci      external_deps = invoker.external_deps
2225f9996aaSopenharmony_ci    }
2235f9996aaSopenharmony_ci    if (defined(invoker.public_external_deps)) {
2245f9996aaSopenharmony_ci      public_external_deps = invoker.public_external_deps
2255f9996aaSopenharmony_ci    }
2265f9996aaSopenharmony_ci    if (ohos_build_compiler != "clang") {
2275f9996aaSopenharmony_ci      ldflags += [ "-lstdc++" ]
2285f9996aaSopenharmony_ci    }
2295f9996aaSopenharmony_ci    if (ohos_kernel_type == "linux") {
2305f9996aaSopenharmony_ci      ldflags += [
2315f9996aaSopenharmony_ci        "-lm",
2325f9996aaSopenharmony_ci        "-pthread",
2335f9996aaSopenharmony_ci      ]
2345f9996aaSopenharmony_ci    }
2355f9996aaSopenharmony_ci    configs -= [ "//build/lite/config:language_cpp" ]
2365f9996aaSopenharmony_ci    configs += [ "//build/lite/config:gtest_feature_cpp" ]
2375f9996aaSopenharmony_ci  }
2385f9996aaSopenharmony_ci}
2395f9996aaSopenharmony_ci
2405f9996aaSopenharmony_citemplate("subsystem_test") {
2415f9996aaSopenharmony_ci  assert(defined(invoker.test_components), "Test Components is required.")
2425f9996aaSopenharmony_ci  group(target_name) {
2435f9996aaSopenharmony_ci    deps = []
2445f9996aaSopenharmony_ci    if (defined(invoker.test_components)) {
2455f9996aaSopenharmony_ci      deps += invoker.test_components
2465f9996aaSopenharmony_ci    }
2475f9996aaSopenharmony_ci  }
2485f9996aaSopenharmony_ci}
2495f9996aaSopenharmony_ci
2505f9996aaSopenharmony_citemplate("fuzztest") {
2515f9996aaSopenharmony_ci  executable(target_name) {
2525f9996aaSopenharmony_ci    output_dir = "${root_out_dir}/test/fuzztest"
2535f9996aaSopenharmony_ci    forward_variables_from(invoker, "*")
2545f9996aaSopenharmony_ci    if (!defined(include_dirs)) {
2555f9996aaSopenharmony_ci      include_dirs = []
2565f9996aaSopenharmony_ci    }
2575f9996aaSopenharmony_ci    include_dirs += test_common_include_dirs
2585f9996aaSopenharmony_ci    include_dirs += [
2595f9996aaSopenharmony_ci      "//test/tools/Secodefuzz/",
2605f9996aaSopenharmony_ci      "//test/tools/Secodefuzz/common",
2615f9996aaSopenharmony_ci    ]
2625f9996aaSopenharmony_ci    if (ohos_kernel_type == "liteos_a") {
2635f9996aaSopenharmony_ci      include_dirs += test_include_dirs
2645f9996aaSopenharmony_ci    }
2655f9996aaSopenharmony_ci    if (!defined(deps)) {
2665f9996aaSopenharmony_ci      deps = []
2675f9996aaSopenharmony_ci    }
2685f9996aaSopenharmony_ci    if (ohos_kernel_type == "liteos_a") {
2695f9996aaSopenharmony_ci      deps += [
2705f9996aaSopenharmony_ci        "//test/testfwk/developer_test/third_party/lib/cpp:gtest_main",
2715f9996aaSopenharmony_ci        "//test/tools/Secodefuzz:secodefuzz",
2725f9996aaSopenharmony_ci      ]
2735f9996aaSopenharmony_ci    }
2745f9996aaSopenharmony_ci    if (!defined(configs)) {
2755f9996aaSopenharmony_ci      configs = []
2765f9996aaSopenharmony_ci    }
2775f9996aaSopenharmony_ci    cflags = [ "-Wno-error" ]
2785f9996aaSopenharmony_ci    ldflags = []
2795f9996aaSopenharmony_ci    if (defined(invoker.ldflags)) {
2805f9996aaSopenharmony_ci      ldflags += invoker.ldflags
2815f9996aaSopenharmony_ci    }
2825f9996aaSopenharmony_ci
2835f9996aaSopenharmony_ci    if (defined(invoker.external_deps)) {
2845f9996aaSopenharmony_ci      external_deps = invoker.external_deps
2855f9996aaSopenharmony_ci    }
2865f9996aaSopenharmony_ci    if (defined(invoker.public_external_deps)) {
2875f9996aaSopenharmony_ci      public_external_deps = invoker.public_external_deps
2885f9996aaSopenharmony_ci    }
2895f9996aaSopenharmony_ci    if (ohos_build_compiler != "clang") {
2905f9996aaSopenharmony_ci      ldflags += [ "-lstdc++" ]
2915f9996aaSopenharmony_ci    }
2925f9996aaSopenharmony_ci    _fuzztest_output_dir = "$root_build_dir/fuzztest"
2935f9996aaSopenharmony_ci    rebase_path(_fuzztest_output_dir, root_build_dir)
2945f9996aaSopenharmony_ci    configs -= [ "//build/lite/config:language_cpp" ]
2955f9996aaSopenharmony_ci    configs += [ "//build/lite/config:gtest_feature_cpp" ]
2965f9996aaSopenharmony_ci  }
2975f9996aaSopenharmony_ci}
298