Skip to content
Snippets Groups Projects
Select Git revision
  • ddd258ca991893e35766507dc3af4c6cf4b4b4a0
  • master default protected
  • feature/refactor
  • 4.24
  • develop
  • Rendering
  • temp-optix-6
7 results

GenericHMD.uasset

Blame
  • Testing.cmake 10.05 KiB
    #------------------------------------------------------------------------------
    # Project Phoenix
    #
    # Copyright (c) 2017-2018 RWTH Aachen University, Germany,
    # Virtual Reality & Immersive Visualization Group.
    #------------------------------------------------------------------------------
    #                                 License
    #
    # Licensed under the 3-Clause BSD License (the "License");
    # you may not use this file except in compliance with the License.
    # See the file LICENSE for the full text.
    # You may obtain a copy of the License at
    #
    #     https://opensource.org/licenses/BSD-3-Clause
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    #------------------------------------------------------------------------------
    
    include(CTest)
    enable_testing()
    
    include(WarningLevels)
    
    conan_or_find_package(catch REQUIRED)
    conan_or_find_package(trompeloeil REQUIRED)
    
    define_property(TARGET
      PROPERTY testing__removes_libraries
      BRIEF_DOCS "Libraries to be removed for mocking"
      FULL_DOCS "Libraries to be removed for mocking")
    define_property(TARGET
      PROPERTY testing__adds_libraries
      BRIEF_DOCS "Libraries to be added for mocking"
      FULL_DOCS "Libraries to be added for mocking")
    
    set_property(GLOBAL PROPERTY USE_FOLDERS ON)
    set_property(GLOBAL PROPERTY ADDED_TESTS "")
    
    set(IS_BUILD_SERVER
      FALSE CACHE BOOL
      "Is this the build server? So we, e.g., simulate user input for tests requiring it."
      )
    
    
    function(CREATE_TEST_MAIN)
      set(options)
      set(oneValueArgs )
      set(multiValueArgs SOURCES HEADERS INCLUDE_DIRECTORIES LIBRARIES )
      cmake_parse_arguments(CREATE_TEST_MAIN_
        "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
    
      testing__add_library_(
        NAME test_main
        SOURCES ${CREATE_TEST_MAIN__SOURCES} ${CREATE_TEST_MAIN__HEADERS}
        INCLUDE_DIRECTORIES ${CREATE_TEST_MAIN__INCLUDE_DIRECTORIES}
        LIBRARIES ${CREATE_TEST_MAIN__LIBRARIES}
        )
    endfunction()
    
    
    function(CREATE_MOCK_MAIN)
      set(options)
      set(oneValueArgs )
      set(multiValueArgs SOURCES HEADERS INCLUDE_DIRECTORIES LIBRARIES )
      cmake_parse_arguments(CREATE_MOCK_MAIN_
        "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
    
      testing__add_library_(
        NAME mock_main
        SOURCES ${CREATE_MOCK_MAIN__SOURCES} ${CREATE_MOCK_MAIN__HEADERS}
        INCLUDE_DIRECTORIES ${CREATE_MOCK_MAIN__INCLUDE_DIRECTORIES}
        LIBRARIES ${CREATE_MOCK_MAIN__LIBRARIES}
        )
    endfunction()
    
    
    function(TESTING__ADD_LIBRARY_)
      set(options)
      set(oneValueArgs NAME)
      set(multiValueArgs SOURCES HEADERS INCLUDE_DIRECTORIES LIBRARIES )
      cmake_parse_arguments(TESTING__ADD_LIBRARY_
        "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
    
      add_library(${TESTING__ADD_LIBRARY__NAME}
        ${TESTING__ADD_LIBRARY__SOURCES}
        ${TESTING__ADD_LIBRARY__HEADERS}
        )
      target_include_directories(${TESTING__ADD_LIBRARY__NAME}
        PUBLIC ${TESTING__ADD_LIBRARY__INCLUDE_DIRECTORIES}
        )
      target_link_libraries(${TESTING__ADD_LIBRARY__NAME}
        ${TESTING__ADD_LIBRARY__LIBRARIES}
        )
    endfunction()
    
    
    function(ADD_TESTS)
      set(options )
      set(oneValueArgs NAME)
      set(multiValueArgs
        SOURCES HEADERS INCLUDE_DIRECTORIES LIBRARIES PATH_TO_ADD)
      cmake_parse_arguments(ADD_TESTS_
        "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
    
      foreach(TEST_SOURCE_FILE ${ADD_TESTS__SOURCES})
        add_single_test(
          NAME ${TEST_NAME}
          SOURCE ${TEST_SOURCE_FILE}
          INCLUDE_DIRECTORIES ${ADD_TESTS__INCLUDE_DIRECTORIES}
          LIBRARIES ${ADD_TESTS__LIBRARIES}
          PATH_TO_ADD ${ADD_TESTS__PATH_TO_ADD}
          )
      endforeach()
    endfunction()
    
    
    macro(ADD_SINGLE_TEST)
      set(options )
      set(oneValueArgs)
      set(multiValueArgs SOURCE INCLUDE_DIRECTORIES LIBRARIES PATH_TO_ADD)
      cmake_parse_arguments(ADD_SINGLE_TEST_
        "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
    
      get_filename_component(
        TEST_NAME
        ${ADD_SINGLE_TEST__SOURCE} NAME_WE)
    
      add_executable(${TEST_NAME}
        ${ADD_SINGLE_TEST__SOURCE}
        )
      target_include_directories(${TEST_NAME}
        PRIVATE ${ADD_SINGLE_TEST__INCLUDE_DIRECTORIES}
        )
      target_link_libraries(${TEST_NAME}
        ${ADD_SINGLE_TEST__LIBRARIES}
        ${CONAN_OR_CMAKE_catch}
        test_main mock_main
        )
       
      CONFIGURE_TEST_(
        NAME ${TEST_NAME}
        SOURCE ${ADD_SINGLE_TEST__SOURCE}
        PATH_TO_ADD ${ADD_SINGLE_TEST__PATH_TO_ADD}
        )
    endmacro()
    
    
    function(CONFIGURE_TEST_)
      set(options )
      set(oneValueArgs NAME)
      set(multiValueArgs SOURCE PATH_TO_ADD)
      cmake_parse_arguments(CONFIGURE_TEST_
        "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
    
      if(WIN32 AND MSVC)
        CONFIGURE_MSVC_USERFILE(${CONFIGURE_TEST__NAME}
          ${CONFIGURE_TEST__PATH_TO_ADD})
      endif()
      
      add_test(NAME ${CONFIGURE_TEST__NAME}
        COMMAND ${CONFIGURE_TEST__NAME})
      set_warning_levels_RWTH(${CONFIGURE_TEST__NAME})
    
      testing__set_timeout_(${CONFIGURE_TEST__NAME})
      
      set_property(TARGET ${CONFIGURE_TEST__NAME}
        PROPERTY FOLDER "Tests")
      source_group("Source Files"
        FILES ${CONFIGURE_TEST__SOURCE})
    
      set_property(GLOBAL APPEND PROPERTY
        ADDED_TESTS "${CONFIGURE_TEST__NAME}")
      
      if(IS_BUILD_SERVER)
        target_compile_definitions(${CONFIGURE_TEST__NAME} PUBLIC -DIS_BUILD_SERVER)
      endif()
    endfunction()
    
    
    function(TESTING__SET_TIMEOUT_ TARGET)
      if(NOT ${TARGET} MATCHES "integration")
        set_tests_properties(${TARGET} PROPERTIES TIMEOUT 10.0)
      else()
        set_tests_properties(${TARGET} PROPERTIES TIMEOUT 120.0)
      endif()
    endfunction()
    
    
    macro(ADD_MOCK)
      set(options )
      set(oneValueArgs NAME)
      set(multiValueArgs
        SOURCES
        HEADERS
        INCLUDE_DIRECTORIES
        INCLUDE_DIRECTORIES_OF
        COMPILE_OPTIONS
        REMOVES_LIBRARIES
        ADDS_LIBRARIES_OF
      )
      cmake_parse_arguments(ADD_MOCK_
        "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
    
      string(TOUPPER ${ADD_MOCK__NAME} ADD_MOCK__NAME_UPPER)
      string(TOLOWER ${ADD_MOCK__NAME} ADD_MOCK__NAME_LOWER)
      
      add_library(${ADD_MOCK__NAME} SHARED
        ${ADD_MOCK__SOURCES}
        ${ADD_MOCK__HEADERS}
        )
      target_link_libraries(${ADD_MOCK__NAME}
        ${CONAN_OR_CMAKE_trompeloeil}
        mock_main test_main
        )
      foreach(CURRENT_TARGET ${ADD_MOCK__INCLUDE_DIRECTORIES_OF})
        get_target_property(CURRENT_INCLUCE_DIRECTORIES
          ${CURRENT_TARGET} INTERFACE_INCLUDE_DIRECTORIES)
        message("CURRENT_INCLUCE_DIRECTORIES ${CURRENT_INCLUCE_DIRECTORIES}")
        if (CURRENT_INCLUCE_DIRECTORIES)
          target_include_directories(${ADD_MOCK__NAME}
    	PUBLIC ${CURRENT_INCLUCE_DIRECTORIES}
    	)
        endif()
      endforeach()
      target_include_directories(${ADD_MOCK__NAME}
        PUBLIC ${ADD_MOCK__INCLUDE_DIRECTORIES}
        )
      target_compile_definitions(${ADD_MOCK__NAME}
        PRIVATE ${ADD_MOCK__NAME_UPPER}_BUILD
        )
      target_compile_options(${ADD_MOCK__NAME}
        PUBLIC ${ADD_MOCK__COMPILE_OPTIONS}
        )
    
      set_property(TARGET ${ADD_MOCK__NAME} PROPERTY FOLDER "Tests")
    
      set_target_properties(${ADD_MOCK__NAME}
        PROPERTIES testing__removes_libraries "${ADD_MOCK__REMOVES_LIBRARIES}")
    
      set(ADDITIONAL_LIBRARY_LOCATIONS )
      foreach(CURRENT_TARGET ${ADD_MOCK__ADDS_LIBRARIES_OF})
        get_target_property(LIBRARY_LOCATION ${CURRENT_TARGET} LOCATION)
        list(APPEND ADDITIONAL_LIBRARY_LOCATIONS ${LIBRARY_LOCATION})
      endforeach()
      set_target_properties(${ADD_MOCK__NAME}
        PROPERTIES testing__adds_libraries "${ADDITIONAL_LIBRARY_LOCATIONS}")
    
      generate_export_header(${ADD_MOCK__NAME}
        EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/mocks/${ADD_MOCK__NAME_LOWER}_export.hpp
    )
      set_warning_levels_rwth(${ADD_MOCK__NAME})
    endmacro()
    
    
    
    #-------------------------------------------------------------------------------
    
    
    
    function(CONFIGURE_MSVC_USERFILE TARGET_NAME PATH_TO_ADD)
      file(TO_NATIVE_PATH "${PATH_TO_ADD}/Release" _DLL_PATH_RELEASE)
      file(TO_NATIVE_PATH "${PATH_TO_ADD}/Debug" _DLL_PATH_DEBUG)
      set(SOURCE_USER_FILE
        "${CMAKE_SOURCE_DIR}/cmake/VisualStudio2013.vcxproj.user.in")
      set(DESTINATION_USER_FILE
        "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}.vcxproj.user")
      configure_file(${SOURCE_USER_FILE} ${DESTINATION_USER_FILE} @ONLY)
    endfunction()
    
    
    
    
    
    
    
    function(CREATE_CATCH_MAIN_INTERNAL_
        NAME SOURCE INCLUDE_DIRECTORIES)
      add_library(${NAME} ${SOURCE})
      target_include_directories(${NAME} PRIVATE ${INCLUDE_DIRECTORIES})
      target_link_libraries(${NAME} ${CONAN_OR_CMAKE_catch} ${CONAN_OR_CMAKE_trompeloeil})
      set_property(TARGET ${NAME} PROPERTY FOLDER "Tests")
      source_group("Source Files" FILES ${SOURCE})
    endfunction()
    
    
    
    
    macro(EXTRACT_UNIT_AND_INTEGRATION_TEST_TARGETS)
      get_property(added_tests GLOBAL PROPERTY ADDED_TESTS)
      foreach(filename ${added_tests})
      	if(${filename} MATCHES "integration_test")
      	  message(STATUS "Integration Test: ${filename}")
      	  set(INTEGRATION_TEST_TARGETS ${INTEGRATION_TEST_TARGETS} ${filename})
      	else()
      	  message(STATUS "Unit Test: ${filename}")
      	  set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${filename})
      	endif()
      endforeach()
    endmacro()
    
    macro(ADD_TEST_SUITE)
      set(options)
      set(oneValueArgs NAME TEST_REGEX)
      set(multiValueArgs DEPEND_ON_TARGETS)
      cmake_parse_arguments(ADD_TEST_SUITE
        "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
      #we have to escape the " for visual studio)
      add_custom_target(${ADD_TEST_SUITE_NAME} COMMAND ctest --tests-regex \"${ADD_TEST_SUITE_TEST_REGEX}\" -C $<CONFIG>)
       # This comment just ends the escaped signs, for VS highlighting "
      if(ADD_TEST_SUITE_DEPEND_ON_TARGETS)
        add_dependencies(${ADD_TEST_SUITE_NAME} ${ADD_TEST_SUITE_DEPEND_ON_TARGETS})
      endif()
      set_property(TARGET ${ADD_TEST_SUITE_NAME} PROPERTY FOLDER "_Test-Suites_")
    endmacro()
    
    
    
    function(CREATE_TEST_SUITES)
    	EXTRACT_UNIT_AND_INTEGRATION_TEST_TARGETS()
    
    	ADD_TEST_SUITE(
    	  NAME "Unit-Test-Suite"
    	  TEST_REGEX "^test"
    	  DEPEND_ON_TARGETS ${UNIT_TEST_TARGETS})
    
    	ADD_TEST_SUITE(
    	  NAME "Integration-Test-Suite"
    	  TEST_REGEX "^integration"
    	  DEPEND_ON_TARGETS ${INTEGRATION_TEST_TARGETS})
    	
    	ADD_TEST_SUITE(
    	  NAME "Cpplint-Test-Suite"
    	  TEST_REGEX "cpplint")
    
    	ADD_TEST_SUITE(
    	  NAME "Cppcheck-Test-Suite"
    	  TEST_REGEX "cppcheck")
    endfunction()