From 79764732406d6484f67d3dec045483dcb5d08c28 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Fri, 18 Sep 2026 20:03:13 -0400 Subject: feat: better card ascii art --- internal/game/cmd_dig_test.go | 57 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 internal/game/cmd_dig_test.go (limited to 'internal/game/cmd_dig_test.go') diff --git a/internal/game/cmd_dig_test.go b/internal/game/cmd_dig_test.go new file mode 100644 index 0000000..1a96c25 --- /dev/null +++ b/internal/game/cmd_dig_test.go @@ -0,0 +1,57 @@ +package game + +import ( + "os" + "path/filepath" + "testing" +) + +// TestFindNextRoomIDSkipsIDsInOtherDirectories: the in-game allocator must +// check every room ID in the world, not just the current room's directory. +// A directory-scoped scan hands out an ID that already exists elsewhere, and +// World.AddRoomPath then silently shadows that room. +func TestFindNextRoomIDSkipsIDsInOtherDirectories(t *testing.T) { + root := t.TempDir() + intro := filepath.Join(root, "intro") + arena := filepath.Join(root, "arena") + for _, dir := range []string{intro, arena} { + if err := os.MkdirAll(dir, 0o755); err != nil { + t.Fatal(err) + } + } + // intro owns 1001 and 1002; arena owns 1003. + for _, id := range []string{"1001", "1002"} { + if err := os.WriteFile(filepath.Join(intro, id+".yaml"), []byte("name: intro\n"), 0o644); err != nil { + t.Fatal(err) + } + } + if err := os.WriteFile(filepath.Join(arena, "1003.yaml"), []byte("name: arena\n"), 0o644); err != nil { + t.Fatal(err) + } + globallyUsed := map[int]bool{1001: true, 1002: true, 1003: true} + + got, err := findNextRoomID(intro, globallyUsed) + if err != nil { + t.Fatalf("findNextRoomID: %v", err) + } + if got != 1004 { + t.Fatalf("findNextRoomID = %d, want 1004 (1003 is used by arena)", got) + } +} + +// TestFindNextRoomIDEmptyDirectoryStartsAtOne: an empty directory still +// allocates the globally lowest free ID rather than blindly returning 1. +func TestFindNextRoomIDEmptyDirectoryStartsAtOne(t *testing.T) { + root := t.TempDir() + empty := filepath.Join(root, "empty") + if err := os.MkdirAll(empty, 0o755); err != nil { + t.Fatal(err) + } + got, err := findNextRoomID(empty, map[int]bool{1: true, 2: true}) + if err != nil { + t.Fatalf("findNextRoomID: %v", err) + } + if got != 3 { + t.Fatalf("findNextRoomID = %d, want 3", got) + } +} -- cgit v1.2.3