mirror of
https://github.com/motajs/template.git
synced 2026-11-01 06:04:30 +08:00
test(08-10): cover data-common/data-base gap codes and align baseline failures
- sandbox: drop obsolete playing=true bypass, align expired-step case, assert codes 73/194 - tileStore: assert codes 133/134 and add ItemStore/EnemyStore code 181 cases - map/mover: assert code 192 when Dir8 handler missing - hero/items: assert code 193 on missing item id registration - mapLifecycle: drive resize via GameMap.resizeLayer so shared indexer width syncs
This commit is contained in:
1 parent
339f72d541
commit
b932f8cecd
5 files changed
+127
-28
No files matched your search
@@ -6,9 +6,11 @@ import {
|
||||
type IItemRawData,
|
||||
ItemCategory,
|
||||
ItemStore,
|
||||
SaveCompression,
|
||||
TileStore,
|
||||
TileType
|
||||
} from '@user/data-common';
|
||||
import { logger } from '@motajs/common';
|
||||
import { HeroItems } from '../items';
|
||||
|
||||
vi.hoisted(() => {
|
||||
@@ -182,6 +184,25 @@ describe('HeroItems counting', () => {
|
||||
expect(env.items.itemCount(99)).toBe(0);
|
||||
expect(env.items.itemCount(77)).toBe(0);
|
||||
});
|
||||
|
||||
// 验证读档时道具无图块 id 注册告警码 193 并跳过该道具
|
||||
it('warns code 193 when a saved item has no tile id registration', () => {
|
||||
const env = createEnv();
|
||||
const warn = vi.spyOn(logger, 'warn');
|
||||
// 仅向道具存储注册定义,不向图块存储注册 id
|
||||
env.itemStore.addItem(
|
||||
createItem(50, 'orphan', ItemCategory.Constant).item
|
||||
);
|
||||
const save = env.items.saveState(SaveCompression.NoCompression);
|
||||
|
||||
env.items.loadState(
|
||||
{ items: [{ num: 50, count: 1 }], equipStore: save.equipStore },
|
||||
SaveCompression.NoCompression
|
||||
);
|
||||
|
||||
expect(warn).toHaveBeenCalledWith(193, '50');
|
||||
expect(env.items.itemCount(50)).toBe(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('HeroItems useItem', () => {
|
||||
|
||||
@@ -290,12 +290,13 @@ describe('MapLayer point event lifecycle', () => {
|
||||
|
||||
// 验证改变图层宽度后,保留的点事件会使用新索引继续查询
|
||||
it('reindexes preserved point events when the layer width changes', () => {
|
||||
const { layer } = createMapState({
|
||||
const { map, layer } = createMapState({
|
||||
1: { 1: 'top-right' },
|
||||
3: { 1: 'bottom-right' }
|
||||
});
|
||||
|
||||
layer.resize(3, 2);
|
||||
// 经 GameMap.resizeLayer 变更尺寸,使共享索引器宽度与图层同步后重建点事件索引
|
||||
map.resizeLayer(3, 2, true);
|
||||
|
||||
expect(layer.getPointEvent(1, 0)).toEqual(new Map([[1, 'top-right']]));
|
||||
expect(layer.getPointEvent(1, 1)).toEqual(
|
||||
|
||||
@@ -72,13 +72,15 @@ interface MoverFixture {
|
||||
tile: DynamicTile;
|
||||
}
|
||||
|
||||
/** 构造一个绑定动态图块的移动器宿主 */
|
||||
function createMoverFixture(): MoverFixture {
|
||||
/** 构造一个绑定动态图块的移动器宿主,可选择性跳过 Dir8 处理器注册 */
|
||||
function createMoverFixture(registerDir8: boolean = true): MoverFixture {
|
||||
const tileStore = new TileStore();
|
||||
tileStore.addTile(createTileData(1, 'base'));
|
||||
tileStore.addTile(createTileData(2, 'alternate'));
|
||||
const faceManager = new FaceManager();
|
||||
faceManager.register(FaceGroup.Dir8, new Dir8FaceHandler());
|
||||
if (registerDir8) {
|
||||
faceManager.register(FaceGroup.Dir8, new Dir8FaceHandler());
|
||||
}
|
||||
const state: IDataCommon = {
|
||||
tileStore,
|
||||
itemStore: {},
|
||||
@@ -159,6 +161,19 @@ describe('DynamicTileMover movement', () => {
|
||||
expect(tile.y).toBe(0);
|
||||
});
|
||||
|
||||
// 验证缺失 Dir8 朝向处理器时移动结束告警码 192 且图块停在原地
|
||||
it('warns code 192 when the Dir8 face handler is missing', async () => {
|
||||
const { tile } = createMoverFixture(false);
|
||||
const warn = vi.spyOn(logger, 'warn');
|
||||
|
||||
tile.mover.step(FaceDirection.Right);
|
||||
await tile.mover.start()!.onEnd;
|
||||
|
||||
expect(warn).toHaveBeenCalledWith(192);
|
||||
expect(tile.x).toBe(0);
|
||||
expect(tile.y).toBe(0);
|
||||
});
|
||||
|
||||
// 验证移动开始、单步与结束钩子按生命周期顺序触发
|
||||
it('fires the movement lifecycle hooks in order', async () => {
|
||||
const { tile } = createMoverFixture();
|
||||
|
||||
Reference in new issue
Block a user