fix(core): 移除fflate依赖,修复TextEncoder兼容性问题 (#217)
* fix(core): 移除fflate依赖,修复TextEncoder兼容性问题 * fix(core): 移除fflate依赖,修复TextEncoder兼容性问题
This commit is contained in:
@@ -487,7 +487,7 @@ describe('Incremental Serialization System', () => {
|
||||
expect(prettyJson).toContain(' ');
|
||||
});
|
||||
|
||||
it('二进制格式应该比JSON格式更小', () => {
|
||||
it('二进制格式应该可以正常序列化', () => {
|
||||
const entities = [];
|
||||
for (let i = 0; i < 50; i++) {
|
||||
const entity = scene.createEntity(`Entity_${i}`);
|
||||
@@ -506,13 +506,10 @@ describe('Incremental Serialization System', () => {
|
||||
|
||||
const incremental = scene.serializeIncremental();
|
||||
|
||||
const jsonData = IncrementalSerializer.serializeIncremental(incremental, { format: 'json' });
|
||||
const binaryData = IncrementalSerializer.serializeIncremental(incremental, { format: 'binary' });
|
||||
|
||||
const jsonSize = Buffer.byteLength(jsonData as string);
|
||||
const binarySize = (binaryData as Buffer).length;
|
||||
|
||||
expect(binarySize).toBeLessThan(jsonSize);
|
||||
expect(binaryData).toBeInstanceOf(Uint8Array);
|
||||
expect(binaryData.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it('二进制和JSON格式应该包含相同的数据', () => {
|
||||
|
||||
@@ -559,15 +559,7 @@ describe('ECS Serialization System', () => {
|
||||
|
||||
// 验证是Uint8Array类型
|
||||
expect(binaryData instanceof Uint8Array).toBe(true);
|
||||
|
||||
// JSON序列化对比
|
||||
const jsonData = scene1.serialize({ format: 'json', pretty: false });
|
||||
|
||||
// 二进制应该更小
|
||||
const binarySize = (binaryData as Uint8Array).length;
|
||||
const jsonSize = (jsonData as string).length;
|
||||
console.log(`Binary size: ${binarySize} bytes, JSON size: ${jsonSize} bytes`);
|
||||
expect(binarySize).toBeLessThan(jsonSize);
|
||||
expect((binaryData as Uint8Array).length).toBeGreaterThan(0);
|
||||
|
||||
// 新场景反序列化二进制数据
|
||||
const scene2 = new Scene({ name: 'LoadTest' });
|
||||
|
||||
139
packages/core/tests/Utils/BinarySerializer.test.ts
Normal file
139
packages/core/tests/Utils/BinarySerializer.test.ts
Normal file
@@ -0,0 +1,139 @@
|
||||
import { BinarySerializer } from '../../src/Utils/BinarySerializer';
|
||||
|
||||
describe('BinarySerializer', () => {
|
||||
describe('encode and decode', () => {
|
||||
it('应该正确编码和解码简单对象', () => {
|
||||
const data = { name: 'test', value: 123 };
|
||||
const encoded = BinarySerializer.encode(data);
|
||||
const decoded = BinarySerializer.decode(encoded);
|
||||
|
||||
expect(decoded).toEqual(data);
|
||||
});
|
||||
|
||||
it('应该正确编码和解码包含中文的对象', () => {
|
||||
const data = {
|
||||
name: '测试',
|
||||
description: '这是一个包含中文的测试对象',
|
||||
value: 456
|
||||
};
|
||||
const encoded = BinarySerializer.encode(data);
|
||||
const decoded = BinarySerializer.decode(encoded);
|
||||
|
||||
expect(decoded).toEqual(data);
|
||||
});
|
||||
|
||||
it('应该正确编码和解码数组', () => {
|
||||
const data = {
|
||||
items: [1, 2, 3, 4, 5],
|
||||
names: ['Alice', 'Bob', 'Charlie']
|
||||
};
|
||||
const encoded = BinarySerializer.encode(data);
|
||||
const decoded = BinarySerializer.decode(encoded);
|
||||
|
||||
expect(decoded).toEqual(data);
|
||||
});
|
||||
|
||||
it('应该正确编码和解码嵌套对象', () => {
|
||||
const data = {
|
||||
user: {
|
||||
name: 'John',
|
||||
age: 30,
|
||||
address: {
|
||||
city: 'Beijing',
|
||||
street: 'Main St'
|
||||
}
|
||||
},
|
||||
scores: [90, 85, 95]
|
||||
};
|
||||
const encoded = BinarySerializer.encode(data);
|
||||
const decoded = BinarySerializer.decode(encoded);
|
||||
|
||||
expect(decoded).toEqual(data);
|
||||
});
|
||||
|
||||
it('应该正确编码和解码包含特殊字符的字符串', () => {
|
||||
const data = {
|
||||
text: 'Hello\nWorld\t!@#$%^&*()',
|
||||
emoji: '😀🎉🚀',
|
||||
special: 'a\u0000b'
|
||||
};
|
||||
const encoded = BinarySerializer.encode(data);
|
||||
const decoded = BinarySerializer.decode(encoded);
|
||||
|
||||
expect(decoded).toEqual(data);
|
||||
});
|
||||
|
||||
it('应该正确编码和解码空对象', () => {
|
||||
const data = {};
|
||||
const encoded = BinarySerializer.encode(data);
|
||||
const decoded = BinarySerializer.decode(encoded);
|
||||
|
||||
expect(decoded).toEqual(data);
|
||||
});
|
||||
|
||||
it('应该正确编码和解码空数组', () => {
|
||||
const data: any[] = [];
|
||||
const encoded = BinarySerializer.encode(data);
|
||||
const decoded = BinarySerializer.decode(encoded);
|
||||
|
||||
expect(decoded).toEqual(data);
|
||||
});
|
||||
|
||||
it('应该正确编码和解码包含null和undefined的对象', () => {
|
||||
const data = {
|
||||
nullValue: null,
|
||||
undefinedValue: undefined,
|
||||
normalValue: 'test'
|
||||
};
|
||||
const encoded = BinarySerializer.encode(data);
|
||||
const decoded = BinarySerializer.decode(encoded);
|
||||
|
||||
expect(decoded.nullValue).toBeNull();
|
||||
expect(decoded.undefinedValue).toBeUndefined();
|
||||
expect(decoded.normalValue).toBe('test');
|
||||
});
|
||||
|
||||
it('应该正确编码和解码布尔值', () => {
|
||||
const data = {
|
||||
isTrue: true,
|
||||
isFalse: false
|
||||
};
|
||||
const encoded = BinarySerializer.encode(data);
|
||||
const decoded = BinarySerializer.decode(encoded);
|
||||
|
||||
expect(decoded).toEqual(data);
|
||||
});
|
||||
|
||||
it('应该正确编码和解码数字类型', () => {
|
||||
const data = {
|
||||
integer: 42,
|
||||
float: 3.14159,
|
||||
negative: -100,
|
||||
zero: 0,
|
||||
large: 1234567890
|
||||
};
|
||||
const encoded = BinarySerializer.encode(data);
|
||||
const decoded = BinarySerializer.decode(encoded);
|
||||
|
||||
expect(decoded).toEqual(data);
|
||||
});
|
||||
|
||||
it('应该返回Uint8Array类型', () => {
|
||||
const data = { test: 'value' };
|
||||
const encoded = BinarySerializer.encode(data);
|
||||
|
||||
expect(encoded).toBeInstanceOf(Uint8Array);
|
||||
});
|
||||
|
||||
it('应该正确处理包含emoji的复杂字符串', () => {
|
||||
const data = {
|
||||
text: '🌟 测试 Test 👍',
|
||||
emoji: '🎮🎯🎲'
|
||||
};
|
||||
const encoded = BinarySerializer.encode(data);
|
||||
const decoded = BinarySerializer.decode(encoded);
|
||||
|
||||
expect(decoded).toEqual(data);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user