# Copyright (c) 2026 Dominic Masters
#
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT

include(dusktest)

dusktest(test_duskscript.c)

# Scripts are loaded through the asset system (see scriptLoadHandler in
# src/dusk/script/script.c), not the real filesystem, so the fixtures are
# packed into a small test.dsk with the same tools.asset.pack used for the
# game's own dusk.dsk - this exercises the real compiler -> pack -> asset ->
# runtime -> consolePrint pipeline rather than a shortcut around it.
set(DUSKSCRIPT_TEST_ASSETS_DIR ${CMAKE_CURRENT_LIST_DIR}/assets)
file(GLOB DUSKSCRIPT_TEST_FIXTURES CONFIGURE_DEPENDS ${DUSKSCRIPT_TEST_ASSETS_DIR}/*.ds)
set(DUSKSCRIPT_TEST_DSK ${CMAKE_CURRENT_BINARY_DIR}/test.dsk)

add_custom_command(
  OUTPUT ${DUSKSCRIPT_TEST_DSK}
  COMMAND ${Python3_EXECUTABLE} -m tools.asset.pack
    --input ${DUSKSCRIPT_TEST_ASSETS_DIR}
    --output ${DUSKSCRIPT_TEST_DSK}
    --duskscriptcc "$<TARGET_FILE:duskscriptcc>"
  WORKING_DIRECTORY ${DUSK_ROOT_DIR}
  DEPENDS
    duskscriptcc
    ${DUSKSCRIPT_TEST_FIXTURES}
  COMMENT "Packing duskscript test fixtures"
)
add_custom_target(duskscript_test_fixture DEPENDS ${DUSKSCRIPT_TEST_DSK})
add_dependencies(test_duskscript duskscript_test_fixture)

target_compile_definitions(test_duskscript PRIVATE
  DUSKSCRIPT_TEST_DSK="${DUSKSCRIPT_TEST_DSK}"
  DUSKSCRIPT_TEST_FIXTURE="fixture.dsb"
  DUSKSCRIPT_TEST_NUMBERS="fixture_numbers.dsb"
)
