mirror of
https://github.com/demostf/demo.js
synced 2026-06-04 00:54:14 +02:00
encoder for createStringTable
This commit is contained in:
parent
79cd277fed
commit
89b9c3b25c
10 changed files with 276 additions and 77 deletions
94
src/tests/unit/Parser/Packet/CreateStringTableTest.ts
Normal file
94
src/tests/unit/Parser/Packet/CreateStringTableTest.ts
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
import {BitStream} from 'bit-buffer';
|
||||
import {assertEncoder, assertParser, getStream} from './PacketTest';
|
||||
import {EncodeCreateStringTable, ParseCreateStringTable} from '../../../../Parser/Packet/CreateStringTable';
|
||||
|
||||
const exampleData = [
|
||||
100,
|
||||
111,
|
||||
119,
|
||||
110,
|
||||
108,
|
||||
111,
|
||||
97,
|
||||
100,
|
||||
97,
|
||||
98,
|
||||
108,
|
||||
101,
|
||||
115,
|
||||
0,
|
||||
0,
|
||||
32,
|
||||
1,
|
||||
0,
|
||||
121,
|
||||
0,
|
||||
107,
|
||||
11,
|
||||
131,
|
||||
155,
|
||||
227,
|
||||
130,
|
||||
99,
|
||||
251,
|
||||
18,
|
||||
11,
|
||||
35,
|
||||
187,
|
||||
11,
|
||||
163,
|
||||
43,
|
||||
147,
|
||||
251,
|
||||
130,
|
||||
147,
|
||||
123,
|
||||
251,
|
||||
178,
|
||||
203,
|
||||
113,
|
||||
17,
|
||||
155,
|
||||
131,
|
||||
3,
|
||||
192];
|
||||
|
||||
const examplePacket = {
|
||||
packetType: 'createStringTable',
|
||||
table: {
|
||||
name: 'downloadables',
|
||||
entries: [{text: 'maps\\pl_badwater_pro_v9.bsp', extraData: undefined}],
|
||||
maxEntries: 8192,
|
||||
fixedUserDataSize: 0,
|
||||
fixedUserDataSizeBits: 0
|
||||
}
|
||||
};
|
||||
|
||||
const examplePacket2 = {
|
||||
packetType: 'createStringTable',
|
||||
table: {
|
||||
name: 'downloadables',
|
||||
entries: [
|
||||
{text: 'maps\\pl_badwater_pro_v9.bsp', extraData: undefined},
|
||||
{text: 'foobar', extraData: undefined},
|
||||
{text: 'assadasdas', extraData: undefined},
|
||||
{text: 'foo', extraData: undefined}
|
||||
],
|
||||
maxEntries: 8192,
|
||||
fixedUserDataSize: 0,
|
||||
fixedUserDataSizeBits: 0
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
suite('CreateStringTable', () => {
|
||||
test('Parse createStringTable', () => {
|
||||
assertParser(ParseCreateStringTable, getStream(exampleData), examplePacket, 388);
|
||||
});
|
||||
|
||||
test('Encode createStringTable', () => {
|
||||
// more bits are used for encoding because we don't do a lot of compression tricks
|
||||
assertEncoder(ParseCreateStringTable, EncodeCreateStringTable, examplePacket, 401);
|
||||
assertEncoder(ParseCreateStringTable, EncodeCreateStringTable, examplePacket2, 628);
|
||||
});
|
||||
});
|
||||
|
|
@ -15,7 +15,7 @@ export function getStream(data: string | number[]) {
|
|||
export type Encoder = (data: any, stream: BitStream) => void;
|
||||
|
||||
export function assertEncoder(parser: Parser, encoder: Encoder, data: any, length: number = 0) {
|
||||
const stream = new BitStream(new ArrayBuffer(64));
|
||||
const stream = new BitStream(new ArrayBuffer(Math.max(64, length * 8)));
|
||||
|
||||
encoder(data as Packet, stream);
|
||||
|
||||
|
|
@ -28,14 +28,14 @@ export function assertEncoder(parser: Parser, encoder: Encoder, data: any, lengt
|
|||
stream.index = 0;
|
||||
|
||||
const result = parser(stream);
|
||||
assert.deepEqual(data, result, 'Re-decoded value not equal to original value');
|
||||
assert.equal(pos, stream.index, 'Number of bits used for encoding and parsing not equal');
|
||||
assert.deepEqual(result, data, 'Re-decoded value not equal to original value');
|
||||
assert.equal(stream.index, pos, 'Number of bits used for encoding and parsing not equal');
|
||||
}
|
||||
|
||||
export type Parser = (stream: BitStream) => any;
|
||||
|
||||
export function assertParser(parser: Parser, stream: BitStream, expected: any, length: number) {
|
||||
const start = stream.index;
|
||||
assert.deepEqual(expected, parser(stream));
|
||||
assert.deepEqual(parser(stream), expected);
|
||||
assert.equal(stream.index - start, length, 'Unexpected number of bits consumed from stream');
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue