You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
3.2 KiB

  1. # Module to compiler and add tests to CTest
  2. If ( __CMAKE_TESTS_INCLUDED )
  3. Return ( )
  4. EndIf ( )
  5. Set ( __CMAKE_TESTS_INCLUDED TRUE )
  6. CMake_Minimum_Required ( VERSION 3.0 )
  7. Include ( CMakeParseArguments )
  8. Include ( CTest )
  9. # Function to add a single test
  10. # NAME - Name of the test
  11. # TARGET - Target to execute
  12. # COMMAND - Command to execute
  13. Function ( ADD_CMAKE_TEST )
  14. Set ( OPTIONS COMMAND )
  15. Set ( ONE_VALUE_ARGS NAME TARGET GROUP )
  16. Set ( MULTI_VALUE_ARGS )
  17. CMake_Parse_Arguments ( ADD_CMAKE_TEST "${OPTIONS}" "${ONE_VALUE_ARGS}" "${MULTI_VALUE_ARGS}" ${ARGN} )
  18. If ( NOT ADD_CMAKE_TEST_NAME )
  19. Message ( FATAL_ERROR "ADD_CMAKE_TEST expects the NAME parameter!" )
  20. EndIf ( )
  21. If ( NOT ADD_CMAKE_TEST_TARGET )
  22. Message ( FATAL_ERROR "ADD_CMAKE_TEST expects the TARGET parameter!" )
  23. EndIf ( )
  24. If ( NOT ADD_CMAKE_TEST_COMMAND )
  25. Set ( ADD_CMAKE_TEST_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${ADD_CMAKE_TEST_TARGET} )
  26. Else ( )
  27. Set ( ADD_CMAKE_TEST_COMMAND ${ADD_CMAKE_TEST_UNPARSED_ARGUMENTS} )
  28. EndIf ( )
  29. # Build Tests #################################################################################
  30. If ( NOT TARGET build-tests )
  31. Add_Custom_Target ( build-tests )
  32. Add_Test ( NAME "build"
  33. COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target build-tests )
  34. EndIf ( )
  35. Add_Dependencies ( build-tests ${ADD_CMAKE_TEST_TARGET} )
  36. # Run Tests ###################################################################################
  37. If ( NOT TARGET tests)
  38. Add_Custom_Target ( tests )
  39. EndIf ( )
  40. Add_Custom_Target ( run-${ADD_CMAKE_TEST_TARGET}
  41. DEPENDS ${ADD_CMAKE_TEST_TARGET}
  42. COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && ${ADD_CMAKE_TEST_COMMAND} )
  43. Add_Dependencies ( tests run-${ADD_CMAKE_TEST_TARGET} )
  44. If ( ADD_CMAKE_TEST_GROUP )
  45. If ( NOT TARGET ${ADD_CMAKE_TEST_GROUP}-tests )
  46. Add_Custom_Target ( ${ADD_CMAKE_TEST_GROUP}-tests )
  47. EndIf ( )
  48. Add_Dependencies ( ${ADD_CMAKE_TEST_GROUP}-tests run-${ADD_CMAKE_TEST_TARGET} )
  49. EndIf ( )
  50. # CTest #######################################################################################
  51. Add_Test ( NAME ${ADD_CMAKE_TEST_NAME}
  52. COMMAND ${ADD_CMAKE_TEST_COMMAND}
  53. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
  54. EndFunction ( )