feat(config-editor): add RecordValue serializer with tests
This commit is contained in:
1
extensions/pixelhero-config-editor/__tests__/.gitignore
vendored
Normal file
1
extensions/pixelhero-config-editor/__tests__/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.tmp/
|
||||
@@ -0,0 +1,44 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { serializeValue, serializeEntry } from '../src/io/serializer';
|
||||
import { RecordValue } from '../src/io/recordValue';
|
||||
|
||||
test('serializeValue: num/str/bool', () => {
|
||||
assert.equal(serializeValue({ kind: 'num', value: 400 }), '400');
|
||||
assert.equal(serializeValue({ kind: 'str', value: '小铁卫' }), '"小铁卫"');
|
||||
assert.equal(serializeValue({ kind: 'bool', value: true }), 'true');
|
||||
});
|
||||
test('serializeValue: enumRef', () => {
|
||||
const v: RecordValue = { kind: 'enumRef', qualifier: 'FacSet', member: 'HERO' };
|
||||
assert.equal(serializeValue(v), 'FacSet.HERO');
|
||||
});
|
||||
test('serializeValue: speed', () => {
|
||||
const v: RecordValue = { kind: 'speed', level: 'Slow3' };
|
||||
assert.equal(serializeValue(v), 'AtkSpeedSet[AtkSpeedLv.Slow3].cd');
|
||||
});
|
||||
test('serializeValue: arr', () => {
|
||||
const v: RecordValue = { kind: 'arr', items: [{ kind: 'num', value: 1 }, { kind: 'num', value: 2 }] };
|
||||
assert.equal(serializeValue(v), '[1,2]');
|
||||
});
|
||||
test('serializeValue: obj', () => {
|
||||
const v: RecordValue = { kind: 'obj', props: { a: { kind: 'num', value: 1 }, b: { kind: 'str', value: 'x' } } };
|
||||
assert.equal(serializeValue(v), '{a:1,b:"x"}');
|
||||
});
|
||||
test('serializeValue: raw passthrough', () => {
|
||||
const v: RecordValue = { kind: 'raw', text: 'a + b' };
|
||||
assert.equal(serializeValue(v), 'a + b');
|
||||
});
|
||||
test('serializeEntry: all-scalar one line with trailing comma', () => {
|
||||
const v: RecordValue = { kind: 'obj', props: { uuid: { kind: 'num', value: 1 }, name: { kind: 'str', value: 'x' } } };
|
||||
assert.equal(serializeEntry('1', v), '1:{uuid:1,name:"x"},');
|
||||
});
|
||||
test('serializeEntry: nested on continuation lines', () => {
|
||||
const v: RecordValue = { kind: 'obj', props: {
|
||||
uuid: { kind: 'num', value: 5011 },
|
||||
skills: { kind: 'obj', props: { 6001: { kind: 'obj', props: { uuid: { kind: 'num', value: 6001 } } } } },
|
||||
} };
|
||||
const out = serializeEntry('5011', v);
|
||||
assert.match(out, /^5011:\{uuid:5011,$/m); // 首行:键 + 标量
|
||||
assert.match(out, / skills:\{6001:\{uuid:6001\}\},$/m); // 续行 8 空格
|
||||
assert.match(out, /^ \},$/m); // 闭合 4 空格
|
||||
});
|
||||
Reference in New Issue
Block a user