include(FileUtils)

add_subdirectory(epoc)
add_subdirectory(common)

add_executable(ekatests 
	tests.cpp
    control.cpp
    platform.cpp
    ${COMMON_TEST_FILES}
    ${CORE_TEST_FILES})


target_link_libraries(ekatests PRIVATE
    Catch2
    control_native
    glm
    common
    config
    j2me
    epoc
    epocio
    epockern
    epocloader
    epocpkg
    epocservs
    epocdispatch
    drivers
    gdbstub
    mbedtls
    libtess2
    lunasvg)

if (WIN32)
    target_compile_definitions(ekatests PRIVATE NOMINMAX)
endif()

if (EKA2L1_HAVE_FFMPEG)
    target_link_libraries(ekatests PRIVATE ffmpeg)
    target_compile_definitions(ekatests PRIVATE EKA2L1_HAS_FFMPEG=1)
endif()

# The fixtures are copied next to the executable, and the tests open them by a
# relative path. Multi-config generators put the executable in a per-config
# subdirectory, which is not where CTest would otherwise run it from.
add_test(
  NAME ekatests
  COMMAND ekatests
  WORKING_DIRECTORY $<TARGET_FILE_DIR:ekatests>
)

# Discovery owns the default libuv loop on a worker thread for this process.
add_test(
  NAME bluetooth_netplay
  COMMAND ekatests "[.btinet]"
  WORKING_DIRECTORY $<TARGET_FILE_DIR:ekatests>
)
set_tests_properties(bluetooth_netplay PROPERTIES TIMEOUT 30 RUN_SERIAL TRUE)

add_test(
  NAME internet_connect
  COMMAND ekatests "[.inetconnect]"
  WORKING_DIRECTORY $<TARGET_FILE_DIR:ekatests>
)
set_tests_properties(internet_connect PROPERTIES TIMEOUT 30 RUN_SERIAL TRUE)

if (WIN32)
    # SDL2 and the other runtime DLLs are copied next to the frontend, which is
    # not where the test executable is built, so the loader has to be told.
    file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/bin" EKATESTS_RUNTIME_DLL_DIR)
    set_tests_properties(ekatests bluetooth_netplay internet_connect PROPERTIES
        ENVIRONMENT_MODIFICATION "PATH=path_list_prepend:${EKATESTS_RUNTIME_DLL_DIR}")
endif()

set(EPOC_LOADER_ASSETS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/epoc/loader/assets/")
add_assets(ekatests ${EPOC_LOADER_ASSETS_PATH} "loaderassets")

set(COMMON_ASSETS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/common/assets/")
add_assets(ekatests ${COMMON_ASSETS_PATH} "commonassets")

set(SERVICES_CENTRALREPO_ASSETS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/epoc/services/centralrepo/assets/")
add_assets(ekatests ${SERVICES_CENTRALREPO_ASSETS_PATH} "centralrepoassets")

set(SERVICES_APPLIST_ASSETS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/epoc/services/applist/assets/")
add_assets(ekatests ${SERVICES_APPLIST_ASSETS_PATH} "applistassets")

set(PACKAGE_ASSETS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/epoc/package/assets/")
add_assets(ekatests ${PACKAGE_ASSETS_PATH} "packageassets")

set(SYSTEM_ASSETS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/epoc/system/assets/")
add_assets(ekatests ${SYSTEM_ASSETS_PATH} "systemassets")

add_assets(ekatests "${CMAKE_CURRENT_SOURCE_DIR}/epoc/services/internet/tlsassets/" "tlsassets")

add_assets(ekatests "${CMAKE_CURRENT_SOURCE_DIR}/epoc/drivers/assets/" "audioassets")

add_assets(ekatests "${CMAKE_CURRENT_SOURCE_DIR}/epoc/drivers/videoassets/" "videoassets")

add_custom_command(TARGET ekatests POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:ekatests>/fontassets"
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
        "${PROJECT_SOURCE_DIR}/src/emu/qt/resources/overlay_font.ttf"
        "$<TARGET_FILE_DIR:ekatests>/fontassets/")
