/** * v1.7.7 — SIMPLE FAILED + BATCH 三态终态后缀回归测试 * * 触发:v1.7.6 wire 联调 * - req_1778824929909_jlvome (BARGRAPH_MISALIGNMENT_READ_FAILED) * - req_1778824891155_4rlb7b (BATCH_*_PARTIAL_SUCCESS) * - req_1778824875675_m9rqps (BATCH_*_ALL_FAILED) * * 修复:SUFFIX_RULES 新增 5 条对称侧规则 * - _READ_FAILED / _WRITE_FAILED → 终态 FAILED(优先级 > _FAILED) * - _ALL_SUCCESS / _PARTIAL_SUCCESS → 终态 COMPLETED(优先级 > _SUCCESS) * - _ALL_FAILED → 终态 FAILED(优先级 > _FAILED) */ import { resolveCodeMeta, isKnownCode, MessageStatus } from '../code-meta'; describe('v1.7.7 — SIMPLE FAILED 终态后缀', () => { test('BARGRAPH_MISALIGNMENT_READ_FAILED 命中 _READ_FAILED 终态(修复真实联调失败)', () => { const meta = resolveCodeMeta('BARGRAPH_MISALIGNMENT_READ_FAILED'); expect(meta.isTerminal).toBe(true); expect(meta.status).toBe(MessageStatus.FAILED); expect(meta.semantic).toBe('failure'); expect(meta.level).toBe('ERROR'); expect(meta.requiresErrorBlock).toBe(true); }); test('SYNC_FUNCTIONS_SWITCH_READ_FAILED 终态', () => { const meta = resolveCodeMeta('SYNC_FUNCTIONS_SWITCH_READ_FAILED'); expect(meta.isTerminal).toBe(true); expect(meta.status).toBe(MessageStatus.FAILED); expect(meta.semantic).toBe('failure'); }); test('SYNC_PROGRAM_CONTROL_WRITE_FAILED 终态', () => { const meta = resolveCodeMeta('SYNC_PROGRAM_CONTROL_WRITE_FAILED'); expect(meta.isTerminal).toBe(true); expect(meta.status).toBe(MessageStatus.FAILED); }); test('DEVICE_DATETIME_INFORMATION_WRITE_FAILED 终态', () => { const meta = resolveCodeMeta('DEVICE_DATETIME_INFORMATION_WRITE_FAILED'); expect(meta.isTerminal).toBe(true); expect(meta.status).toBe(MessageStatus.FAILED); }); test('RATER_LASER_SPACING_SETTING_READ_FAILED 终态', () => { const meta = resolveCodeMeta('RATER_LASER_SPACING_SETTING_READ_FAILED'); expect(meta.isTerminal).toBe(true); expect(meta.status).toBe(MessageStatus.FAILED); }); }); describe('v1.7.7 — BATCH 三态终态后缀', () => { test('BATCH_BARGRAPH_LED_SWITCH_WRITE_ALL_FAILED 命中 _ALL_FAILED 终态', () => { const meta = resolveCodeMeta('BATCH_BARGRAPH_LED_SWITCH_WRITE_ALL_FAILED'); expect(meta.isTerminal).toBe(true); expect(meta.status).toBe(MessageStatus.FAILED); expect(meta.semantic).toBe('failure'); expect(meta.requiresErrorBlock).toBe(true); }); test('BATCH_BARGRAPH_MISALIGNMENT_READ_PARTIAL_SUCCESS 部分成功终态', () => { const meta = resolveCodeMeta('BATCH_BARGRAPH_MISALIGNMENT_READ_PARTIAL_SUCCESS'); expect(meta.isTerminal).toBe(true); expect(meta.status).toBe(MessageStatus.COMPLETED); expect(meta.semantic).toBe('partial'); expect(meta.level).toBe('WARNING'); expect(meta.requiresErrorBlock).toBe(false); }); test('BATCH_BARGRAPH_TRAIN_LENGTH_WRITE_ALL_SUCCESS 终态', () => { const meta = resolveCodeMeta('BATCH_BARGRAPH_TRAIN_LENGTH_WRITE_ALL_SUCCESS'); expect(meta.isTerminal).toBe(true); expect(meta.status).toBe(MessageStatus.COMPLETED); expect(meta.semantic).toBe('success'); expect(meta.level).toBe('INFO'); }); test('BATCH_BARGRAPH_SYNC_FRAME_PLAYED_COUNTER_READ_ALL_SUCCESS 终态', () => { const meta = resolveCodeMeta('BATCH_BARGRAPH_SYNC_FRAME_PLAYED_COUNTER_READ_ALL_SUCCESS'); expect(meta.isTerminal).toBe(true); expect(meta.status).toBe(MessageStatus.COMPLETED); }); }); describe('v1.7.7 — 优先级回归', () => { test('_READ_FAILED > _FAILED(长后缀优先)', () => { // 长 suffix 应优先命中 const failed = resolveCodeMeta('SYNC_FUNCTIONS_SWITCH_READ_FAILED'); expect(failed.semantic).toBe('failure'); // 终态 failure expect(failed.isTerminal).toBe(true); // 阶段失败(不含 READ/WRITE/ALL 后缀)仍走 _FAILED const phase = resolveCodeMeta('PROGRAM_DOWNLOAD_HEADER_FAILED'); expect(phase.semantic).toBe('phase_failed'); // 阶段失败 expect(phase.isTerminal).toBe(false); }); test('_WRITE_FAILED > _FAILED', () => { const writeFailed = resolveCodeMeta('SYNC_PROGRAM_CONTROL_WRITE_FAILED'); expect(writeFailed.semantic).toBe('failure'); expect(writeFailed.isTerminal).toBe(true); }); test('_ALL_FAILED > _FAILED', () => { const allFailed = resolveCodeMeta('BATCH_X_ALL_FAILED'); expect(allFailed.semantic).toBe('failure'); expect(allFailed.isTerminal).toBe(true); }); test('_PARTIAL_SUCCESS > _SUCCESS', () => { const partial = resolveCodeMeta('BATCH_X_PARTIAL_SUCCESS'); expect(partial.semantic).toBe('partial'); expect(partial.isTerminal).toBe(true); // 阶段成功(不含 PARTIAL/ALL/READ/WRITE 后缀)仍走 _SUCCESS const step = resolveCodeMeta('PROGRAM_DOWNLOAD_HEADER_SUCCESS'); expect(step.semantic).toBe('step_success'); expect(step.isTerminal).toBe(false); }); test('_ALL_SUCCESS > _SUCCESS', () => { const all = resolveCodeMeta('BATCH_X_ALL_SUCCESS'); expect(all.semantic).toBe('success'); expect(all.isTerminal).toBe(true); }); test('EXPLICIT_META 仍优先于所有 SUFFIX_RULES', () => { // SYNC_MONITORING_TABLE_READ_FAILED 已显式 EXPLICIT_META,走 explicit 路径 const explicit = resolveCodeMeta('SYNC_MONITORING_TABLE_READ_FAILED'); expect(explicit.isTerminal).toBe(true); expect(explicit.status).toBe(MessageStatus.FAILED); // SYNC_MONITORING_TABLE_READ_PARTIAL_SUCCESS 已显式 const explicitPartial = resolveCodeMeta('SYNC_MONITORING_TABLE_READ_PARTIAL_SUCCESS'); expect(explicitPartial.isTerminal).toBe(true); expect(explicitPartial.semantic).toBe('partial'); // PROGRAM_ALL_FAILED 已显式 const explicitAll = resolveCodeMeta('PROGRAM_ALL_FAILED'); expect(explicitAll.isTerminal).toBe(true); expect(explicitAll.status).toBe(MessageStatus.FAILED); }); }); describe('v1.7.7 — isKnownCode 计入新后缀', () => { test('BARGRAPH_MISALIGNMENT_READ_FAILED is known', () => { expect(isKnownCode('BARGRAPH_MISALIGNMENT_READ_FAILED')).toBe(true); }); test('BATCH_X_ALL_FAILED is known', () => { expect(isKnownCode('BATCH_X_ALL_FAILED')).toBe(true); }); test('BATCH_X_PARTIAL_SUCCESS is known', () => { expect(isKnownCode('BATCH_X_PARTIAL_SUCCESS')).toBe(true); }); test('BATCH_X_ALL_SUCCESS is known', () => { expect(isKnownCode('BATCH_X_ALL_SUCCESS')).toBe(true); }); });