• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2024-2025 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14# now plugin tests with sanitizers triggers CI failure, which could not be reproduce locally, will be fixed in future
15if (PANDA_ENABLE_ADDRESS_SANITIZER OR PANDA_ENABLE_THREAD_SANITIZER)
16    return()
17endif()
18
19# how_to_test_mode
20set(COMPILE_MODE "COMPILE")
21set(RUNTIME_MODE "RUNTIME")
22set(EXPECTED_MODE "EXPECTED")
23
24# how_to_compile_mode
25set(LIBRARY_PLUGIN "LIB")
26set(EXECUTABLE_PLUGIN "EXE")
27
28set(COMMON_SOURCE_FILES
29    "util.cpp"
30)
31
32set(PLUGIN_TESTS
33    #"test_name test_sts_file how_to_test_mode plugin_file_extension(c|cpp) how_to_compile_mode"
34    "e2p_test_plugin_dump_json compile.ets ${RUNTIME_MODE} c ${LIBRARY_PLUGIN}"
35    "e2p_test_plugin_ets_src compile.ets ${RUNTIME_MODE} c ${LIBRARY_PLUGIN}"
36    "e2p_test_plugin_ets_benchmark_test compile.ets ${RUNTIME_MODE} cpp ${LIBRARY_PLUGIN}"
37    "e2p_test_plugin_ets_node_types compile.ets ${RUNTIME_MODE} c ${LIBRARY_PLUGIN}"
38    "e2p_test_plugin_ets_varibles_and_types compile.ets ${RUNTIME_MODE} c ${LIBRARY_PLUGIN}"
39    "e2p_test_plugin_change_func runtime_change_func_call.ets ${RUNTIME_MODE} cpp ${LIBRARY_PLUGIN}"
40    "e2p_test_plugin_recheck compile.ets ${COMPILE_MODE} c ${LIBRARY_PLUGIN}"
41    "e2p_test_plugin compile.ets ${EXPECTED_MODE} c ${LIBRARY_PLUGIN}"
42    "e2p_test_plugin_is compile.ets ${EXPECTED_MODE} c ${LIBRARY_PLUGIN}"
43    "e2p_test_plugin_after_bind compile.ets ${EXPECTED_MODE} cpp ${LIBRARY_PLUGIN}"
44    "plugin_proceed_to_state compile.ets ${EXPECTED_MODE} cpp ${EXECUTABLE_PLUGIN}"
45    "plugin_proceed_to_state_update_statements compile.ets ${RUNTIME_MODE} cpp ${EXECUTABLE_PLUGIN}"
46    "plugin_proceed_to_state_ts_mode compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
47    "plugin_proceed_to_state_update_statements_lambda compile.ets ${RUNTIME_MODE} cpp ${EXECUTABLE_PLUGIN}"
48    "plugin_proceed_to_state_change_func runtime_change_func_call.ets ${RUNTIME_MODE} cpp ${EXECUTABLE_PLUGIN}"
49    "plugin_proceed_to_state_change_call_lambda compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
50    "plugin_proceed_to_state_test_annotation_change compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
51    "plugin_proceed_to_state_test_class_decl_annotation compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
52    "plugin_check_manual_capi compile_with_external_source.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
53    "plugin_proceed_to_state_check_script_function_flags compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
54    "plugin_proceed_to_state_find_import_declaration compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
55    # See #22753.
56    # "plugin_proceed_to_state_test_number_literal compile.ets ${RUNTIME_MODE} cpp ${EXECUTABLE_PLUGIN}"
57    "plugin_proceed_to_state_rerun_scopes_after_check compile.ets ${RUNTIME_MODE} cpp ${EXECUTABLE_PLUGIN}"
58    "plugin_proceed_to_state_rerun_scopes_on_import import.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
59    # "plugin_proceed_to_state_rerun_scopes_after_lowered compile.ets ${RUNTIME_MODE} cpp ${EXECUTABLE_PLUGIN}"
60    # "plugin_proceed_to_state_run_verifier compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
61    "plugin_proceed_to_state_ast_node_check compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
62    "plugin_proceed_to_state_resolve_path compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
63    "plugin_proceed_to_state_arktsconfig compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
64    "plugin_proceed_to_state_find_method_decl compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
65    "plugin_proceed_to_state_find_method_decl_by_name import.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
66    "plugin_proceed_to_state_find_identifier_decl compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
67    "plugin_proceed_to_state_find_import_ident_decl import.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
68    "plugin_proceed_to_state_test_import_external_sources import.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
69    "plugin_proceed_to_state_rebind compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
70    "plugin_proceed_to_state_is_class_declaration compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
71    "plugin_proceed_to_state_struct_declaration compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
72    "plugin_proceed_to_state_create_function_type_ir compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
73    "plugin_proceed_to_state_function_type_checker compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
74    "plugin_proceed_to_state_create_ets_parameter_expression compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
75    "plugin_proceed_to_state_ast_node_type_const compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
76    "plugin_proceed_to_state_ast_node_transform_children_recursively compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
77    "plugin_proceed_to_state_create_object_expression compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
78    "plugin_proceed_to_state_misc_expr compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
79    "plugin_proceed_to_state_return_expression compile.ets ${EXPECTED_MODE} cpp ${EXECUTABLE_PLUGIN}"
80    "plugin_proceed_to_state_function_to_arrow compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
81    "plugin_proceed_to_state_string_optimize compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
82    "plugin_proceed_to_state_update_import_declaration compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
83    "plugin_proceed_to_state_create_import_declaration compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
84    "plugin_proceed_to_state_update_import_specifier compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
85    "plugin_proceed_to_state_create_non_null_expression compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
86    "plugin_proceed_to_state_ast_node_type_analyzer compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
87    "plugin_proceed_to_state_create_annotation compile.ets ${EXPECTED_MODE} cpp ${EXECUTABLE_PLUGIN}"
88    "plugin_proceed_to_state_update_class compile.ets ${EXPECTED_MODE} cpp ${EXECUTABLE_PLUGIN}"
89    "plugin_proceed_to_state_new_expression compile.ets ${EXPECTED_MODE} cpp ${EXECUTABLE_PLUGIN}"
90    "plugin_proceed_to_state_misc_expression compile.ets ${EXPECTED_MODE} cpp ${EXECUTABLE_PLUGIN}"
91    "plugin_proceed_to_state_member_expression compile.ets ${EXPECTED_MODE} cpp ${EXECUTABLE_PLUGIN}"
92    "plugin_proceed_to_state_this_into_method compile.ets ${EXPECTED_MODE} cpp ${EXECUTABLE_PLUGIN}"
93    "plugin_proceed_to_state_checker_type compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
94    "plugin_proceed_to_state_is_accessor compile.ets ${EXPECTED_MODE} cpp ${EXECUTABLE_PLUGIN}"
95    "plugin_proceed_to_state_create_as_expression compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
96    "plugin_proceed_to_state_create_interface_declaration compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
97    "plugin_proceed_to_state_create_import compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
98    "plugin_proceed_to_state_set_from_struct_modifier compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
99    "plugin_proceed_to_state_default_access_modifier compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
100    "plugin_proceed_to_state_dynamic_class_recheck compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
101    "plugin_proceed_to_state_assignment_expression_set_result compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
102    "plugin_proceed_to_state_create_diagnostic_kind compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
103    "plugin_proceed_to_state_is_optional_declaration compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
104    "plugin_proceed_to_state_update_function_declaration compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
105    "plugin_proceed_to_state_update_function_expression compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
106    "plugin_proceed_to_state_create_ets_new_expression compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
107    "plugin_proceed_to_state_log_diagnostic_with_suggestion compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
108    "use_plugin_to_test_export_table compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
109    "plugin_proceed_to_state_check_jsdoc compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
110    "plugin_proceed_to_state_test_global_func_call_dump compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
111    "plugin_proceed_to_state_test_interface_duplicate_setter compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
112    "plugin_proceed_to_state_test_case_block_dump compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
113    "plugin_proceed_to_state_function_dump compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
114    "pugin_proceed_to_state_annotationUsage_source_range_access compile.ets ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
115)
116
117set(RUNTIME_ARGUMENTS
118    --boot-panda-files=${PANDA_BINARY_ROOT}/plugins/ets/etsstdlib.abc${EXTRA_BOOT_PANDAFILES}
119    --load-runtimes=ets
120    --compiler-enable-jit=true
121)
122
123set(ENTRY_POINT ETSGLOBAL::main)
124
125foreach(TEST_DATA IN ITEMS ${PLUGIN_TESTS})
126    string(REPLACE " " ";" TEST_DATA_ELEM "${TEST_DATA}")
127    list(GET TEST_DATA_ELEM 0 TEST_NAME)
128    list(GET TEST_DATA_ELEM 3 EXTENSION)
129    list(GET TEST_DATA_ELEM 4 PLUGIN_MODE)
130    if(${PLUGIN_MODE} STREQUAL ${LIBRARY_PLUGIN})
131        panda_add_library(${TEST_NAME} SHARED ${TEST_NAME}.${EXTENSION} ${COMMON_SOURCE_FILES})
132    else()
133        panda_add_executable(${TEST_NAME} ${TEST_NAME}.${EXTENSION} ${COMMON_SOURCE_FILES} OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
134        panda_add_sanitizers(TARGET ${TEST_NAME} SANITIZERS ${PANDA_SANITIZERS_LIST})
135    endif()
136    panda_target_include_directories(${TEST_NAME}
137        PRIVATE ${ES2PANDA_PATH}
138        PRIVATE ${PANDA_ROOT}/libpandafile
139        PRIVATE ${PANDA_ROOT}/assembler
140        PRIVATE ${OUTPUT_DIR}
141        PUBLIC ${CMAKE_CURRENT_BINARY_DIR}
142        PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
143        PUBLIC ${CMAKE_SOURCE_DIR}/libpandabase
144        PUBLIC ${CMAKE_SOURCE_DIR}/runtime
145        PUBLIC ${CMAKE_BINARY_DIR}/libpandabase
146        PUBLIC ${CMAKE_BINARY_DIR}/libpandafile/include
147        PUBLIC ${CMAKE_BINARY_DIR}/abc2program
148        ${CMAKE_BINARY_DIR}
149    )
150    panda_target_link_libraries(${TEST_NAME} es2panda-public arkassembler arkbase arkfile abc2program)
151endforeach()
152
153add_custom_target(es2panda-plugin-test)
154
155foreach(TEST_DATA IN ITEMS ${PLUGIN_TESTS})
156    string(REPLACE " " ";" TEST_DATA_ELEM "${TEST_DATA}")
157    list(GET TEST_DATA_ELEM 0 TEST_NAME)
158    list(GET TEST_DATA_ELEM 1 TEST_STS_FILE)
159    list(GET TEST_DATA_ELEM 2 TEST_MODE)
160    list(GET TEST_DATA_ELEM 4 PLUGIN_MODE)
161    if(${PLUGIN_MODE} STREQUAL ${LIBRARY_PLUGIN})
162        add_custom_target(es2panda-plugin-test-compile-${TEST_NAME}
163            COMMAND ${CMAKE_COMMAND} -E env
164                LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX} $<TARGET_FILE:es2panda>
165                --plugins=${TEST_NAME} --extension=ets --ets-unnamed --output="${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.abc"
166                "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_STS_FILE}" > "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.out"
167        )
168    endif()
169    if(${PLUGIN_MODE} STREQUAL ${EXECUTABLE_PLUGIN})
170        add_custom_target(es2panda-plugin-test-compile-${TEST_NAME}
171            COMMAND ${CMAKE_COMMAND} -E env
172                LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX}
173                ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME} $<TARGET_FILE:es2panda>
174                --extension=ets --ets-unnamed --output="${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.abc"
175                "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_STS_FILE}" > "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.out" 2>&1
176        )
177    endif()
178    add_dependencies(es2panda-plugin-test-compile-${TEST_NAME} es2panda ${TEST_NAME} es2panda-lib)
179    if(${TEST_MODE} STREQUAL ${EXPECTED_MODE})
180        add_custom_target(es2panda-plugin-test-expected-${TEST_NAME}
181            COMMAND ${CMAKE_COMMAND} -E compare_files
182                "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.out" "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME}-expected.txt"
183        )
184        add_dependencies(es2panda-plugin-test-expected-${TEST_NAME} es2panda-plugin-test-compile-${TEST_NAME} es2panda-lib)
185        add_dependencies(es2panda-plugin-test es2panda-plugin-test-expected-${TEST_NAME})
186    endif()
187    if(${TEST_MODE} STREQUAL ${RUNTIME_MODE})
188        add_custom_target(es2panda-plugin-test-runtime-${TEST_NAME}
189            COMMAND ${CMAKE_COMMAND} -E env
190                LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX} $<TARGET_FILE:ark>
191                ${RUNTIME_ARGUMENTS} "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.abc" ${ENTRY_POINT}
192                > "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}-runtime.out"
193        )
194        add_dependencies(es2panda-plugin-test-runtime-${TEST_NAME} es2panda-plugin-test-compile-${TEST_NAME} ark es2panda-lib)
195        add_dependencies(es2panda-plugin-test es2panda-plugin-test-runtime-${TEST_NAME})
196    endif()
197    if(${TEST_MODE} STREQUAL ${COMPILE_MODE})
198        add_dependencies(es2panda-plugin-test es2panda-plugin-test-compile-${TEST_NAME})
199    endif()
200endforeach()
201
202add_custom_target(update-es2panda-plugin-test-expected)
203
204foreach(TEST_DATA IN ITEMS ${PLUGIN_TESTS})
205    string(REPLACE " " ";" TEST_DATA_ELEM "${TEST_DATA}")
206    list(GET TEST_DATA_ELEM 0 TEST_NAME)
207    list(GET TEST_DATA_ELEM 1 TEST_STS_FILE)
208    list(GET TEST_DATA_ELEM 2 TEST_MODE)
209    list(GET TEST_DATA_ELEM 4 PLUGIN_MODE)
210    if(${TEST_MODE} STREQUAL ${EXPECTED_MODE})
211        if(${PLUGIN_MODE} STREQUAL ${LIBRARY_PLUGIN})
212            add_custom_target(update-es2panda-plugin-test-expected-${TEST_NAME}
213                COMMAND ${CMAKE_COMMAND} -E env
214                    LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX} $<TARGET_FILE:es2panda>
215                    --plugins=${TEST_NAME} --extension=ets --ets-unnamed "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_STS_FILE}" >
216                    "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME}-expected.txt")
217        else()
218            add_custom_target(update-es2panda-plugin-test-expected-${TEST_NAME}
219                COMMAND ${CMAKE_COMMAND} -E env
220                    LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX}
221                    ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME} $<TARGET_FILE:es2panda>
222                    "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_STS_FILE}" >
223                    "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME}-expected.txt")
224        endif()
225        add_dependencies(update-es2panda-plugin-test-expected-${TEST_NAME} es2panda ${TEST_NAME} es2panda-lib)
226        add_dependencies(update-es2panda-plugin-test-expected update-es2panda-plugin-test-expected-${TEST_NAME})
227    endif()
228endforeach()
229
230add_dependencies(es2panda_tests es2panda-plugin-test)
231