1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-03 10:14:06 +02:00

adjust tests

This commit is contained in:
Robin Appelman 2021-07-22 14:58:43 +02:00
commit 00596f946f
8 changed files with 2544 additions and 9 deletions

View file

@ -187,6 +187,7 @@ fn test_parse_send_table_roundtrip() {
bit_count: Some(10), bit_count: Some(10),
element_count: None, element_count: None,
array_property: None, array_property: None,
original_bit_count: Some(10),
}, },
RawSendPropDefinition { RawSendPropDefinition {
prop_type: SendPropType::Array, prop_type: SendPropType::Array,
@ -211,7 +212,9 @@ fn test_parse_send_table_roundtrip() {
bit_count: Some(32), bit_count: Some(32),
element_count: None, element_count: None,
array_property: None, array_property: None,
original_bit_count: Some(32),
})), })),
original_bit_count: None,
}, },
RawSendPropDefinition { RawSendPropDefinition {
prop_type: SendPropType::DataTable, prop_type: SendPropType::DataTable,
@ -224,6 +227,7 @@ fn test_parse_send_table_roundtrip() {
bit_count: None, bit_count: None,
element_count: None, element_count: None,
array_property: None, array_property: None,
original_bit_count: None,
}, },
], ],
needs_decoder: true, needs_decoder: true,
@ -396,6 +400,7 @@ fn test_data_table_packet_roundtrip() {
bit_count: Some(10), bit_count: Some(10),
element_count: None, element_count: None,
array_property: None, array_property: None,
original_bit_count: Some(10),
}, },
RawSendPropDefinition { RawSendPropDefinition {
prop_type: SendPropType::Array, prop_type: SendPropType::Array,
@ -420,7 +425,9 @@ fn test_data_table_packet_roundtrip() {
bit_count: Some(32), bit_count: Some(32),
element_count: None, element_count: None,
array_property: None, array_property: None,
original_bit_count: Some(32),
})), })),
original_bit_count: None,
}, },
RawSendPropDefinition { RawSendPropDefinition {
prop_type: SendPropType::DataTable, prop_type: SendPropType::DataTable,
@ -433,6 +440,7 @@ fn test_data_table_packet_roundtrip() {
bit_count: None, bit_count: None,
element_count: None, element_count: None,
array_property: None, array_property: None,
original_bit_count: None,
}, },
], ],
needs_decoder: true, needs_decoder: true,
@ -450,6 +458,7 @@ fn test_data_table_packet_roundtrip() {
bit_count: Some(10), bit_count: Some(10),
element_count: None, element_count: None,
array_property: None, array_property: None,
original_bit_count: Some(10),
}], }],
needs_decoder: true, needs_decoder: true,
}; };

View file

@ -70,7 +70,7 @@ pub struct RawSendPropDefinition {
pub bit_count: Option<u32>, pub bit_count: Option<u32>,
pub element_count: Option<u16>, pub element_count: Option<u16>,
pub array_property: Option<Box<RawSendPropDefinition>>, pub array_property: Option<Box<RawSendPropDefinition>>,
original_bit_count: Option<u32>, pub original_bit_count: Option<u32>,
} }
impl PartialEq for RawSendPropDefinition { impl PartialEq for RawSendPropDefinition {

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -2,30 +2,36 @@ use bitbuffer::{BitReadBuffer, BitReadStream, BitWriteStream, LittleEndian};
use std::fs; use std::fs;
use test_case::test_case; use test_case::test_case;
use tf_demo_parser::demo::message::Message; use tf_demo_parser::demo::message::Message;
use tf_demo_parser::demo::parser::Encode; use tf_demo_parser::demo::packet::Packet;
use tf_demo_parser::{MessageType, ParserState}; use tf_demo_parser::demo::parser::{DemoHandler, Encode, NullHandler};
use tf_demo_parser::{MessageType, Parse};
#[test_case("test_data/messages/game_event_list.bin", MessageType::GameEventList; "game_event_list")] #[test_case("test_data/messages/game_event_list.bin", MessageType::GameEventList; "game_event_list")]
// #[test_case("test_data/messages/packet_entities.bin", MessageType::PacketEntities; "packet_entities")]
fn message_reencode(input_file: &str, ty: MessageType) { fn message_reencode(input_file: &str, ty: MessageType) {
let data = fs::read(input_file).unwrap(); let data = fs::read(input_file).unwrap();
let state = ParserState::new(|_| false, true); let mut handler = DemoHandler::parse_all_with_analyser(NullHandler);
setup(&mut handler, "test_data/messages/setup_data_tables.bin");
setup(&mut handler, "test_data/messages/setup_string_tables.bin");
let state = &handler.state_handler;
let mut stream = BitReadStream::new(BitReadBuffer::new(&data, LittleEndian)); let mut stream = BitReadStream::new(BitReadBuffer::new(&data, LittleEndian));
let parsed = Message::from_type(ty, &mut stream, &state).unwrap(); let parsed = Message::from_type(ty, &mut stream, state).unwrap();
let mut out = Vec::with_capacity(data.len()); let mut out = Vec::with_capacity(data.len());
let written_bits = { let written_bits = {
let mut write = BitWriteStream::new(&mut out, LittleEndian); let mut write = BitWriteStream::new(&mut out, LittleEndian);
parsed.encode(&mut write, &state).unwrap(); parsed.encode(&mut write, state).unwrap();
write.bit_len() write.bit_len()
}; };
let mut re_stream = BitReadStream::new(BitReadBuffer::new(&out, LittleEndian)); let mut re_stream = BitReadStream::new(BitReadBuffer::new(&out, LittleEndian));
let re_parsed = Message::from_type(ty, &mut re_stream, &state).unwrap(); let re_parsed = Message::from_type(ty, &mut re_stream, state).unwrap();
assert_eq!(written_bits, stream.pos());
assert_eq!(parsed, re_parsed); assert_eq!(parsed, re_parsed);
assert_eq!(written_bits, stream.pos());
assert_eq!(data.len(), out.len()); assert_eq!(data.len(), out.len());
if data.len() > 16 { if data.len() > 16 {
@ -35,3 +41,10 @@ fn message_reencode(input_file: &str, ty: MessageType) {
pretty_assertions::assert_eq!(data, out); pretty_assertions::assert_eq!(data, out);
} }
} }
fn setup(handler: &mut DemoHandler<NullHandler>, input: &str) {
let data = fs::read(input).unwrap();
let mut stream = BitReadStream::new(BitReadBuffer::new_owned(data, LittleEndian));
let packet = Packet::parse(&mut stream, &handler.state_handler).unwrap();
handler.handle_packet(packet).unwrap();
}

View file

@ -24,7 +24,12 @@ fn snapshot_test(input_file: &str, snapshot_file: &str) {
.as_slice(), .as_slice(),
) )
.unwrap(); .unwrap();
pretty_assertions::assert_eq!(expected.start_tick, state.start_tick);
pretty_assertions::assert_eq!(expected.chat, state.chat); pretty_assertions::assert_eq!(expected.chat, state.chat);
pretty_assertions::assert_eq!(expected.deaths, state.deaths);
pretty_assertions::assert_eq!(expected.interval_per_tick, state.interval_per_tick);
pretty_assertions::assert_eq!(expected.rounds, state.rounds);
pretty_assertions::assert_eq!(expected.users, state.users);
pretty_assertions::assert_eq!(expected, state); pretty_assertions::assert_eq!(expected, state);
} }