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:
parent
b18be86810
commit
9cc38d6b2d
5 changed files with 37 additions and 4 deletions
|
|
@ -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]));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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]));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue