mirror of
https://github.com/motajs/template.git
synced 2026-10-04 10:20:16 +08:00
test(06-11): cover static-dynamic-move-static full chain (G-06-06-A)
- mapLayer.test.ts: both keepEvent branches verified after a real-timer move, with exact event maps, dirty flags, block write-back and dynamic index updates - 06-COVERAGE-MAP.md: append the 06-11 gap-fill section (create-or-append)
This commit is contained in:
parent
41da613f0b
commit
309f1b1850
@ -282,3 +282,20 @@ D-40:真实英雄操作经 `replay.route.add(...)`(mover 方向步)录制
|
||||
| G-06-07-A | `computes one exact damage and turn for the maximum pipeline monster`、`produces a different result once the support pipeline is removed` | `data-state/test/enemyCombination.test.ts` | 06-10 |
|
||||
|
||||
本计划无 `it.skip`/`it.todo`(预期无需新增),`06-TEST-FINDINGS.md` 无 `#06-10-N` 条目。
|
||||
|
||||
## 06-11 勇士与地图缺口补测(D-46)
|
||||
|
||||
本计划为**覆盖缺口补测**(G-06-05-A、G-06-06-A/B/C),**不引入任何新码**,复用既有可达码;
|
||||
阶段结构为 构件(多槽装备合并 + createMap 内容生成)→ 组合(多 zIndex 图层并存)→
|
||||
完整/集成(静态→动态→移动→静态 全链路,keepEvent 两分支)。
|
||||
|
||||
| 缺口 | 用例 | 文件 | 计划 |
|
||||
| --- | --- | --- | --- |
|
||||
| G-06-05-A | `merges the final attributes of two equipped slots` | `data-base/src/hero/equipment.test.ts` | 06-11 |
|
||||
| G-06-06-B | `generates and reads content on a map created by createMap` | `data-base/src/map/mapState.test.ts` | 06-11 |
|
||||
| G-06-06-C | `keeps layers of different z-index coexisting with independent data` | `data-base/src/map/gameMap.test.ts` | 06-11 |
|
||||
| G-06-06-A | `keeps the moved dynamic events across a full static round trip`、`drops the moved dynamic events across a full static round trip` | `data-base/src/map/mapLayer.test.ts` | 06-11 |
|
||||
|
||||
本计划**无新增码**,复用既有可达码(84/121/127/128/129/131 等的既有覆盖保持不变),
|
||||
不削弱也不删除任何既有用例或跳过;无 `it.skip`/`it.todo` 新增,
|
||||
`06-TEST-FINDINGS.md` 无 `#06-11-N` 条目。
|
||||
|
||||
@ -459,6 +459,73 @@ describe('MapLayer dynamic conversion', () => {
|
||||
expect(restored.tileEvent().dirty()).toBe(false);
|
||||
});
|
||||
|
||||
// 验证静态→动态→移动→静态全链路的 keepEvent=true 分支保留移动后的动态专属事件
|
||||
it('keeps the moved dynamic events across a full static round trip', async () => {
|
||||
const { layer } = createFixture([1, 2, 1, 2]);
|
||||
layer.getTile(0, 0);
|
||||
const tile = layer.transferToDynamic(0, 0)!;
|
||||
const controller = tile.step(FaceDirection.Right);
|
||||
|
||||
expect(controller).not.toBeNull();
|
||||
expect(tile.mover.moving).toBe(true);
|
||||
|
||||
await controller!.onEnd;
|
||||
|
||||
expect(tile.x).toBe(1);
|
||||
expect(tile.y).toBe(0);
|
||||
expect([...layer.getDynamicTilesAt(1, 0)]).toContain(tile);
|
||||
expect([...layer.getDynamicTilesAt(0, 0)]).toEqual([]);
|
||||
expect(layer.getBlock(1, 0)).toBe(2);
|
||||
|
||||
tile.tileEvent().set(30, 'moved-event');
|
||||
const result = logger.catch(() => layer.transferToStatic(tile, true)!);
|
||||
const restored = result.ret;
|
||||
|
||||
expect(restored.num()).toBe(1);
|
||||
expect(layer.getBlock(1, 0)).toBe(1);
|
||||
expect(layer.getBlock(0, 0)).toBe(0);
|
||||
expect(restored.tileEvent().get()).toEqual(
|
||||
new Map([
|
||||
[10, 'base-event'],
|
||||
[30, 'moved-event']
|
||||
])
|
||||
);
|
||||
expect(restored.tileEvent().dirty()).toBe(true);
|
||||
expect([...layer.getDynamicTilesAt(1, 0)]).toEqual([]);
|
||||
});
|
||||
|
||||
// 验证移动后转静态的 keepEvent=false 分支丢弃动态专属事件并按写回块 num 重推默认事件
|
||||
it('drops the moved dynamic events across a full static round trip', async () => {
|
||||
const { layer } = createFixture([1, 2, 1, 2]);
|
||||
layer.getTile(0, 0);
|
||||
const tile = layer.transferToDynamic(0, 0)!;
|
||||
const controller = tile.step(FaceDirection.Right);
|
||||
|
||||
expect(controller).not.toBeNull();
|
||||
|
||||
await controller!.onEnd;
|
||||
|
||||
expect(tile.x).toBe(1);
|
||||
expect(tile.y).toBe(0);
|
||||
expect([...layer.getDynamicTilesAt(1, 0)]).toContain(tile);
|
||||
expect([...layer.getDynamicTilesAt(0, 0)]).toEqual([]);
|
||||
expect(layer.getBlock(1, 0)).toBe(2);
|
||||
|
||||
tile.tileEvent().set(30, 'moved-event');
|
||||
const result = logger.catch(() => layer.transferToStatic(tile, false)!);
|
||||
const restored = result.ret;
|
||||
|
||||
expect(restored.num()).toBe(1);
|
||||
expect(layer.getBlock(1, 0)).toBe(1);
|
||||
expect(layer.getBlock(0, 0)).toBe(0);
|
||||
expect(restored.tileEvent().get()).toEqual(
|
||||
new Map([[10, 'base-event']])
|
||||
);
|
||||
expect(restored.tileEvent().get().has(30)).toBe(false);
|
||||
expect(restored.tileEvent().dirty()).toBe(false);
|
||||
expect([...layer.getDynamicTilesAt(1, 0)]).toEqual([]);
|
||||
});
|
||||
|
||||
// 验证 transferToStatic 对越界坐标告警 128 并拒绝转换
|
||||
it('warns code 128 when transferToStatic is out of bounds', () => {
|
||||
const { layer } = createFixture();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user