1
0
Fork 0
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:
Robin Appelman 2017-08-13 21:32:18 +02:00
commit 89b9c3b25c
10 changed files with 276 additions and 77 deletions

View 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);
});
});

View file

@ -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');
}