VerifyResult.cmake 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. cmake_minimum_required(VERSION ${CMAKE_VERSION} FATAL_ERROR)
  2. function(findExpectedFile FILE_NO RESULT_VAR GLOBING_EXPR_VAR)
  3. if(NOT DEFINED EXPECTED_FILE_${FILE_NO}) # explicit file name regex was not provided - construct one from other data
  4. # set defaults if parameters are not provided
  5. if(NOT DEFINED EXPECTED_FILE_${FILE_NO}_NAME)
  6. string(TOLOWER "${RunCMake_TEST_FILE_PREFIX}" EXPECTED_FILE_${FILE_NO}_NAME)
  7. endif()
  8. if(NOT DEFINED EXPECTED_FILE_${FILE_NO}_VERSION)
  9. set(EXPECTED_FILE_${FILE_NO}_VERSION "0.1.1")
  10. set(EXPECTED_FILE_${FILE_NO}_VERSION "0.1.1" PARENT_SCOPE)
  11. endif()
  12. getPackageNameGlobexpr("${EXPECTED_FILE_${FILE_NO}_NAME}"
  13. "${EXPECTED_FILE_${FILE_NO}_COMPONENT}" "${EXPECTED_FILE_${FILE_NO}_VERSION}"
  14. "${EXPECTED_FILE_${FILE_NO}_REVISION}" "${FILE_NO}" "EXPECTED_FILE_${FILE_NO}")
  15. endif()
  16. file(GLOB found_file_ RELATIVE "${bin_dir}" "${EXPECTED_FILE_${FILE_NO}}")
  17. set(${RESULT_VAR} "${found_file_}" PARENT_SCOPE)
  18. set(${GLOBING_EXPR_VAR} "${EXPECTED_FILE_${FILE_NO}}" PARENT_SCOPE)
  19. endfunction()
  20. include("${config_file}")
  21. include("${src_dir}/${GENERATOR_TYPE}/Helpers.cmake")
  22. file(READ "${bin_dir}/test_output.txt" output)
  23. file(READ "${bin_dir}/test_error.txt" error)
  24. file(READ "${config_file}" config_file_content)
  25. set(output_error_message
  26. "\nCPack output: '${output}'\nCPack error: '${error}';\nCPack result: '${PACKAGING_RESULT}';\nconfig file: '${config_file_content}'")
  27. # generate default expected files data
  28. include("${src_dir}/tests/${RunCMake_TEST_FILE_PREFIX}/ExpectedFiles.cmake")
  29. # check that expected generated files exist and contain expected content
  30. if(NOT EXPECTED_FILES_COUNT EQUAL 0)
  31. foreach(file_no_ RANGE 1 ${EXPECTED_FILES_COUNT})
  32. findExpectedFile("${file_no_}" "FOUND_FILE_${file_no_}"
  33. "EXPECTED_FILE_${file_no_}")
  34. list(APPEND foundFiles_ "${FOUND_FILE_${file_no_}}")
  35. list(LENGTH FOUND_FILE_${file_no_} foundFilesCount_)
  36. if(foundFilesCount_ EQUAL 1)
  37. unset(PACKAGE_CONTENT)
  38. if(DEFINED EXPECTED_FILE_CONTENT_${file_no_})
  39. getPackageContent("${bin_dir}/${FOUND_FILE_${file_no_}}" "PACKAGE_CONTENT")
  40. string(REGEX MATCH "${EXPECTED_FILE_CONTENT_${file_no_}}"
  41. expected_content_list "${PACKAGE_CONTENT}")
  42. else() # use content list
  43. getPackageContentList("${bin_dir}/${FOUND_FILE_${file_no_}}" "PACKAGE_CONTENT")
  44. set(EXPECTED_FILE_CONTENT_${file_no_} "${EXPECTED_FILE_CONTENT_${file_no_}_LIST}")
  45. toExpectedContentList("${file_no_}" "EXPECTED_FILE_CONTENT_${file_no_}")
  46. if(NOT PACKAGE_CONTENT STREQUAL "")
  47. list(SORT PACKAGE_CONTENT)
  48. endif()
  49. if(NOT EXPECTED_FILE_CONTENT_${file_no_} STREQUAL "")
  50. list(SORT EXPECTED_FILE_CONTENT_${file_no_})
  51. endif()
  52. if(PACKAGE_CONTENT STREQUAL EXPECTED_FILE_CONTENT_${file_no_})
  53. set(expected_content_list TRUE)
  54. else()
  55. set(expected_content_list FALSE)
  56. endif()
  57. endif()
  58. if(NOT expected_content_list)
  59. string(REPLACE "\n" "\n actual> " msg_actual "\n${PACKAGE_CONTENT}")
  60. string(REPLACE "\n" "\n expect> " msg_expected "\n${EXPECTED_FILE_CONTENT_${file_no_}}")
  61. message(FATAL_ERROR
  62. "Unexpected file content for file No. '${file_no_}'!\n"
  63. "The content was:${msg_actual}\n"
  64. "which does not match:${msg_expected}\n"
  65. "${output_error_message}")
  66. endif()
  67. else()
  68. message(FATAL_ERROR
  69. "Found more than one file for file No. '${file_no_}'!"
  70. " Found files count '${foundFilesCount_}'."
  71. " Files: '${FOUND_FILE_${file_no_}}'"
  72. " Globbing expression: '${EXPECTED_FILE_${file_no_}}'"
  73. "${output_error_message}")
  74. endif()
  75. endforeach()
  76. # check that there were no extra files generated
  77. foreach(all_files_glob_ IN LISTS ALL_FILES_GLOB)
  78. file(GLOB foundAll_ RELATIVE "${bin_dir}" "${all_files_glob_}")
  79. list(APPEND allFoundFiles_ "${foundAll_}")
  80. endforeach()
  81. list(LENGTH foundFiles_ foundFilesCount_)
  82. list(LENGTH allFoundFiles_ allFoundFilesCount_)
  83. if(NOT foundFilesCount_ EQUAL allFoundFilesCount_)
  84. message(FATAL_ERROR
  85. "Found more files than expected! Found files: '${allFoundFiles_}'"
  86. "${output_error_message}")
  87. endif()
  88. # sanity check that we didn't accidentally list wrong files with our regular
  89. # expressions
  90. foreach(expected_ IN LISTS allFoundFiles_)
  91. list(FIND foundFiles_ "${expected_}" found_)
  92. if(found_ EQUAL -1)
  93. message(FATAL_ERROR
  94. "Expected files don't match found files! Found files:"
  95. " '${allFoundFiles_}'"
  96. "${output_error_message}")
  97. endif()
  98. endforeach()
  99. else()
  100. # there should be no generated files present
  101. foreach(missing_file_glob_ IN LISTS ALL_FILES_GLOB)
  102. file(GLOB checkMissingFiles_ RELATIVE "${bin_dir}" "${missing_file_glob_}")
  103. if(checkMissingFiles_)
  104. message(FATAL_ERROR "Unexpected files found: '${checkMissingFiles_}'"
  105. "${output_error_message}")
  106. endif()
  107. endforeach()
  108. endif()
  109. # handle additional result verifications
  110. if(EXISTS "${src_dir}/tests/${RunCMake_TEST_FILE_PREFIX}/VerifyResult.cmake")
  111. include("${src_dir}/tests/${RunCMake_TEST_FILE_PREFIX}/VerifyResult.cmake")
  112. endif()
  113. message(STATUS "${output}")
  114. message("${error}")