|
| 1 | +include(BuildLuzer) |
| 2 | +include(MakeLuaPath) |
| 3 | + |
| 4 | +if(NOT LUA_EXECUTABLE) |
| 5 | + message(FATAL_ERROR "${LUA_EXECUTABLE} is not found.") |
| 6 | +endif() |
| 7 | + |
| 8 | +lapi_tests_make_lua_path(LUA_CPATH |
| 9 | + PATHS |
| 10 | + ${LUZER_LUA_CPATH} |
| 11 | +) |
| 12 | + |
| 13 | +lapi_tests_make_lua_path(LUA_PATH |
| 14 | + PATHS |
| 15 | + ${LUZER_LUA_PATH} |
| 16 | + ${CMAKE_CURRENT_SOURCE_DIR}/?.lua |
| 17 | +) |
| 18 | + |
| 19 | +function(create_test) |
| 20 | + cmake_parse_arguments( |
| 21 | + FUZZ |
| 22 | + "" |
| 23 | + "FILENAME" |
| 24 | + "" |
| 25 | + ${ARGN} |
| 26 | + ) |
| 27 | + get_filename_component(test_name ${FUZZ_FILENAME} NAME_WE) |
| 28 | + string(REPLACE "_test" "" test_prefix ${test_name}) |
| 29 | + set(dict_path ${PROJECT_SOURCE_DIR}/corpus/${test_prefix}.dict) |
| 30 | + set(corpus_path ${PROJECT_SOURCE_DIR}/corpus/${test_prefix}) |
| 31 | + set(dict_path ${CORPUS_BASE_PATH}/${test_name}.dict) |
| 32 | + set(corpus_path ${CORPUS_BASE_PATH}/${test_prefix}) |
| 33 | + if(IS_LUAJIT) |
| 34 | + set(corpus_path ${CORPUS_BASE_PATH}/${test_name}) |
| 35 | + endif() |
| 36 | + if (EXISTS ${dict_path}) |
| 37 | + set(LIBFUZZER_OPTS "${LIBFUZZER_OPTS} -dict=${dict_path}") |
| 38 | + endif () |
| 39 | + if (EXISTS ${corpus_path}) |
| 40 | + set(LIBFUZZER_OPTS "${LIBFUZZER_OPTS} ${corpus_path}") |
| 41 | + endif () |
| 42 | + add_test(NAME ${test_name} |
| 43 | + COMMAND ${SHELL} -c "${LUA_EXECUTABLE} ${FUZZ_FILENAME} ${LIBFUZZER_OPTS}" |
| 44 | + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} |
| 45 | + ) |
| 46 | + set_tests_properties(${test_name} PROPERTIES |
| 47 | + LABELS "lapi" |
| 48 | + ENVIRONMENT "LUA_PATH=${LUA_PATH};LUA_CPATH=${LUA_CPATH};ASAN_OPTIONS=detect_odr_violation=0;LD_DYNAMIC_WEAK=1" |
| 49 | + DEPENDS ${LUA_EXECUTABLE} ${LUZER_LIBRARY} |
| 50 | + ) |
| 51 | +endfunction() |
| 52 | + |
| 53 | +message(STATUS "Add Lua API test suite") |
| 54 | +file(GLOB tests LIST_DIRECTORIES false ${CMAKE_CURRENT_SOURCE_DIR}/*_test.lua) |
| 55 | +foreach(filename ${tests}) |
| 56 | + create_test(FILENAME ${filename}) |
| 57 | +endforeach() |
0 commit comments