project(chatterino-test)

set(main_dir ${CMAKE_SOURCE_DIR}/src)

include_directories(${main_dir})

set(chatterino_SOURCES
    ${CMAKE_SOURCE_DIR}/src/BaseSettings.cpp

    ${CMAKE_SOURCE_DIR}/src/common/ChatterinoSetting.cpp
    ${CMAKE_SOURCE_DIR}/src/common/Modes.cpp
    ${CMAKE_SOURCE_DIR}/src/common/NetworkCommon.cpp
    ${CMAKE_SOURCE_DIR}/src/common/NetworkManager.cpp
    ${CMAKE_SOURCE_DIR}/src/common/NetworkPrivate.cpp
    ${CMAKE_SOURCE_DIR}/src/common/NetworkRequest.cpp
    ${CMAKE_SOURCE_DIR}/src/common/NetworkResult.cpp
    ${CMAKE_SOURCE_DIR}/src/common/QLogging.cpp
    ${CMAKE_SOURCE_DIR}/src/common/UsernameSet.cpp

    ${CMAKE_SOURCE_DIR}/src/controllers/highlights/HighlightPhrase.cpp

    ${CMAKE_SOURCE_DIR}/src/messages/Emote.cpp
    ${CMAKE_SOURCE_DIR}/src/messages/Image.cpp
    ${CMAKE_SOURCE_DIR}/src/messages/ImageSet.cpp

    ${CMAKE_SOURCE_DIR}/src/providers/emoji/Emojis.cpp

    ${CMAKE_SOURCE_DIR}/src/singletons/Paths.cpp

    ${CMAKE_SOURCE_DIR}/src/util/DebugCount.cpp
    ${CMAKE_SOURCE_DIR}/src/util/RapidjsonHelpers.cpp

    ${CMAKE_SOURCE_DIR}/resources/resources.qrc
    ${CMAKE_SOURCE_DIR}/resources/resources_autogenerated.qrc
    )

set(test_SOURCES
    ${CMAKE_CURRENT_LIST_DIR}/src/main.cpp
    ${CMAKE_CURRENT_LIST_DIR}/src/AccessGuard.cpp
    ${CMAKE_CURRENT_LIST_DIR}/src/NetworkCommon.cpp
    ${CMAKE_CURRENT_LIST_DIR}/src/NetworkRequest.cpp
    ${CMAKE_CURRENT_LIST_DIR}/src/UsernameSet.cpp
    ${CMAKE_CURRENT_LIST_DIR}/src/HighlightPhrase.cpp
    ${CMAKE_CURRENT_LIST_DIR}/src/Emojis.cpp
    )

add_executable(${PROJECT_NAME}
    ${chatterino_SOURCES}
    ${test_SOURCES}
    )
add_sanitizers(${PROJECT_NAME})

# Enable autogeneration of Qts MOC/RCC/UIC
set_target_properties(${PROJECT_NAME}
    PROPERTIES
    AUTOMOC ON
    AUTORCC ON
    AUTOUIC ON
    )

target_link_libraries(${PROJECT_NAME} PRIVATE
    Qt5::Core
    Qt5::Widgets
    Qt5::Network
    Qt5::Concurrent
    gtest gtest_main
    Pajlada::Serialize
    Pajlada::Settings
    Pajlada::Signals
    Threads::Threads
    )

target_compile_definitions(${PROJECT_NAME} PRIVATE
    CHATTERINO
    CHATTERINO_TEST
    UNICODE
    AB_CUSTOM_THEME
    AB_CUSTOM_SETTINGS
    IRC_STATIC
    IRC_NAMESPACE=Communi
    CHATTERINO_GIT_HASH=\"${GIT_HASH}\"
    CHATTERINO_GIT_RELEASE=\"${GIT_RELEASE}\"
    CHATTERINO_GIT_COMMIT=\"${GIT_COMMIT}\"
    )

if (WIN32)
    target_compile_definitions(${PROJECT_NAME} PRIVATE
        USEWINSDK
        )
endif ()

set_target_properties(${PROJECT_NAME}
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
    RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/bin"
    RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/bin"
    RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/bin"
    )

# gtest_add_tests manages to discover the tests because it looks through the source files
# HOWEVER, it fails to run, because we have some bug that causes the QApplication exit to stall when no network requests have been made.
# ctest runs each test individually, so for now we require that testers just run the ./bin/chatterino-test binary without any filters applied
# gtest_add_tests(
#     TARGET ${PROJECT_NAME}
#     SOURCES ${test_SOURCES}
#     )