# Initialize ######################################################################################

Include                     ( cotire        OPTIONAL RESULT_VARIABLE HAS_COTIRE )
Include                     ( pedantic      OPTIONAL RESULT_VARIABLE HAS_PEDANTIC )
Include                     ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS )

# Test ############################################################################################

Find_Package                ( GTest )
If                          ( NOT "${GTest_FOUND}" )
    Return                      ( )
EndIf                       ( )

File                        ( GLOB_RECURSE CPPARGS_TEST_HEADER_FILES
                              ${CMAKE_CURRENT_SOURCE_DIR}/*.h )
File                        ( GLOB_RECURSE CPPARGS_TEST_INLINE_FILES
                              ${CMAKE_CURRENT_SOURCE_DIR}/*.inl )
File                        ( GLOB_RECURSE CPPARGS_TEST_SOURCE_FILES
                              RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
                              ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp )

ForEach                     ( FILE IN LISTS CPPARGS_TEST_SOURCE_FILES )
    # add test
    Get_Filename_Component      ( TEST_DIR  ${FILE} DIRECTORY )
    Get_Filename_Component      ( TEST_NAME ${FILE} NAME_WE )
    Set                         ( TEST_NAME "${TEST_DIR}/${TEST_NAME}"  )
    String                      ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" )
    String                      ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" )
    String                      ( REPLACE "_" "-" TEST_NAME "${TEST_NAME}" )
    Set                         ( TEST_NAME "test-${TEST_NAME}" )
    Add_Executable              ( ${TEST_NAME}
                                  EXCLUDE_FROM_ALL
                                  ${CPPARGS_TEST_HEADER_FILES}
                                  ${CPPARGS_TEST_INLINE_FILES}
                                  ${FILE} )
    Target_Link_Libraries       ( ${TEST_NAME}
                                  PUBLIC
                                    cppargs
                                    GTest::Main )

    # pedantic
    If                          ( HAS_PEDANTIC )
        Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL )
    EndIf                       ( )

    # test
    If                          ( HAS_CMAKE_TESTS )
        Add_CMake_Test              ( NAME ${TEST_NAME} TARGET ${TEST_NAME} )
    Else                        ( )
        Add_Test                    ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
    EndIf                       ( )
EndForEach                  ( )
