mirror of
https://github.com/motajs/template.git
synced 2026-09-12 17:58:51 +08:00
docs(test): describe individual test cases
This commit is contained in:
parent
4349e67669
commit
1d9b180d5f
@ -64,6 +64,7 @@ function createMapState() {
|
||||
}
|
||||
|
||||
describe('MapState raw event path', () => {
|
||||
// 验证 raw.events 能绑定到点事件视图,并选择 alias=event 的图层
|
||||
it('raw point events and event layer', () => {
|
||||
const mapState = createMapState();
|
||||
const map = mapState.fromRaw(createRaw());
|
||||
|
||||
@ -8,6 +8,7 @@ vi.hoisted(() => {
|
||||
});
|
||||
|
||||
describe('LayerEventView reference tracking', () => {
|
||||
// 验证新增、删除和清空事件时 dirty 状态能随参考基准正确变化
|
||||
it('keeps dirty state in sync with set, delete, and clear', () => {
|
||||
const view = new LayerEventView();
|
||||
|
||||
@ -29,6 +30,7 @@ describe('LayerEventView reference tracking', () => {
|
||||
expect(view.dirty()).toBe(false);
|
||||
});
|
||||
|
||||
// 验证 ref 返回稳定快照,并可通过恢复事件内容变回 clean 而不重设基准
|
||||
it('exposes a stable reference snapshot and restores it without markPure', () => {
|
||||
const view = new LayerEventView();
|
||||
view.set(10, 'first');
|
||||
|
||||
@ -94,6 +94,7 @@ function createMapState(
|
||||
}
|
||||
|
||||
describe('MapLayer tile defaults snapshots conversion and movement', () => {
|
||||
// 验证静态/动态图块默认事件、存档快照、转换和移动后的点事件归属
|
||||
it('tile defaults snapshots conversion and movement', () => {
|
||||
const { layer } = createMapState();
|
||||
const staticTile = layer.getTile(0, 0)!;
|
||||
@ -176,6 +177,7 @@ describe('MapLayer tile defaults snapshots conversion and movement', () => {
|
||||
});
|
||||
|
||||
describe('MapLayer point event lifecycle', () => {
|
||||
// 验证点事件的 dirty、存档覆盖、基准恢复和不同压缩模式
|
||||
it('point event lifecycle', () => {
|
||||
const { layer } = createMapState({ 1: { 5: 'raw-point' } });
|
||||
const point = layer.event(1, 0)!;
|
||||
@ -240,6 +242,7 @@ describe('MapLayer point event lifecycle', () => {
|
||||
expect(point.dirty()).toBe(false);
|
||||
});
|
||||
|
||||
// 验证只有点事件变化时 GameMap 仍保留对应图层存档
|
||||
it('map saves layers containing only point events', () => {
|
||||
const { map, layer } = createMapState({}, [0, 0, 0, 0]);
|
||||
layer.setZIndex(7);
|
||||
@ -267,6 +270,7 @@ describe('MapLayer point event lifecycle', () => {
|
||||
}
|
||||
});
|
||||
|
||||
// 验证 resize 裁剪范围外事件,resize2 清空全部点事件
|
||||
it('resize preserves in-range point events and resize2 clears them', () => {
|
||||
const { layer } = createMapState({
|
||||
0: { 1: 'top-left' },
|
||||
@ -280,6 +284,7 @@ describe('MapLayer point event lifecycle', () => {
|
||||
expect(layer.getPointEvent(0, 0)).toEqual(new Map());
|
||||
});
|
||||
|
||||
// 验证改变图层宽度后,保留的点事件会使用新索引继续查询
|
||||
it('reindexes preserved point events when the layer width changes', () => {
|
||||
const { layer } = createMapState({
|
||||
1: { 1: 'top-right' },
|
||||
|
||||
@ -47,6 +47,7 @@ function createEvent() {
|
||||
}
|
||||
|
||||
describe('GameEventStore public barrel behavior', () => {
|
||||
// 验证使用注册时的 ID 可以取回同一个事件
|
||||
it('retrieves an event by the id used when adding it', () => {
|
||||
const store = new modules.GameEventStore();
|
||||
const event = createEvent();
|
||||
@ -56,12 +57,14 @@ describe('GameEventStore public barrel behavior', () => {
|
||||
expect(store.getEvent('event-id')).toBe(event);
|
||||
});
|
||||
|
||||
// 验证查询不存在的事件 ID 返回 null
|
||||
it('returns null for an unknown id', () => {
|
||||
const store = new modules.GameEventStore();
|
||||
|
||||
expect(store.getEvent('missing-id')).toBeNull();
|
||||
});
|
||||
|
||||
// 验证重复 ID 会告警并由后写入事件覆盖旧事件
|
||||
it('warns and overwrites when an id is added twice', () => {
|
||||
const store = new modules.GameEventStore();
|
||||
const firstEvent = createEvent();
|
||||
|
||||
@ -124,6 +124,7 @@ function createFloor(offset: number): LegacyFloor {
|
||||
}
|
||||
|
||||
describe('CoreState legacy event-layer initialization', () => {
|
||||
// 验证 legacy 地图初始化选择 event alias 图层且不改变其他装配结果
|
||||
it('selects the event alias layer without changing map assembly', () => {
|
||||
const maps = createFakeMapState();
|
||||
const initializer = Object.create(
|
||||
|
||||
@ -225,6 +225,7 @@ function invocation(id: string, trigger: EventTrigger): IGameEventInvocation {
|
||||
}
|
||||
|
||||
describe('source-aware matching dispatch', () => {
|
||||
// 验证地图绑定的点事件 ID 能经过 event layer 和 mover 执行一次
|
||||
it('executes a map-bound point id through the event layer and mover', async () => {
|
||||
const calls: EventCall[] = [];
|
||||
const fixture = createFixture({ 1: { 50: 'legacy-point-enter' } });
|
||||
@ -257,6 +258,7 @@ describe('source-aware matching dispatch', () => {
|
||||
});
|
||||
});
|
||||
|
||||
// 验证点、静态图块和动态图块按来源携带正确环境并过滤 trigger
|
||||
it('source-aware matching dispatch', async () => {
|
||||
const calls: EventCall[] = [];
|
||||
const fixture = createFixture({
|
||||
@ -317,6 +319,7 @@ describe('source-aware matching dispatch', () => {
|
||||
expect(calls[2].triggerLocator).toEqual({ x: 1, y: 0 });
|
||||
});
|
||||
|
||||
// 验证来源事件按排序顺序逐个 await,不会并行执行
|
||||
it('awaits each source before continuing to the next one', async () => {
|
||||
const calls: EventCall[] = [];
|
||||
let release: () => void = () => {};
|
||||
@ -384,6 +387,7 @@ describe('source-aware matching dispatch', () => {
|
||||
});
|
||||
|
||||
describe('event execute modes and reductions', () => {
|
||||
// 验证 cut 和 reduce 只作用于 trigger 匹配且实际执行的事件
|
||||
it('applies cut and reduce only to matching events', async () => {
|
||||
const calls: string[] = [];
|
||||
const fixture = createFixture();
|
||||
@ -475,6 +479,7 @@ describe('event execute modes and reductions', () => {
|
||||
).resolves.toBe(true);
|
||||
});
|
||||
|
||||
// 验证未知事件 ID 只告警并跳过,后续合法事件仍继续执行
|
||||
it('warns for unknown ids and continues with valid events', async () => {
|
||||
const calls: string[] = [];
|
||||
const fixture = createFixture();
|
||||
@ -500,6 +505,7 @@ describe('event execute modes and reductions', () => {
|
||||
});
|
||||
|
||||
describe('enter leave hit trigger hooks', () => {
|
||||
// 验证 enter、leave、hit 使用正确 trigger 和角色/触发坐标
|
||||
it('maps enter leave and hit to their approved triggers and coordinates', async () => {
|
||||
const calls: EventCall[] = [];
|
||||
const fixture = createFixture(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user