Load duskscript files through the asset system, not the real filesystem

scriptLoadHandler used fopen/fread directly, but every .ds a script include()s
is packed into dusk.dsk (compiled to .dsb) like every other asset now, not a
loose file next to the binary - raw filesystem reads never found them outside
a dev checkout. It now goes through assetFileInit/Open/Read/Close like the
rest of the engine's asset loaders, failing the load the same way (returning
SCRIPT_LOAD_FAILED) for a missing entry or one bigger than capacity.

test_duskscript's fixtures moved to their own assets/ subfolder and pack into
a small test.dsk with the same tools.asset.pack used for the real dusk.dsk,
and the test opens that archive straight into ASSET.zip (skipping the full
assetInit()/assetInitPlatform(), which expects a launched engine) so the
tests exercise the real compile -> pack -> asset -> runtime pipeline instead
of a filesystem shortcut around it.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
YourWishesandClaude Sonnet 5 committed 2026-10-14 22:33:46 -05:00
1 parent 5cf0678429
commit a0294aae98
5 files changed
+70 -28

No files matched your search

+21 -1
View File
@@ -8,6 +8,9 @@
#include "dusktest.h"
#include "script/script.h"
#include "console/console.h"
#include "asset/asset.h"
#include "asset/assetdsk.h"
#include "util/memory.h"
static void test_scriptRunsAndPrintsToConsole(void **state) {
scripterror_t error;
@@ -52,10 +55,27 @@ static void test_scriptNumbersAreAllFloats(void **state) {
consoleDispose();
}
// Fixtures load through the asset system now, so ASSET needs a real zip
// behind it - open the packed test.dsk directly rather than the full
// assetInit()/assetInitPlatform(), which expects a real launched engine.
static int duskscript_test_setup(void **state) {
memoryZero(&ASSET, sizeof(ASSET));
threadMutexInit(&ASSET.zipLock);
assert_int_equal(errorIsOk(assetDskOpenFromPath(DUSKSCRIPT_TEST_DSK, &ASSET.zip)), true);
return 0;
}
static int duskscript_test_teardown(void **state) {
zip_close(ASSET.zip);
threadMutexDispose(&ASSET.zipLock);
memoryZero(&ASSET, sizeof(ASSET));
return 0;
}
int main(void) {
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_scriptRunsAndPrintsToConsole),
cmocka_unit_test(test_scriptNumbersAreAllFloats),
};
return cmocka_run_group_tests(tests, NULL, NULL);
return cmocka_run_group_tests(tests, duskscript_test_setup, duskscript_test_teardown);
}