• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2024 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(PLUGIN_TESTS
29  #"test_name test_sts_file how_to_test_mode plugin_file_extension(c|cpp) how_to_compile_mode"
30  "e2p_test_plugin_dump_json compile.sts ${RUNTIME_MODE} c ${LIBRARY_PLUGIN}"
31  "e2p_test_plugin_ets_src compile.sts ${RUNTIME_MODE} c ${LIBRARY_PLUGIN}"
32  "e2p_test_plugin_ets_benchmark_test compile.sts ${RUNTIME_MODE} cpp ${LIBRARY_PLUGIN}"
33  # 20756 "e2p_test_plugin_ets_benchmark_with_checker_func_test compile.sts ${RUNTIME_MODE} cpp ${LIBRARY_PLUGIN}"
34  "e2p_test_plugin_ets_node_types compile.sts ${RUNTIME_MODE} c ${LIBRARY_PLUGIN}"
35  "e2p_test_plugin_ets_varibles_and_types compile.sts ${RUNTIME_MODE} c ${LIBRARY_PLUGIN}"
36  "e2p_test_plugin_change_func runtime_change_func_call.sts ${RUNTIME_MODE} cpp ${LIBRARY_PLUGIN}"
37  "e2p_test_plugin compile.sts ${EXPECTED_MODE} c ${LIBRARY_PLUGIN}"
38  "e2p_test_plugin_is compile.sts ${EXPECTED_MODE} c ${LIBRARY_PLUGIN}"
39  "plugin_proceed_to_state compile.sts ${EXPECTED_MODE} cpp ${EXECUTABLE_PLUGIN}"
40  "plugin_proceed_to_state_update_statements compile.sts ${RUNTIME_MODE} cpp ${EXECUTABLE_PLUGIN}"
41  "plugin_proceed_to_state_update_statements_lambda compile.sts ${RUNTIME_MODE} cpp ${EXECUTABLE_PLUGIN}"
42  "plugin_proceed_to_state_change_func runtime_change_func_call.sts ${RUNTIME_MODE} cpp ${EXECUTABLE_PLUGIN}"
43  "plugin_proceed_to_state_change_call_lambda compile.sts ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}"
44)
45
46set(RUNTIME_ARGUMENTS
47    --boot-panda-files=${PANDA_BINARY_ROOT}/plugins/ets/etsstdlib.abc${EXTRA_BOOT_PANDAFILES}
48    --load-runtimes=ets
49    --compiler-enable-jit=true
50)
51
52set(ENTRY_POINT ETSGLOBAL::main)
53
54foreach(TEST_DATA IN ITEMS ${PLUGIN_TESTS})
55    string(REPLACE " " ";" TEST_DATA_ELEM "${TEST_DATA}")
56    list(GET TEST_DATA_ELEM 0 TEST_NAME)
57    list(GET TEST_DATA_ELEM 3 EXTENSION)
58    list(GET TEST_DATA_ELEM 4 PLUGIN_MODE)
59    if(${PLUGIN_MODE} STREQUAL ${LIBRARY_PLUGIN})
60        panda_add_library(${TEST_NAME} SHARED ${TEST_NAME}.${EXTENSION})
61    else()
62        panda_add_executable(${TEST_NAME} ${TEST_NAME}.${EXTENSION} OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
63        panda_add_sanitizers(TARGET ${TEST_NAME} SANITIZERS ${PANDA_SANITIZERS_LIST})
64    endif()
65    panda_target_include_directories(${TEST_NAME}
66        PRIVATE "${ES2PANDA_PATH}"
67        PRIVATE ${OUTPUT_DIR}
68    )
69    panda_target_link_libraries(${TEST_NAME} es2panda-public)
70endforeach()
71
72add_custom_target(es2panda-plugin-test)
73
74foreach(TEST_DATA IN ITEMS ${PLUGIN_TESTS})
75    string(REPLACE " " ";" TEST_DATA_ELEM "${TEST_DATA}")
76    list(GET TEST_DATA_ELEM 0 TEST_NAME)
77    list(GET TEST_DATA_ELEM 1 TEST_STS_FILE)
78    list(GET TEST_DATA_ELEM 2 TEST_MODE)
79    list(GET TEST_DATA_ELEM 4 PLUGIN_MODE)
80    if(${PLUGIN_MODE} STREQUAL ${LIBRARY_PLUGIN})
81        add_custom_target(es2panda-plugin-test-compile-${TEST_NAME}
82            COMMAND ${CMAKE_COMMAND} -E env
83                LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX} $<TARGET_FILE:es2panda>
84                --plugins=${TEST_NAME} --extension=sts --output="${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.abc"
85                "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_STS_FILE}" > "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.out"
86        )
87    endif()
88    if(${PLUGIN_MODE} STREQUAL ${EXECUTABLE_PLUGIN})
89        add_custom_target(es2panda-plugin-test-compile-${TEST_NAME}
90            COMMAND ${CMAKE_COMMAND} -E env
91                LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX}
92                ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME} $<TARGET_FILE:es2panda>
93                --extension=sts --output="${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.abc"
94                "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_STS_FILE}" > "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.out"
95        )
96    endif()
97    add_dependencies(es2panda-plugin-test-compile-${TEST_NAME} es2panda ${TEST_NAME} es2panda-lib)
98    if(${TEST_MODE} STREQUAL ${EXPECTED_MODE})
99        add_custom_target(es2panda-plugin-test-expected-${TEST_NAME}
100            COMMAND ${CMAKE_COMMAND} -E compare_files
101                "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.out" "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME}-expected.txt"
102        )
103        add_dependencies(es2panda-plugin-test-expected-${TEST_NAME} es2panda-plugin-test-compile-${TEST_NAME} es2panda-lib)
104        add_dependencies(es2panda-plugin-test es2panda-plugin-test-expected-${TEST_NAME})
105    endif()
106    if(${TEST_MODE} STREQUAL ${RUNTIME_MODE})
107        add_custom_target(es2panda-plugin-test-runtime-${TEST_NAME}
108            COMMAND ${CMAKE_COMMAND} -E env
109                LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX} $<TARGET_FILE:ark>
110                ${RUNTIME_ARGUMENTS} "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.abc" ${ENTRY_POINT}
111                > "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}-runtime.out"
112        )
113        add_dependencies(es2panda-plugin-test-runtime-${TEST_NAME} es2panda-plugin-test-compile-${TEST_NAME} ark es2panda-lib)
114        add_dependencies(es2panda-plugin-test es2panda-plugin-test-runtime-${TEST_NAME})
115    endif()
116    if(${TEST_MODE} STREQUAL ${COMPILE_MODE})
117        add_dependencies(es2panda-plugin-test es2panda-plugin-test-compile-${TEST_NAME})
118    endif()
119endforeach()
120
121add_custom_target(update-es2panda-plugin-test-expected)
122
123foreach(TEST_DATA IN ITEMS ${PLUGIN_TESTS})
124    string(REPLACE " " ";" TEST_DATA_ELEM "${TEST_DATA}")
125    list(GET TEST_DATA_ELEM 0 TEST_NAME)
126    list(GET TEST_DATA_ELEM 1 TEST_STS_FILE)
127    list(GET TEST_DATA_ELEM 2 TEST_MODE)
128    list(GET TEST_DATA_ELEM 4 PLUGIN_MODE)
129    if(${TEST_MODE} STREQUAL ${EXPECTED_MODE})
130        if(${PLUGIN_MODE} STREQUAL ${LIBRARY_PLUGIN})
131            add_custom_target(update-es2panda-plugin-test-expected-${TEST_NAME}
132                COMMAND ${CMAKE_COMMAND} -E env
133                    LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX} $<TARGET_FILE:es2panda>
134                    --plugins=${TEST_NAME} --extension=sts "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_STS_FILE}" >
135                    "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME}-expected.txt")
136        else()
137            add_custom_target(update-es2panda-plugin-test-expected-${TEST_NAME}
138                COMMAND ${CMAKE_COMMAND} -E env
139                    LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX}
140                    ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME} $<TARGET_FILE:es2panda>
141                    "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_STS_FILE}" >
142                    "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME}-expected.txt")
143        endif()
144        add_dependencies(update-es2panda-plugin-test-expected-${TEST_NAME} es2panda ${TEST_NAME} es2panda-lib)
145        add_dependencies(update-es2panda-plugin-test-expected update-es2panda-plugin-test-expected-${TEST_NAME})
146    endif()
147endforeach()
148
149add_dependencies(es2panda_tests es2panda-plugin-test)
150