diff options
Diffstat (limited to 'internal/world/rekey_objects_test.go')
| -rw-r--r-- | internal/world/rekey_objects_test.go | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/internal/world/rekey_objects_test.go b/internal/world/rekey_objects_test.go index 7ee2de3..908e30b 100644 --- a/internal/world/rekey_objects_test.go +++ b/internal/world/rekey_objects_test.go @@ -35,3 +35,31 @@ func TestRekeyRoomsUpdatesObjStateRoomID(t *testing.T) { t.Fatalf("AllObjInstances(1) = %d entries, want 0 (stale old room)", len(got)) } } + +// Regression: an object away from its home room is keyed by its current room, +// so the old key-driven walk left its HomeRoomID/WanderRooms stale and a later +// entry to the renamed home created a duplicate instance. +func TestRekeyRoomsUpdatesAwayFromHomeObject(t *testing.T) { + w := New(t.TempDir()) + // Declared in home room 1, currently wandering in room 5. + w.objStates[w.ObjStateKey(5, "fishing_spot", 0)] = &ObjState{ + RoomID: 5, + HomeRoomID: 1, + DefID: "fishing_spot", + Index: 0, + WanderRooms: []int{1, 5}, + } + + w.RekeyRooms(map[int]int{1: 20}) + + inst := w.GetObjState(5, "fishing_spot", 0) + if inst == nil { + t.Fatal("away object state lost after rekey") + } + if inst.HomeRoomID != 20 { + t.Fatalf("HomeRoomID = %d, want 20", inst.HomeRoomID) + } + if got := inst.WanderRooms; len(got) != 2 || got[0] != 20 || got[1] != 5 { + t.Fatalf("WanderRooms = %v, want [20 5]", got) + } +} |
