1
0
Fork 0
mirror of https://github.com/demostf/demo.js synced 2026-06-04 09:04:13 +02:00

fix encoding string table entries

This commit is contained in:
Robin Appelman 2017-11-25 00:14:41 +01:00
commit 6d0c81ff30
6 changed files with 107 additions and 11 deletions

Binary file not shown.

View file

@ -60,7 +60,8 @@ const examplePacket = {
entries: [{text: 'maps\\pl_badwater_pro_v9.bsp', extraData: undefined}],
maxEntries: 8192,
fixedUserDataSize: 0,
fixedUserDataSizeBits: 0
fixedUserDataSizeBits: 0,
compressed: false
}
};
@ -76,7 +77,8 @@ const examplePacket2 = {
],
maxEntries: 8192,
fixedUserDataSize: 0,
fixedUserDataSizeBits: 0
fixedUserDataSizeBits: 0,
compressed: false
}
};
@ -87,10 +89,10 @@ suite('CreateStringTable', () => {
test('Encode createStringTable', () => {
assertEncoder(ParseCreateStringTable, EncodeCreateStringTable, examplePacket, 388);
assertEncoder(ParseCreateStringTable, EncodeCreateStringTable, examplePacket2, 615);
assertEncoder(ParseCreateStringTable, EncodeCreateStringTable, examplePacket2, 562);
});
test('Re-encode classInfo', () => {
test('Re-encode createStringTable', () => {
assertReEncode(ParseCreateStringTable, EncodeCreateStringTable, getStream(exampleData));
});
});

View file

@ -48,7 +48,14 @@ export function assertReEncode(parser: Parser, encoder: Encoder, stream: BitStre
encoder(result, encodeStream);
assert.equal(encodeStream.index, length, 'Unexpected number of bits used for encoding');
encodeStream.index = 0;
assert.deepEqual(encodeStream.readArrayBuffer(byteLength), stream.readArrayBuffer(byteLength));
const encodeData = encodeStream.readArrayBuffer(byteLength);
const originalData = stream.readArrayBuffer(byteLength);
for (let i = 0; i < byteLength; i++) {
if (originalData[i] !== encodeData[i]) {
assert.fail(`Data differs at byte ${i} out of ${byteLength}: ${originalData[i].toString(2)} !== ${encodeData[i].toString(2)}`);
}
}
assert.deepEqual(encodeData, originalData);
if (length - 8 * byteLength > 0) {
assert.deepEqual(encodeStream.readBits(length - 8 * byteLength), stream.readBits(length - 8 * byteLength));
}

View file

@ -13,7 +13,8 @@ function getExistingParserState() {
entries: [],
maxEntries: 2048,
fixedUserDataSize: 1,
fixedUserDataSizeBits: 1
fixedUserDataSizeBits: 1,
compressed: false,
};
existingTable.entries[70] = {text: 'maps\\pl_badwater_pro_v9.bsp'};
const state = createParserState();

View file

@ -0,0 +1,40 @@
import {BitStream} from 'bit-buffer';
import {assertEncoder, assertParser, assertReEncode} from './Packet/PacketTest';
import {readFileSync} from 'fs';
import {encodeStringTableEntries, parseStringTableEntries} from '../../../Parser/StringTableParser';
import {StringTableEntry} from '../../../Data/StringTable';
const baseTable = {
name: 'modelprecache',
entries: [],
maxEntries: 4096,
fixedUserDataSize: 1,
fixedUserDataSizeBits: 2,
compressed: true
};
const data = readFileSync(__dirname + '/../../data/stringTableEntries.bin');
function ParseUpdate(stream: BitStream) {
//981
return parseStringTableEntries(stream, baseTable, 981);
}
function EncodeUpdate(entries: StringTableEntry[], stream: BitStream) {
return encodeStringTableEntries(stream, baseTable, entries);
}
suite('string table parser', () => {
// test('Parse string table entries', () => {
// assertParser(ParseUpdate, getStream(exampleData), examplePacket, 41);
// });
test('Encode string table entries', () => {
const expected = ParseUpdate(new BitStream(data));
assertEncoder(ParseUpdate, EncodeUpdate, expected);
});
test('Re-encode string table entries', () => {
assertReEncode(ParseUpdate, EncodeUpdate, new BitStream(data));
});
});