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

Add tests to verify that re-encoded data is bit identical

This commit is contained in:
Robin Appelman 2017-11-20 00:31:57 +01:00
commit 9cc38d6b2d
5 changed files with 37 additions and 4 deletions

View file

@ -5,7 +5,7 @@ import {
} from '../../../../Parser/Packet/BSPDecal'; } from '../../../../Parser/Packet/BSPDecal';
import {SendPropEncoder} from '../../../../Parser/SendPropEncoder'; import {SendPropEncoder} from '../../../../Parser/SendPropEncoder';
import {SendPropParser} from '../../../../Parser/SendPropParser'; import {SendPropParser} from '../../../../Parser/SendPropParser';
import {assertEncoder, assertParser, getStream} from './PacketTest'; import {assertEncoder, assertParser, getStream, assertReEncode} from './PacketTest';
const data = [239, 236, 208, 85, 33, 127, 128, 9, 8]; const data = [239, 236, 208, 85, 33, 127, 128, 9, 8];
@ -64,4 +64,8 @@ suite('BSPDecal', () => {
lowPriority: false lowPriority: false
}, 65); }, 65);
}); });
test('Re-encode bspDecal', () => {
assertReEncode(getVecCoord, encodeVecCoord, getStream([239, 236, 208, 85, 33, 127, 128]));
});
}); });

View file

@ -1,6 +1,6 @@
import {BitStream} from 'bit-buffer'; import {BitStream} from 'bit-buffer';
import {EncodeClassInfo, ParseClassInfo} from '../../../../Parser/Packet/ClassInfo'; import {EncodeClassInfo, ParseClassInfo} from '../../../../Parser/Packet/ClassInfo';
import {assertEncoder, assertParser, getStream} from './PacketTest'; import {assertEncoder, assertParser, assertReEncode, getStream} from './PacketTest';
suite('ClassInfo', () => { suite('ClassInfo', () => {
test('Parse classInfo', () => { test('Parse classInfo', () => {
@ -20,4 +20,8 @@ suite('ClassInfo', () => {
entries: [] entries: []
}, 17); }, 17);
}); });
test('Re-encode classInfo', () => {
assertReEncode(ParseClassInfo, EncodeClassInfo, getStream([92, 1, 29]));
});
}); });

View file

@ -1,6 +1,6 @@
import {BitStream} from 'bit-buffer'; import {BitStream} from 'bit-buffer';
import {EncodeCreateStringTable, ParseCreateStringTable} from '../../../../Parser/Packet/CreateStringTable'; import {EncodeCreateStringTable, ParseCreateStringTable} from '../../../../Parser/Packet/CreateStringTable';
import {assertEncoder, assertParser, getStream} from './PacketTest'; import {assertEncoder, assertParser, assertReEncode, getStream} from './PacketTest';
const exampleData = [ const exampleData = [
100, 100,
@ -89,4 +89,8 @@ suite('CreateStringTable', () => {
assertEncoder(ParseCreateStringTable, EncodeCreateStringTable, examplePacket, 388); assertEncoder(ParseCreateStringTable, EncodeCreateStringTable, examplePacket, 388);
assertEncoder(ParseCreateStringTable, EncodeCreateStringTable, examplePacket2, 615); assertEncoder(ParseCreateStringTable, EncodeCreateStringTable, examplePacket2, 615);
}); });
test('Re-encode classInfo', () => {
assertReEncode(ParseCreateStringTable, EncodeCreateStringTable, getStream(exampleData));
});
}); });

View file

@ -37,6 +37,23 @@ export function assertEncoder(parser: Parser, encoder: Encoder, data: any, lengt
assert.equal(stream.index, pos, 'Number of bits used for encoding and parsing not equal' + message); assert.equal(stream.index, pos, 'Number of bits used for encoding and parsing not equal' + message);
} }
export function assertReEncode(parser: Parser, encoder: Encoder, stream: BitStream) {
const start = stream.index;
const result = parser(stream);
const encodeStream = new BitStream(new ArrayBuffer(stream.index));
const end = stream.index;
const length = end - start;
stream.index = start;
const byteLength = Math.floor((end - start) / 8);
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));
if (length - 8 * byteLength > 0) {
assert.deepEqual(encodeStream.readBits(length - 8 * byteLength), stream.readBits(length - 8 * byteLength));
}
}
export type Parser = (stream: BitStream, state?) => any; export type Parser = (stream: BitStream, state?) => any;
export function assertParser(parser: Parser, stream: BitStream, expected: any, length: number, state?: ParserState) { export function assertParser(parser: Parser, stream: BitStream, expected: any, length: number, state?: ParserState) {

View file

@ -1,6 +1,6 @@
import {BitStream} from 'bit-buffer'; import {BitStream} from 'bit-buffer';
import {EncodeSayText2, ParseSayText2} from '../../../../Parser/UserMessage/SayText2'; import {EncodeSayText2, ParseSayText2} from '../../../../Parser/UserMessage/SayText2';
import {assertEncoder, assertParser, getStream} from '../Packet/PacketTest'; import {assertEncoder, assertParser, assertReEncode, getStream} from '../Packet/PacketTest';
const data = [ const data = [
3, 3,
@ -80,4 +80,8 @@ suite('SayText2', () => {
test('Encode sayText2', () => { test('Encode sayText2', () => {
assertEncoder(ParseSayText2, EncodeSayText2, expected, 472); assertEncoder(ParseSayText2, EncodeSayText2, expected, 472);
}); });
test('Re-encode sayText2', () => {
assertReEncode(ParseSayText2, EncodeSayText2, getStream(data));
});
}); });