[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/AliceO2Group/AliceO2/dev/cmake/O2AddTest.cmake [Back]  [Original]

# Copyright 2019-2020 CERN and copyright holders of ALICE O2.
# See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
# All rights not expressly granted are reserved.
#
# This software is distributed under the terms of the GNU General Public
# License v3 (GPL Version 3), copied verbatim in the file "COPYING".
#
# In applying this license CERN does not waive the privileges and immunities
# granted to it by virtue of its status as an Intergovernmental Organization
# or submit itself to any jurisdiction.

include_guard()

include(O2AddExecutable)

#
# o2_add_test(testName SOURCES) adds an executable that is also a test.
#
# It is a convenience function that groups the actions of cmake intrinsics
# add_executable and add_test.
#
# If BUILD_TESTING if not set this function does nothing at all.
#
# The test name is the name of the first source file in SOURCES, unless the NAME
# parameter is given (see below).
#
# o2_add_test accept the following parameters :
#
# required
#
# * SOURCES : same meaning as for o2_add_executable
#
# recommended/often needed :
#
# * PUBLIC_LINK_LIBRARIES : same meaning as for
#   o2_add_executable
# * COMMAND_LINE_ARGS : the arguments to pass to the executable, if any
# * COMPONENT_NAME : a short name that will be used to create the
#   executable name (if not provided with NAME) : o2-test-[COMPONENT_NAME]-...
# * LABELS : labels attached to the test, that can then be used to filter
#   which tests are executed with the `ctest -L` command
#
# optional/less frequently used :
#
# * NAME: if given, will be used verbatim as the test name
# * ENVIRONMENT: extra environment needed by the test to run properly
# * TIMEOUT : the number of seconds allowed for the test to run. Past this time
#   failure is assumed.
# * WORKING_DIRECTORY: the directory in which the test will be ran
#
# rarely needed/for special cases :
#
# * NO_BOOST_TEST :  we assume most of the tests are using the Boost::Test
#   framework and thus link the test with the Boost::unit_test_framework target.
#   If the test is known to not depend on Boost::Test, then the NO_BOOST_TEST
#   option can be given to forego this dependency
# * INSTALL : by default tests are _not_ installed. If that option is present
#   then the test is installed (under ${CMAKE_INSTALL_PREFIX}/tests, not in
#   ${CMAKE_INSTALL_PREFIX}/bin like other binaries)
# * CONFIGURATIONS : the test will only be ran for those named configurations
# * TARGETVARNAME : same meaning as for o2_add_executable
#

function(o2_add_test)

  if(NOT BUILD_TESTING)
    return()
  endif()

  cmake_parse_arguments(
    PARSE_ARGV
    1
    A
    "INSTALL;NO_BOOST_TEST"
    "COMPONENT_NAME;TIMEOUT;WORKING_DIRECTORY;NAME;TARGETVARNAME;HIPIFIED"
    "SOURCES;PUBLIC_LINK_LIBRARIES;COMMAND_LINE_ARGS;LABELS;CONFIGURATIONS;ENVIRONMENT"
    )

  if(A_UNPARSED_ARGUMENTS)
    message(FATAL_ERROR "Unexpected unparsed arguments: ${A_UNPARSED_ARGUMENTS}")
  endif()

  set(testName ${ARGV0})

  set(linkLibraries ${A_PUBLIC_LINK_LIBRARIES})

  if(NOT A_NO_BOOST_TEST)
    set(linkLibraries ${linkLibraries} Boost::unit_test_framework)
    if(A_COMMAND_LINE_ARGS)
      # Boost test programs are to be called like this :
      #
      # testProgram -- arg1 arg2 ...
      #
      # if they have arguments.
      set(A_COMMAND_LINE_ARGS "--" ${A_COMMAND_LINE_ARGS})
    endif()
  endif()

  set(noInstall NO_INSTALL)

  if(A_INSTALL)
    set(noInstall "")
  endif()

  # create the executable
  if (NOT A_HIPIFIED)
    o2_add_executable(${testName}
                      SOURCES ${A_SOURCES}
                      PUBLIC_LINK_LIBRARIES ${linkLibraries}
                      COMPONENT_NAME ${A_COMPONENT_NAME}
                      IS_TEST ${noInstall} TARGETVARNAME targetName)
  else()
    o2_add_hipified_executable(${testName}
                        SOURCES ${A_SOURCES}
                        DEST_SRC_REL_PATH ${A_HIPIFIED}
                        PUBLIC_LINK_LIBRARIES ${linkLibraries}
                        COMPONENT_NAME ${A_COMPONENT_NAME}
                        IS_TEST ${noInstall} TARGETVARNAME targetName)
  endif()

  if(A_TARGETVARNAME)
    set(${A_TARGETVARNAME} ${targetName} PARENT_SCOPE)
  endif()

  # create a test for the executable above
  set(name "")
  if(A_NAME)
    set(name ${A_NAME})
  else()
    list(GET A_SOURCES 0 firstSource)
    get_filename_component(src ${firstSource} ABSOLUTE)
    file(RELATIVE_PATH name ${CMAKE_SOURCE_DIR} ${src})
  endif()

  add_test(NAME ${name}
           COMMAND ${targetName} ${A_COMMAND_LINE_ARGS}
           WORKING_DIRECTORY ${A_WORKING_DIRECTORY}
           CONFIGURATIONS ${A_CONFIGURATIONS}
          )

  set_property(TEST ${name} PROPERTY LABELS ${A_LABELS})
  set_property(TEST ${name} PROPERTY ENVIRONMENT "${A_ENVIRONMENT}")
  set_property(TEST ${name} PROPERTY TIMEOUT ${A_TIMEOUT})

endfunction()

Web Proxy Viewer  |  New URL  |  Original Page