Mercurial
view infinite_canvas/scene_store_test.c @ 281:c57149ad216e default tip
Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Tue, 18 Aug 2026 22:18:15 -0700 |
| parents | |
| children |
line wrap: on
line source
#include "infinite_canvas/scene_store.h" #include <assert.h> #include <stdio.h> #include <string.h> #if defined(_WIN32) #include <windows.h> #else #include <unistd.h> #endif int main(void) { char path[256]; #if defined(_WIN32) snprintf( path, sizeof(path), "C:/temp/infinite-canvas-scene-%lu.zmap", (unsigned long)GetCurrentProcessId()); #else snprintf( path, sizeof(path), "/tmp/infinite-canvas-scene-%ld.zmap", (long)getpid()); #endif char named_path[CANVAS_SCENE_STORE_PATH_CAPACITY]; #if defined(_WIN32) assert(_putenv_s("XDG_STATE_HOME", "C:/temp/zenbu-scene-store-test") == 0); #else assert(setenv("XDG_STATE_HOME", "/tmp/zenbu-scene-store-test", 1) == 0); #endif assert(Canvas_Scene_Store_Path( "workspace-1", named_path, sizeof(named_path))); assert(strstr(named_path, "workspace-1.zmap")); assert(!Canvas_Scene_Store_Path( "../workspace", named_path, sizeof(named_path))); Dowa_Arena *p_source_arena = Dowa_Arena_Create(4 * ONE_MEGA_BYTE); Dowa_Arena *p_loaded_arena = Dowa_Arena_Create(4 * ONE_MEGA_BYTE); assert(p_source_arena && p_loaded_arena); Canvas_Scene source; Canvas_Scene loaded; Canvas_Camera source_camera; Canvas_Camera loaded_camera; Canvas_Scene_Init(&source, p_source_arena); Canvas_Scene_Init(&loaded, p_loaded_arena); Canvas_Camera_Init(&source_camera, 1200, 800); Canvas_Camera_Init(&loaded_camera, 1200, 800); assert(Canvas_Scene_Add( &source, CANVAS_ENTITY_TEXT_AREA, (Vector2){42.0f, -17.0f})); assert(Canvas_Scene_Add( &source, CANVAS_ENTITY_CONVERSATION, (Vector2){800.0f, 120.0f})); Canvas_Entity *p_text = &source.p_entities[0]; snprintf(p_text->label, sizeof(p_text->label), "Dictation"); snprintf(p_text->text, sizeof(p_text->text), "persist me"); p_text->pinned = TRUE; p_text->pinned_screen_position = (Vector2){30.0f, 40.0f}; p_text->pinned_screen_size = (Vector2){280.0f, 148.0f}; Canvas_Entity *p_conversation = &source.p_entities[1]; p_conversation->active = TRUE; p_conversation->parked = TRUE; p_conversation->parked_restore_position = (Vector2){90.0f, 110.0f}; source.show_grid = TRUE; source_camera.target = (Vector2){400.0f, -200.0f}; source_camera.zoom = 1.75f; assert(Canvas_Scene_Store_Save(path, &source, &source_camera)); assert(Canvas_Scene_Store_Load(path, &loaded, &loaded_camera)); assert(Dowa_Array_Length(loaded.p_entities) == 2); assert(strcmp(loaded.p_entities[0].label, "Dictation") == 0); assert(strcmp(loaded.p_entities[0].text, "persist me") == 0); assert(loaded.p_entities[0].pinned); assert(loaded.p_entities[1].active); assert(loaded.p_entities[1].parked); assert(loaded.show_grid); assert(loaded_camera.target.x == 400.0f); assert(loaded_camera.target.y == -200.0f); assert(loaded_camera.zoom == 1.75f); FILE *p_file = fopen(path, "r+b"); assert(p_file); assert(fseek(p_file, 50, SEEK_SET) == 0); int byte = fgetc(p_file); assert(byte != EOF); assert(fseek(p_file, 50, SEEK_SET) == 0); assert(fputc(byte ^ 0xff, p_file) != EOF); fclose(p_file); assert(!Canvas_Scene_Store_Load(path, &loaded, &loaded_camera)); assert(Dowa_Array_Length(loaded.p_entities) == 2); remove(path); Dowa_Arena_Free(p_loaded_arena); Dowa_Arena_Free(p_source_arena); return 0; }