From f804dcb9740540b3735628ebf8c006235cc56fca Mon Sep 17 00:00:00 2001 From: skal Date: Wed, 28 Jan 2026 09:15:56 +0100 Subject: test(assets): Add functional tests for asset management system This commit makes the asset packer fully functional and adds an end-to-end test suite. - Updated asset_packer.cc to read file contents and embed them as hex arrays. - Added actual asset files (null.bin, test_asset.txt) for testing. - Implemented src/tests/test_assets.cc to verify data integrity at runtime. - Refactored CMakeLists.txt to handle generated file dependencies correctly. --- CMakeLists.txt | 160 +++++++++++++++++++++++++-------------------------------- 1 file changed, 71 insertions(+), 89 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d06033..d460131 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,6 +57,33 @@ else() list(APPEND DEMO_LIBS pthread m dl) endif() +option(DEMO_BUILD_TOOLS "Build tools" OFF) + +# Asset Packing Tool (needed during build if any assets exist) +if(DEMO_BUILD_TOOLS OR NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/src/assets_data.cc) + add_executable(asset_packer + tools/asset_packer.cc + ) +endif() + +# Configure asset generation +set(ASSETS_TXT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/assets/final/assets.txt) +set(GENERATED_ASSETS_H ${CMAKE_CURRENT_BINARY_DIR}/src/assets.h) +set(GENERATED_ASSETS_DATA_CC ${CMAKE_CURRENT_BINARY_DIR}/src/assets_data.cc) + +add_custom_command( + OUTPUT ${GENERATED_ASSETS_H} ${GENERATED_ASSETS_DATA_CC} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src + COMMAND asset_packer ${ASSETS_TXT_PATH} ${GENERATED_ASSETS_H} ${GENERATED_ASSETS_DATA_CC} + DEPENDS asset_packer ${ASSETS_TXT_PATH} + COMMENT "Generating assets.h and assets_data.cc" +) + +add_custom_target(generate_assets ALL + DEPENDS ${GENERATED_ASSETS_H} ${GENERATED_ASSETS_DATA_CC} +) + +# Main Demo Target add_executable(demo64k src/main.cc src/platform.cc @@ -67,9 +94,12 @@ add_executable(demo64k src/audio/window.cc src/audio/synth.cc third_party/glfw3webgpu/glfw3webgpu.c + ${GENERATED_ASSETS_DATA_CC} ) +add_dependencies(demo64k generate_assets) target_link_libraries(demo64k PRIVATE ${DEMO_LIBS}) +target_include_directories(demo64k PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) if (DEMO_SIZE_OPT) if (MSVC) @@ -84,6 +114,7 @@ if (DEMO_SIZE_OPT) endif() endif() +# Tests option(DEMO_BUILD_TESTS "Build tests" OFF) enable_testing() @@ -104,104 +135,55 @@ if(DEMO_BUILD_TESTS) target_include_directories(test_synth PRIVATE src) add_test(NAME SynthEngineTest COMMAND test_synth) - add_executable(test_spectool - - src/tests/test_spectool.cc - - src/audio/audio.cc - - src/audio/window.cc - - src/audio/fdct.cc - - src/audio/synth.cc - - src/audio/idct.cc - - third_party/glfw3webgpu/glfw3webgpu.c - - ) - - target_include_directories(test_spectool PRIVATE - - src - - third_party - - ${WGPU_INCLUDE_DIR} - - third_party/glfw3webgpu - - ) + add_executable(test_spectool + src/tests/test_spectool.cc + src/audio/audio.cc + src/audio/window.cc + src/audio/fdct.cc + src/audio/synth.cc + src/audio/idct.cc + third_party/glfw3webgpu/glfw3webgpu.c + ) + target_include_directories(test_spectool PRIVATE + src + third_party + ${WGPU_INCLUDE_DIR} + third_party/glfw3webgpu + ) target_link_libraries(test_spectool PRIVATE ${DEMO_LIBS}) add_test(NAME SpectoolEndToEndTest COMMAND test_spectool) -endif() -option(DEMO_BUILD_TOOLS "Build tools" OFF) + add_executable(test_assets + src/tests/test_assets.cc + ${GENERATED_ASSETS_DATA_CC} + ) + target_include_directories(test_assets PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src src) + add_dependencies(test_assets generate_assets) + add_test(NAME AssetManagerTest COMMAND test_assets) +endif() +# Tools if(DEMO_BUILD_TOOLS) - add_executable(spectool - tools/spectool.cc - src/platform.cc - src/audio/audio.cc - src/audio/fdct.cc - src/audio/idct.cc - src/audio/window.cc - src/audio/synth.cc - third_party/glfw3webgpu/glfw3webgpu.c - ) - target_include_directories(spectool PRIVATE - src - third_party - ${WGPU_INCLUDE_DIR} - third_party/glfw3webgpu - ) + add_executable(spectool + tools/spectool.cc + src/platform.cc + src/audio/audio.cc + src/audio/fdct.cc + src/audio/idct.cc + src/audio/window.cc + src/audio/synth.cc + third_party/glfw3webgpu/glfw3webgpu.c + ) + target_include_directories(spectool PRIVATE + src + third_party + ${WGPU_INCLUDE_DIR} + third_party/glfw3webgpu + ) target_link_libraries(spectool PRIVATE ${DEMO_LIBS}) add_executable(specview tools/specview.cc ) target_include_directories(specview PRIVATE src) - - add_executable(asset_packer - tools/asset_packer.cc - ) endif() - -# Configure asset generation -set(ASSETS_TXT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/assets/final/assets.txt) -set(GENERATED_ASSETS_H ${CMAKE_CURRENT_BINARY_DIR}/src/assets.h) -set(GENERATED_ASSETS_DATA_CC ${CMAKE_CURRENT_BINARY_DIR}/src/assets_data.cc) - -add_custom_command( - OUTPUT ${GENERATED_ASSETS_H} ${GENERATED_ASSETS_DATA_CC} - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src - COMMAND asset_packer ${ASSETS_TXT_PATH} ${GENERATED_ASSETS_H} ${GENERATED_ASSETS_DATA_CC} - DEPENDS tools/asset_packer.cc ${ASSETS_TXT_PATH} - COMMENT "Generating assets.h and assets_data.cc" -) - -add_custom_target(generate_assets ALL - DEPENDS ${GENERATED_ASSETS_H} ${GENERATED_ASSETS_DATA_CC} -) - -add_executable(demo64k - src/main.cc - src/platform.cc - src/gpu/gpu.cc - src/audio/audio.cc - src/audio/fdct.cc - src/audio/idct.cc - src/audio/window.cc - src/audio/synth.cc - third_party/glfw3webgpu/glfw3webgpu.c - ${GENERATED_ASSETS_DATA_CC} -) - -# Ensure demo64k depends on the generated assets -add_dependencies(demo64k generate_assets) - -target_link_libraries(demo64k PRIVATE ${DEMO_LIBS}) - -# Include generated assets header for compilation -target_include_directories(demo64k PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src) \ No newline at end of file -- cgit v1.2.3