From 436386ea67f001df5a736e07c83009381b6a7bb7 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 15 Sep 2026 10:23:16 +0800 Subject: [PATCH] test(06-11): cover multi-slot equipment merge and createMap content generation - equipment.test.ts: G-06-05-A asserts combined atk/def for weapon+armor and keeps the other slot's modifier after unequip - mapState.test.ts: G-06-06-B writes/reads block, point event, event layer binding and dirty flag on a createMap floor --- .../data-base/src/hero/equipment.test.ts | 23 +++++++++++++++++++ .../data-base/src/map/mapState.test.ts | 20 ++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/packages-user/data-base/src/hero/equipment.test.ts b/packages-user/data-base/src/hero/equipment.test.ts index 61badae..66ec220 100644 --- a/packages-user/data-base/src/hero/equipment.test.ts +++ b/packages-user/data-base/src/hero/equipment.test.ts @@ -248,6 +248,29 @@ describe('HeroEquipment equip and unequip', () => { expect(env.equipment.unequip(0)).toBeUndefined(); }); + // 验证两个不同槽位同时装备后合并最终属性,卸下其中一件后另一槽修饰器保留 + it('merges the final attributes of two equipped slots', () => { + const env = createEnv(); + registerItem(env, createItem(10, 'sword', [0], [['atk', 5]])); + registerItem(env, createItem(11, 'shield', [1], [['def', 3]])); + env.equipment.setSlots(['weapon', 'armor']); + const sword = env.store.add(10); + const shield = env.store.add(11); + + expect(env.equipment.equip(sword, 0)).toBeUndefined(); + expect(env.equipment.equip(shield, 1)).toBeUndefined(); + expect(env.equipment.getEquipped(0)).toBe(sword); + expect(env.equipment.getEquipped(1)).toBe(shield); + expect(env.equipment.equipped(sword)).toBe(true); + expect(env.equipment.equipped(shield)).toBe(true); + expect(env.attribute.getFinalAttribute('atk')).toBe(15); + expect(env.attribute.getFinalAttribute('def')).toBe(8); + + expect(env.equipment.unequip(0)).toBe(sword); + expect(env.attribute.getFinalAttribute('atk')).toBe(10); + expect(env.attribute.getFinalAttribute('def')).toBe(8); + }); + // 验证 getEquips 按槽位顺序输出装备状态或空位 it('lists slots in order with their equipment states', () => { const env = createEnv(); diff --git a/packages-user/data-base/src/map/mapState.test.ts b/packages-user/data-base/src/map/mapState.test.ts index 7a87932..9b99d93 100644 --- a/packages-user/data-base/src/map/mapState.test.ts +++ b/packages-user/data-base/src/map/mapState.test.ts @@ -114,6 +114,26 @@ describe('MapState floor registration', () => { expect(mapState.maps).toEqual(['F1']); }); + // 验证 createMap 创建的地图可直接写入并读取图层、块、点事件与事件层绑定 + it('generates and reads content on a map created by createMap', () => { + const mapState = createFixture(); + const map = mapState.createMap('F1', 2, 2); + const layer = map.addLayer(); + map.setLayerAlias(layer, 'event'); + map.setEventLayer(layer); + layer.setBlock(5, 0, 0); + layer.setZIndex(0); + layer.event(1, 0)!.set(9, 'gen-event'); + + expect(mapState.getMap('F1')).toBe(map); + expect(map.getLayerByAlias('event')).toBe(layer); + expect(map.eventLayer).toBe(layer); + expect(layer.getBlock(0, 0)).toBe(5); + expect(layer.getBlock(1, 0)).toBe(0); + expect(layer.event(1, 0)!.get()).toEqual(new Map([[9, 'gen-event']])); + expect(map.dirty()).toBe(true); + }); + // 验证 setMapList 去重并保持传入顺序 it('stores a de-duplicated ordered floor list', () => { const mapState = createFixture();