| cmake_minimum_required(VERSION ${CMAKE_VERSION} FATAL_ERROR) |
| |
| function(findExpectedFile FILE_NO RESULT_VAR GLOBING_EXPR_VAR) |
| if(NOT DEFINED EXPECTED_FILE_${FILE_NO}) # explicit file name regex was not provided - construct one from other data |
| # set defaults if parameters are not provided |
| if(NOT DEFINED EXPECTED_FILE_${FILE_NO}_NAME) |
| string(TOLOWER "${RunCMake_TEST_FILE_PREFIX}" EXPECTED_FILE_${FILE_NO}_NAME) |
| endif() |
| if(NOT DEFINED EXPECTED_FILE_${FILE_NO}_VERSION) |
| set(EXPECTED_FILE_${FILE_NO}_VERSION "0.1.1") |
| set(EXPECTED_FILE_${FILE_NO}_VERSION "0.1.1" PARENT_SCOPE) |
| endif() |
| |
| getPackageNameGlobexpr("${EXPECTED_FILE_${FILE_NO}_NAME}" |
| "${EXPECTED_FILE_${FILE_NO}_COMPONENT}" "${EXPECTED_FILE_${FILE_NO}_VERSION}" |
| "${EXPECTED_FILE_${FILE_NO}_REVISION}" "${FILE_NO}" "EXPECTED_FILE_${FILE_NO}") |
| endif() |
| |
| file(GLOB found_file_ RELATIVE "${bin_dir}" "${EXPECTED_FILE_${FILE_NO}}") |
| |
| set(${RESULT_VAR} "${found_file_}" PARENT_SCOPE) |
| set(${GLOBING_EXPR_VAR} "${EXPECTED_FILE_${FILE_NO}}" PARENT_SCOPE) |
| endfunction() |
| |
| include("${config_file}") |
| include("${src_dir}/${GENERATOR_TYPE}/Helpers.cmake") |
| |
| file(READ "${bin_dir}/test_output.txt" output) |
| file(READ "${bin_dir}/test_error.txt" error) |
| file(READ "${config_file}" config_file_content) |
| |
| string(REPLACE "\n" "\n cpack-out> " cpack_out "\n${output}") |
| string(REPLACE "\n" "\n cpack-err> " cpack_err "\n${error}") |
| string(REPLACE "\n" "\n cpack-res> " cpack_res "\n${PACKAGING_RESULT}") |
| string(REPLACE "\n" "\n cpack-cfg> " cpack_cfg "\n${config_file_content}") |
| string(CONCAT output_error_message |
| "CPack output:${cpack_out}\n" |
| "CPack error:${cpack_err}\n" |
| "CPack result:${cpack_res}\n" |
| "CPack config file:${cpack_cfg}" |
| ) |
| |
| # generate default expected files data |
| include("${src_dir}/tests/${RunCMake_TEST_FILE_PREFIX}/ExpectedFiles.cmake") |
| |
| # check that expected generated files exist and contain expected content |
| if(NOT EXPECTED_FILES_COUNT EQUAL 0) |
| foreach(file_no_ RANGE 1 ${EXPECTED_FILES_COUNT}) |
| findExpectedFile("${file_no_}" "FOUND_FILE_${file_no_}" |
| "EXPECTED_FILE_${file_no_}") |
| list(APPEND foundFiles_ "${FOUND_FILE_${file_no_}}") |
| list(LENGTH FOUND_FILE_${file_no_} foundFilesCount_) |
| |
| if(foundFilesCount_ EQUAL 1) |
| unset(PACKAGE_CONTENT) |
| |
| if(DEFINED EXPECTED_FILE_CONTENT_${file_no_}) |
| getPackageContent("${bin_dir}/${FOUND_FILE_${file_no_}}" "PACKAGE_CONTENT") |
| |
| string(REGEX MATCH "${EXPECTED_FILE_CONTENT_${file_no_}}" |
| expected_content_list "${PACKAGE_CONTENT}") |
| else() # use content list |
| getPackageContentList("${bin_dir}/${FOUND_FILE_${file_no_}}" "PACKAGE_CONTENT") |
| set(EXPECTED_FILE_CONTENT_${file_no_} "${EXPECTED_FILE_CONTENT_${file_no_}_LIST}") |
| toExpectedContentList("${file_no_}" "EXPECTED_FILE_CONTENT_${file_no_}") |
| |
| if(NOT PACKAGE_CONTENT STREQUAL "") |
| list(SORT PACKAGE_CONTENT) |
| endif() |
| if(NOT EXPECTED_FILE_CONTENT_${file_no_} STREQUAL "") |
| list(SORT EXPECTED_FILE_CONTENT_${file_no_}) |
| endif() |
| |
| if(PACKAGE_CONTENT STREQUAL EXPECTED_FILE_CONTENT_${file_no_}) |
| set(expected_content_list TRUE) |
| else() |
| set(expected_content_list FALSE) |
| endif() |
| endif() |
| |
| if(NOT expected_content_list) |
| string(REPLACE "\n" "\n actual> " msg_actual "\n${PACKAGE_CONTENT}") |
| string(REPLACE "\n" "\n expect> " msg_expected "\n${EXPECTED_FILE_CONTENT_${file_no_}}") |
| message(FATAL_ERROR |
| "Unexpected file content for file ${file_no_}!\n" |
| "The content was:${msg_actual}\n" |
| "which does not match:${msg_expected}\n" |
| "${output_error_message}") |
| endif() |
| elseif(foundFilescount_ EQUAL 0) |
| message(FATAL_ERROR |
| "Found no files for file ${file_no_}!\n" |
| "Globbing expression:\n '${EXPECTED_FILE_${file_no_}}'\n" |
| "${output_error_message}") |
| else() |
| message(FATAL_ERROR |
| "Found more than one file for file ${file_no_}!\n" |
| "Found files count '${foundFilesCount_}'.\n" |
| "Files:\n '${FOUND_FILE_${file_no_}}'\n" |
| "Globbing expression:\n '${EXPECTED_FILE_${file_no_}}'\n" |
| "${output_error_message}") |
| endif() |
| endforeach() |
| |
| # check that there were no extra files generated |
| foreach(all_files_glob_ IN LISTS ALL_FILES_GLOB) |
| file(GLOB foundAll_ RELATIVE "${bin_dir}" "${all_files_glob_}") |
| list(APPEND allFoundFiles_ ${foundAll_}) |
| endforeach() |
| |
| list(LENGTH foundFiles_ foundFilesCount_) |
| list(LENGTH allFoundFiles_ allFoundFilesCount_) |
| |
| if(NOT foundFilesCount_ EQUAL allFoundFilesCount_) |
| message(FATAL_ERROR |
| "Found more files than expected!\n" |
| "Found files:\n '${allFoundFiles_}'\n" |
| "${output_error_message}") |
| endif() |
| |
| # sanity check that we didn't accidentally list wrong files with our regular |
| # expressions |
| foreach(expected_ IN LISTS allFoundFiles_) |
| list(FIND foundFiles_ "${expected_}" found_) |
| |
| if(found_ EQUAL -1) |
| message(FATAL_ERROR |
| "Expected files don't match found files!\n" |
| "Found files:\n" |
| " '${allFoundFiles_}'\n" |
| "${output_error_message}") |
| endif() |
| endforeach() |
| else() |
| # there should be no generated files present |
| foreach(missing_file_glob_ IN LISTS ALL_FILES_GLOB) |
| file(GLOB checkMissingFiles_ RELATIVE "${bin_dir}" "${missing_file_glob_}") |
| |
| if(checkMissingFiles_) |
| message(FATAL_ERROR "Unexpected files found:\n '${checkMissingFiles_}'\n" |
| "${output_error_message}") |
| endif() |
| endforeach() |
| endif() |
| |
| # handle additional result verifications |
| if(EXISTS "${src_dir}/tests/${RunCMake_TEST_FILE_PREFIX}/VerifyResult.cmake") |
| include("${src_dir}/tests/${RunCMake_TEST_FILE_PREFIX}/VerifyResult.cmake") |
| endif() |
| |
| message(STATUS "${output}") |
| message("${error}") |