diff options
Diffstat (limited to 'internal/world/mob_rekey_test.go')
| -rw-r--r-- | internal/world/mob_rekey_test.go | 23 |
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 |
