# SituationMap Unit Tests CMakeLists.txt
# Tests for Qt6 migration of Lts/Viewer/SituationMap module

cmake_minimum_required(VERSION 3.16)

# Find GTest - try system package first, then FetchContent
find_package(GTest QUIET)
if(NOT GTest_FOUND)
    include(FetchContent)
    FetchContent_Declare(
        googletest
        GIT_REPOSITORY https://github.com/google/googletest.git
        GIT_TAG release-1.12.1
    )
    FetchContent_MakeAvailable(googletest)
endif()

# Test for Qt6 API migrations
add_executable(test_qt6_api_migrations
    ../../../../tests/test_qt6_api_migrations.cpp
)
target_link_libraries(test_qt6_api_migrations PRIVATE
    GTest::gtest_main
    Qt6::Core
    Qt6::Gui
    Qt6::Concurrent
)
add_test(NAME Qt6ApiMigrationsTest COMMAND test_qt6_api_migrations)

# Test for GraphicalObjects module
add_executable(test_graphical_objects
    ../../../../tests/test_graphical_objects.cpp
)
target_link_libraries(test_graphical_objects PRIVATE
    GTest::gtest_main
    GraphicalObjects
    Qt6::Core
    Qt6::Gui
)
add_test(NAME GraphicalObjectsTest COMMAND test_graphical_objects)

# Test for Rubberbands module
add_executable(test_rubberbands
    ../../../../tests/test_rubberbands.cpp
)
target_link_libraries(test_rubberbands PRIVATE
    GTest::gtest_main
    Rubberbands
    Qt6::Core
    Qt6::Gui
)
add_test(NAME RubberbandsTest COMMAND test_rubberbands)

# Test for MathUtils module
add_executable(test_mathutils
    ../../../../tests/test_mathutils.cpp
)
target_link_libraries(test_mathutils PRIVATE
    GTest::gtest_main
    MathUtils
    Qt6::Core
)
add_test(NAME MathUtilsTest COMMAND test_mathutils)

# Test for MapImpl module
add_executable(test_mapimpl
    ../../../../tests/test_mapimpl.cpp
)
target_link_libraries(test_mapimpl PRIVATE
    GTest::gtest_main
    MapImpl
    Qt6::Core
    Qt6::Gui
)
add_test(NAME MapImplTest COMMAND test_mapimpl)

# Test for SymbologyImpl module
add_executable(test_symbologyimpl
    ../../../../tests/test_symbologyimpl.cpp
)
target_link_libraries(test_symbologyimpl PRIVATE
    GTest::gtest_main
    SymbologyImpl
    advancedSymbology
    Qt6::Core
    Qt6::Gui
)
add_test(NAME SymbologyImplTest COMMAND test_symbologyimpl)

# Test for Viewshed3D module
add_executable(test_viewshed3d
    ../../../../tests/test_viewshed3d.cpp
)
target_link_libraries(test_viewshed3d PRIVATE
    GTest::gtest_main
    Viewshed3D
    Qt6::Core
    Qt6::Gui
)
add_test(NAME Viewshed3DTest COMMAND test_viewshed3d)