diff --git a/Lts/Common/CommonUnitTestsPlaceholder/CMakeLists.txt b/Lts/Common/CommonUnitTestsPlaceholder/CMakeLists.txt new file mode 100644 index 000000000..2864c81b1 --- /dev/null +++ b/Lts/Common/CommonUnitTestsPlaceholder/CMakeLists.txt @@ -0,0 +1,32 @@ +cmake_minimum_required(VERSION 3.16) +project(CommonUnitTestsPlaceholder) + +include(FetchContent) + +option(BUILD_SMOKE_TESTS "Build QtTest smoke tests" OFF) +option(BUILD_GTEST_SMOKE "Build GTest smoke tests" OFF) + +add_subdirectory(mocks) + +if(BUILD_SMOKE_TESTS) + find_package(Qt6 REQUIRED COMPONENTS Test) + add_executable(coordTransTests_smoke coordTransTests_smoke.cpp) + target_link_libraries(coordTransTests_smoke PRIVATE Qt6::Test MockCoordTrans::MockCoordTrans) + add_test(NAME coordTransTests_smoke COMMAND coordTransTests_smoke) +endif() + +if(BUILD_GTEST_SMOKE) + find_package(GTest QUIET) + if(NOT GTest_FOUND) + FetchContent_Declare( + googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG release-1.12.1 + ) + set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + FetchContent_MakeAvailable(googletest) + endif() + add_executable(coordTransTests_gtest coordTransTests_gtest.cpp) + target_link_libraries(coordTransTests_gtest PRIVATE GTest::gtest_main MockCoordTrans::MockCoordTrans) + add_test(NAME coordTransTests_gtest COMMAND coordTransTests_gtest) +endif() diff --git a/Lts/Common/CommonUnitTestsPlaceholder/coordTransTests_gtest.cpp b/Lts/Common/CommonUnitTestsPlaceholder/coordTransTests_gtest.cpp new file mode 100644 index 000000000..b0fc3f57e --- /dev/null +++ b/Lts/Common/CommonUnitTestsPlaceholder/coordTransTests_gtest.cpp @@ -0,0 +1,12 @@ +#include "mocks/MockCoordTrans.h" +#include + +TEST(CoordTransGTest, ForwardInverseRoundtrip) { + auto p = MockCoordTrans::forward(1.2345, 2.3456); + EXPECT_NEAR(p.first, 1.2345 * 111000.0, 1e-6); + EXPECT_NEAR(p.second, 2.3456 * 111000.0, 1e-6); + + auto inv = MockCoordTrans::inverse(p.first, p.second); + EXPECT_NEAR(inv.first, 1.2345, 1e-9); + EXPECT_NEAR(inv.second, 2.3456, 1e-9); +} diff --git a/Lts/Common/CommonUnitTestsPlaceholder/coordTransTests_smoke.cpp b/Lts/Common/CommonUnitTestsPlaceholder/coordTransTests_smoke.cpp new file mode 100644 index 000000000..d5a177c35 --- /dev/null +++ b/Lts/Common/CommonUnitTestsPlaceholder/coordTransTests_smoke.cpp @@ -0,0 +1,15 @@ +#include +#include "mocks/MockCoordTrans.h" + +class CoordTransSmoke : public QObject { + Q_OBJECT +private slots: + void testForward() { + auto p = MockCoordTrans::forward(10.0, 20.0); + QVERIFY(qFuzzyCompare(p.first, 10.0 * 111000.0)); + QVERIFY(qFuzzyCompare(p.second, 20.0 * 111000.0)); + } +}; + +QTEST_MAIN(CoordTransSmoke) +#include "coordTransTests_smoke.moc" diff --git a/Lts/Common/CommonUnitTestsPlaceholder/mocks/CMakeLists.txt b/Lts/Common/CommonUnitTestsPlaceholder/mocks/CMakeLists.txt new file mode 100644 index 000000000..9e634c072 --- /dev/null +++ b/Lts/Common/CommonUnitTestsPlaceholder/mocks/CMakeLists.txt @@ -0,0 +1,5 @@ +add_library(MockCoordTrans STATIC MockCoordTrans.h) +target_include_directories(MockCoordTrans PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +# Export header-only semantics by providing an interface target +add_library(MockCoordTrans::MockCoordTrans ALIAS MockCoordTrans) diff --git a/Lts/Common/CommonUnitTestsPlaceholder/mocks/MockCoordTrans.h b/Lts/Common/CommonUnitTestsPlaceholder/mocks/MockCoordTrans.h new file mode 100644 index 000000000..5028ddc30 --- /dev/null +++ b/Lts/Common/CommonUnitTestsPlaceholder/mocks/MockCoordTrans.h @@ -0,0 +1,16 @@ +#pragma once +#include + +// Minimal realistic mock for coordinate transforms used during migration. +// Forward conversion returns approximate meters using lat/lon*111000. +class MockCoordTrans { +public: + // approximate forward: (lat, lon) -> (x_m, y_m) + static std::pair forward(double lat_deg, double lon_deg) { + return {lat_deg * 111000.0, lon_deg * 111000.0}; + } + // approximate inverse + static std::pair inverse(double x_m, double y_m) { + return {x_m / 111000.0, y_m / 111000.0}; + } +};