aboutsummaryrefslogtreecommitdiff
path: root/internal/world/mob_rekey_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/world/mob_rekey_test.go')
-rw-r--r--internal/world/mob_rekey_test.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/internal/world/mob_rekey_test.go b/internal/world/mob_rekey_test.go
index 3a0eb85..8118059 100644
--- a/internal/world/mob_rekey_test.go
+++ b/internal/world/mob_rekey_test.go
@@ -2,6 +2,29 @@ package world
import "testing"
+// TestRekeyRoomsRewritesSeededInstanceID: a seeded instance's map key embeds
+// its home room ("<def>_<room>_<i>"). Renaming the room must rewrite the key,
+// or SeedMobs creates a duplicate instance for the renamed room and a later
+// recycled ID skips seeding entirely.
+func TestRekeyRoomsRewritesSeededInstanceID(t *testing.T) {
+ s := &MobStore{instances: map[string]*MobInstance{
+ "rat_2_0": {InstanceID: "rat_2_0", DefID: "rat", RoomID: 2, HomeRoomID: 2},
+ "bat_5_1": {InstanceID: "bat_5_1", DefID: "bat", RoomID: 5, HomeRoomID: 5},
+ }}
+ s.RekeyRooms(map[int]int{2: 4})
+
+ if _, stale := s.instances["rat_2_0"]; stale {
+ t.Fatal("stale seeded key survived the rekey")
+ }
+ inst, ok := s.instances["rat_4_0"]
+ if !ok || inst.RoomID != 4 || inst.HomeRoomID != 4 {
+ t.Fatalf("rekeyed instance = %+v (present=%v), want rat_4_0 in room 4", inst, ok)
+ }
+ if _, ok := s.instances["bat_5_1"]; !ok {
+ t.Fatal("an unrelated instance was dropped")
+ }
+}
+
// TestRekeyRoomsUpdatesMobDespawnRooms: DespawnRooms is a live room reference
// (sys_triggers compares it against the owner's current room). A room rename
// must remap it alongside RoomID/HomeRoomID/WanderRooms, or a transient mob