From 02786047d22ff890026150241f88320eff1fff54 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 15 Sep 2026 20:27:57 +0800 Subject: [PATCH] fix(07-04): #06-09-2 deep copy the equipment save snapshot - saveState returns new Map(this.equips) and [...this.slots] so the snapshot is decoupled from the live state - un-skip the independent-snapshot and container round-trip cases --- packages-user/data-base/src/hero/equipment.ts | 4 ++-- packages-user/data-base/src/hero/saveLoad.test.ts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages-user/data-base/src/hero/equipment.ts b/packages-user/data-base/src/hero/equipment.ts index 07ca6a6..f776b66 100644 --- a/packages-user/data-base/src/hero/equipment.ts +++ b/packages-user/data-base/src/hero/equipment.ts @@ -328,8 +328,8 @@ export class HeroEquipment implements IHeroEquipment { saveState(): IHeroEquipmentSave { return { - equipped: this.equips, - slots: this.slots + equipped: new Map(this.equips), + slots: [...this.slots] }; } diff --git a/packages-user/data-base/src/hero/saveLoad.test.ts b/packages-user/data-base/src/hero/saveLoad.test.ts index fc28215..8122945 100644 --- a/packages-user/data-base/src/hero/saveLoad.test.ts +++ b/packages-user/data-base/src/hero/saveLoad.test.ts @@ -308,8 +308,8 @@ describe('HeroEquipment save and load round trips', () => { expect(env.equipment.slots).toEqual(['weapon']); }); - // 疑似 bug�E�saveState 直接返回冁E�� equipped/slots 引用而非深拷贝,详见E06-TEST-FINDINGS.md #06-09-2 - it.skip('returns an equipment snapshot independent from the live state', () => { + // 验证 saveState 返回与活对象解耦的深拷贝快照(#06-09-2) + it('returns an equipment snapshot independent from the live state', () => { const env = createEquipEnv(); registerItem(env, createEquipItem(10, 'sword', [0], [['atk', 5]])); env.equipment.setSlots(['weapon']); @@ -585,8 +585,8 @@ describe('HeroState container save and load coverage for sub systems', () => { } }); - // 疑似 bug�E�HeroEquipment.saveState 未深拷贁Eequipped/slots�E�经容器三档往返均丢失已裁E��E��封E��详见E06-TEST-FINDINGS.md #06-09-2 - it.skip('restores the equipped mapping through the container across all compressions', () => { + // 验证经容器三档往返均恢复已装备映射与槽位(#06-09-2) + it('restores the equipped mapping through the container across all compressions', () => { for (const compression of SAVE_COMPRESSIONS) { const env = createEquipEnv(); registerItem(env, createEquipItem(10, 'sword', [0], [['atk', 5]]));