BCMTest.cmake 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. option(BUILD_TESTING off)
  2. include(CMakeParseArguments)
  3. enable_testing()
  4. if(NOT TARGET check)
  5. add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C ${CMAKE_CFG_INTDIR})
  6. endif()
  7. if(NOT TARGET tests)
  8. add_custom_target(tests COMMENT "Build all tests.")
  9. add_dependencies(check tests)
  10. endif()
  11. function(bcm_mark_as_test)
  12. foreach(TEST_TARGET ${ARGN})
  13. if (NOT BUILD_TESTING)
  14. set_target_properties(${TEST_TARGET}
  15. PROPERTIES EXCLUDE_FROM_ALL TRUE
  16. )
  17. endif()
  18. add_dependencies(tests ${TEST_TARGET})
  19. endforeach()
  20. endfunction(bcm_mark_as_test)
  21. function(bcm_add_test)
  22. set(options COMPILE_ONLY WILL_FAIL)
  23. set(oneValueArgs NAME)
  24. set(multiValueArgs SOURCES CONTENT)
  25. cmake_parse_arguments(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  26. # TODO: Check if name exists
  27. set(SOURCES ${PARSE_SOURCES})
  28. if(PARSE_CONTENT)
  29. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generated-${PARSE_NAME}.cpp "${PARSE_CONTENT}")
  30. set(SOURCES ${CMAKE_CURRENT_BINARY_DIR}/generated-${PARSE_NAME}.cpp)
  31. endif()
  32. if(PARSE_COMPILE_ONLY)
  33. if(PARSE_WILL_FAIL)
  34. add_library(_${PARSE_NAME}_TEST_FAIL STATIC EXCLUDE_FROM_ALL ${SOURCES})
  35. add_custom_target(${PARSE_NAME}
  36. COMMAND ${CMAKE_COMMAND} --build . --target _${PARSE_NAME}_TEST_FAIL --config $<CONFIGURATION>
  37. WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
  38. add_test(NAME ${PARSE_NAME}
  39. COMMAND ${CMAKE_COMMAND} --build . --target _${PARSE_NAME}_TEST_FAIL --config $<CONFIGURATION>
  40. WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
  41. set_tests_properties(${PARSE_NAME} PROPERTIES WILL_FAIL TRUE)
  42. else()
  43. add_library(${PARSE_NAME} STATIC ${SOURCES})
  44. bcm_mark_as_test(${PARSE_NAME})
  45. endif()
  46. else()
  47. add_executable (${PARSE_NAME} ${SOURCES})
  48. bcm_mark_as_test(${PARSE_NAME})
  49. if(WIN32)
  50. add_test(NAME ${PARSE_NAME} WORKING_DIRECTORY ${LIBRARY_OUTPUT_PATH} COMMAND ${PARSE_NAME}${CMAKE_EXECUTABLE_SUFFIX})
  51. else()
  52. add_test(NAME ${PARSE_NAME} COMMAND ${PARSE_NAME})
  53. endif()
  54. if(WILL_FAIL)
  55. set_tests_properties(${PARSE_NAME} PROPERTIES WILL_FAIL TRUE)
  56. endif()
  57. endif()
  58. endfunction(bcm_add_test)
  59. function(bcm_test_header)
  60. set(options STATIC)
  61. set(oneValueArgs NAME HEADER)
  62. set(multiValueArgs)
  63. cmake_parse_arguments(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  64. if(PARSE_STATIC)
  65. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/header-main-include-${PARSE_NAME}.cpp
  66. "#include <${PARSE_HEADER}>\nint main() {}\n"
  67. )
  68. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/header-static-include-${PARSE_NAME}.cpp
  69. "#include <${PARSE_HEADER}>\n"
  70. )
  71. bcm_add_test(NAME header-static-include-${PARSE_NAME} SOURCES
  72. ${CMAKE_CURRENT_BINARY_DIR}/header-main-include-${PARSE_NAME}.cpp
  73. ${CMAKE_CURRENT_BINARY_DIR}/header-static-include-${PARSE_NAME}.cpp
  74. )
  75. else()
  76. bcm_add_test(NAME header-include-${PARSE_NAME} CONTENT
  77. "#include <${PARSE_HEADER}>\nint main() {}\n"
  78. )
  79. endif()
  80. endfunction(bcm_test_header)