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