# Тесты ядра. Структура зеркалит src: tests/ayla — протоколная часть, # tests/aircon — конверсии/шаблоны (появятся в M3). # # Тесты собираются с исключениями (фреймворк), сама библиотека — без. include(FetchContent) FetchContent_Declare( doctest GIT_REPOSITORY https://github.com/doctest/doctest.git GIT_TAG v2.4.12 GIT_SHALLOW TRUE ) FetchContent_MakeAvailable(doctest) function(fgl_add_test name) add_executable(test_${name} ${ARGN}) target_compile_features(test_${name} PRIVATE cxx_std_20) target_link_libraries(test_${name} PRIVATE fgl-aircon doctest_with_main) target_include_directories(test_${name} PRIVATE "${CMAKE_SOURCE_DIR}/src") add_test(NAME ${name} COMMAND test_${name}) endfunction() # Раннер сессии — не тест, приложение для интеграционных сценариев # (запускается tests/ayla/test_session_mock.py через ctest). add_executable(session_runner ayla/session_runner.cpp) target_compile_features(session_runner PRIVATE cxx_std_20) target_link_libraries(session_runner PRIVATE fgl-aircon) target_include_directories(session_runner PRIVATE "${CMAKE_SOURCE_DIR}/src") fgl_add_test(ayla_platform ayla/test_platform.cpp) fgl_add_test(ayla_httpd ayla/test_httpd.cpp) fgl_add_test(ayla_crypto ayla/test_crypto.cpp) fgl_add_test(ayla_envelope ayla/test_envelope.cpp) fgl_add_test(ayla_json ayla/test_json.cpp) fgl_add_test(ayla_httpc ayla/test_httpc.cpp) # Интеграционные сценарии с mock-модулем (python, stdlib-only). find_package(Python3 COMPONENTS Interpreter REQUIRED) add_test(NAME ayla_session_mock COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/ayla/test_session_mock.py $ ${CMAKE_CURRENT_SOURCE_DIR}/ayla/mock_ac.py) set_tests_properties(ayla_session_mock PROPERTIES TIMEOUT 180)