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

switch to cargo-insta for snapshot testing

This commit is contained in:
Robin Appelman 2023-12-21 23:02:41 +01:00
commit 07039da23d
23 changed files with 42991 additions and 22877 deletions

148
Cargo.lock generated
View file

@ -96,7 +96,7 @@ checksum = "052a5a614540ae9bb7de25c2c86a94b6de7374cb7e3230f3128955bdaea62c3f"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
"syn_util",
]
@ -238,9 +238,9 @@ dependencies = [
[[package]]
name = "crossbeam-deque"
version = "0.8.2"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751"
dependencies = [
"cfg-if",
"crossbeam-epoch",
@ -249,22 +249,21 @@ dependencies = [
[[package]]
name = "crossbeam-epoch"
version = "0.9.13"
version = "0.9.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a"
checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa"
dependencies = [
"autocfg",
"cfg-if",
"crossbeam-utils",
"memoffset",
"scopeguard",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.14"
version = "0.8.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f"
dependencies = [
"cfg-if",
]
@ -276,7 +275,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
dependencies = [
"quote",
"syn",
"syn 1.0.107",
]
[[package]]
@ -330,7 +329,7 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
]
[[package]]
@ -343,7 +342,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
"syn",
"syn 1.0.107",
"synstructure",
]
@ -411,6 +410,20 @@ dependencies = [
"hashbrown",
]
[[package]]
name = "insta"
version = "1.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d64600be34b2fcfc267740a243fa7744441bb4947a619ac4e5bb6507f35fbfc"
dependencies = [
"console",
"lazy_static",
"linked-hash-map",
"serde",
"similar",
"yaml-rust",
]
[[package]]
name = "itertools"
version = "0.10.5"
@ -464,18 +477,21 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.139"
version = "0.2.151"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
[[package]]
name = "linked-hash-map"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
[[package]]
name = "log"
version = "0.4.17"
version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
dependencies = [
"cfg-if",
]
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]]
name = "main_error"
@ -494,15 +510,15 @@ dependencies = [
[[package]]
name = "memchr"
version = "2.5.0"
version = "2.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
[[package]]
name = "memoffset"
version = "0.7.1"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
dependencies = [
"autocfg",
]
@ -524,7 +540,7 @@ checksum = "288807bc867d10bf77d74614d8287230394b3afc49c2716f09d1ff11bb6a3741"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
]
[[package]]
@ -650,7 +666,7 @@ dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
]
[[package]]
@ -718,7 +734,7 @@ dependencies = [
"regex",
"regex-syntax",
"structmeta",
"syn",
"syn 1.0.107",
]
[[package]]
@ -787,7 +803,7 @@ dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
"version_check",
]
@ -804,18 +820,18 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.49"
version = "1.0.71"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5"
checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.23"
version = "1.0.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
dependencies = [
"proc-macro2",
]
@ -916,33 +932,27 @@ dependencies = [
"proc-macro2",
"quote",
"serde_derive_internals",
"syn",
"syn 1.0.107",
]
[[package]]
name = "scopeguard"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "serde"
version = "1.0.152"
version = "1.0.193"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.152"
version = "1.0.193"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 2.0.42",
]
[[package]]
@ -953,7 +963,7 @@ checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
]
[[package]]
@ -975,7 +985,7 @@ checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
]
[[package]]
@ -987,6 +997,12 @@ dependencies = [
"lazy_static",
]
[[package]]
name = "similar"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597"
[[package]]
name = "smallvec"
version = "1.10.0"
@ -1023,7 +1039,7 @@ dependencies = [
"proc-macro2",
"quote",
"structmeta-derive",
"syn",
"syn 1.0.107",
]
[[package]]
@ -1034,7 +1050,7 @@ checksum = "bafede0d0a2f21910f36d47b1558caae3076ed80f6f3ad0fc85a91e6ba7e5938"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
]
[[package]]
@ -1048,6 +1064,17 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "syn"
version = "2.0.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b7d0a2c048d661a1a59fcd7355baa232f7ed34e0ee4df2eef3c1c1c0d3852d8"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "syn_util"
version = "0.4.2"
@ -1056,7 +1083,7 @@ checksum = "6754c4559b79657554e9d8a0d56e65e490c76d382b9c23108364ec4125dea23c"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
]
[[package]]
@ -1067,7 +1094,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
"unicode-xid",
]
@ -1090,7 +1117,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
]
[[package]]
@ -1110,6 +1137,7 @@ dependencies = [
"err-derive",
"fnv",
"iai",
"insta",
"itertools",
"jemallocator",
"main_error",
@ -1146,7 +1174,7 @@ checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
]
[[package]]
@ -1197,7 +1225,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
]
[[package]]
@ -1265,12 +1293,11 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "walkdir"
version = "2.3.2"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
dependencies = [
"same-file",
"winapi",
"winapi-util",
]
@ -1295,7 +1322,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
"wasm-bindgen-shared",
]
@ -1317,7 +1344,7 @@ checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn 1.0.107",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@ -1426,6 +1453,15 @@ version = "0.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
[[package]]
name = "yaml-rust"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
dependencies = [
"linked-hash-map",
]
[[package]]
name = "yansi"
version = "0.5.1"

View file

@ -61,6 +61,7 @@ pretty_assertions = "1.3.0"
test-case = "2.2.2"
iai = "0.1.1"
criterion = "0.4.0"
insta = { version = "1.34.0", features = ["json"] }
[profile.release]
lto = true

View file

@ -93,7 +93,7 @@
};
devShells.default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [rust-bin.stable.latest.default bacon cargo-edit cargo-outdated rustfmt clippy cargo-audit hyperfine valgrind];
nativeBuildInputs = with pkgs; [rust-bin.stable.latest.default bacon cargo-edit cargo-outdated rustfmt clippy cargo-audit hyperfine valgrind cargo-insta];
};
});
}

View file

@ -356,6 +356,12 @@ pub struct Analyser {
user_id_map: HashMap<EntityId, UserId>,
}
#[derive(Default, Debug, Serialize, Deserialize, PartialEq)]
pub struct Pause {
from: DemoTick,
to: DemoTick,
}
impl MessageHandler for Analyser {
type Output = MatchState;
@ -387,7 +393,10 @@ impl MessageHandler for Analyser {
self.pause_start = Some(tick);
} else {
let start = self.pause_start.unwrap_or_default();
self.state.pauses.push((start, tick))
self.state.pauses.push(Pause {
from: start,
to: tick,
})
}
}
_ => {}
@ -498,5 +507,5 @@ pub struct MatchState {
pub rounds: Vec<Round>,
pub start_tick: ServerTick,
pub interval_per_tick: f32,
pub pauses: Vec<(DemoTick, DemoTick)>,
pub pauses: Vec<Pause>,
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,11 +1,10 @@
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
use std::fs::{self, File};
use std::fs;
use test_case::test_case;
use fnv::FnvHashMap;
use std::collections::HashMap;
use std::io::{BufRead, BufReader};
use tf_demo_parser::demo::data::DemoTick;
use tf_demo_parser::demo::message::packetentities::{EntityId, PacketEntity, UpdateType};
use tf_demo_parser::demo::message::Message;
@ -134,86 +133,15 @@ impl MessageHandler for EntityDumper {
}
}
#[test_case("test_data/small.dem", "test_data/small_entities.json"; "small.dem")]
fn entity_test(input_file: &str, snapshot_file: &str) {
#[test_case("test_data/small.dem")]
fn entity_test(input_file: &str) {
let file = fs::read(input_file).expect("Unable to read file");
let demo = Demo::new(&file);
let (_, entities) = DemoParser::new_with_analyser(demo.get_stream(), EntityDumper::new())
.parse()
.unwrap();
let json_file = File::open(snapshot_file).expect("Unable to read file");
let mut reader = BufReader::new(json_file);
let mut buffer = String::new();
let mut expected = Vec::with_capacity(128);
while reader.read_line(&mut buffer).expect("failed to read line") > 0 {
let entity: EntityDump =
serde_json::from_str(buffer.trim_end()).expect("failed to parse json");
expected.push(entity);
buffer.clear();
}
pretty_assertions::assert_eq!(expected.len(), entities.len());
let entity_ids: Vec<_> = entities.iter().map(|entity| entity.id).collect();
let expected_ids: Vec<_> = expected.iter().map(|entity| entity.id).collect();
pretty_assertions::assert_eq!(expected_ids, entity_ids);
for (expected_entity, entity) in expected.into_iter().zip(entities.into_iter()) {
pretty_assertions::assert_eq!(
expected_entity.tick,
entity.tick,
"Failed comparing entity {}",
entity.id
);
pretty_assertions::assert_eq!(
expected_entity.id,
entity.id,
"Failed comparing entity {}",
entity.id
);
pretty_assertions::assert_eq!(
expected_entity.server_class,
entity.server_class,
"Failed comparing entity {}",
entity.id
);
pretty_assertions::assert_eq!(
expected_entity.pvs,
entity.pvs,
"Failed comparing entity {}",
entity.id
);
let mut prop_names: Vec<_> = entity.props.keys().collect();
let mut expected_prop_names: Vec<_> = expected_entity.props.keys().collect();
prop_names.sort();
expected_prop_names.sort();
pretty_assertions::assert_eq!(
expected_prop_names,
prop_names,
"Failed comparing entity {}",
entity.id
);
for prop_name in expected_prop_names {
pretty_assertions::assert_eq!(
expected_entity.props.get(prop_name),
entity.props.get(prop_name),
"Failed comparing entity {} prop {}",
entity.id,
prop_name
);
}
pretty_assertions::assert_eq!(
expected_entity,
entity,
"Failed comparing entity {}",
entity.id
);
}
insta::with_settings!({sort_maps =>true}, {
insta::assert_json_snapshot!(entities);
});
}

View file

@ -2,7 +2,7 @@ use std::fs;
use test_case::test_case;
use fnv::FnvHashMap;
use std::collections::{HashMap, HashSet};
use std::collections::HashMap;
use tf_demo_parser::demo::packet::datatable::{ParseSendTable, SendTableName, ServerClass};
use tf_demo_parser::demo::parser::MessageHandler;
use tf_demo_parser::demo::sendprop::{SendPropIdentifier, SendPropName};
@ -53,8 +53,8 @@ impl MessageHandler for SendPropAnalyser {
}
}
#[test_case("test_data/gully.dem", "test_data/gully_props.json"; "gully.dem")]
fn flatten_test(input_file: &str, snapshot_file: &str) {
#[test_case("test_data/gully.dem")]
fn flatten_test(input_file: &str) {
let file = fs::read(input_file).expect("Unable to read file");
let demo = Demo::new(&file);
let (_, (send_tables, prop_names)) =
@ -79,18 +79,7 @@ fn flatten_test(input_file: &str, snapshot_file: &str) {
})
.collect();
let expected: HashMap<SendTableName, Vec<String>> = serde_json::from_slice(
fs::read(snapshot_file)
.expect("Unable to read file")
.as_slice(),
)
.unwrap();
let expected_tables: HashSet<_> = expected.keys().collect();
let actual_tables: HashSet<_> = flat_props.keys().collect();
pretty_assertions::assert_eq!(expected_tables, actual_tables);
for table in expected_tables {
pretty_assertions::assert_eq!(expected[table], flat_props[table]);
}
insta::with_settings!({sort_maps =>true}, {
insta::assert_json_snapshot!(flat_props);
});
}

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,7 @@
---
source: tests/tests.rs
expression: state
---
{
"chat": [
{
@ -2121,5 +2125,6 @@
}
],
"startTick": 27136,
"intervalPerTick": 0.015
"intervalPerTick": 0.015,
"pauses": []
}

View file

@ -1,3 +1,7 @@
---
source: tests/tests.rs
expression: state
---
{
"chat": [
{
@ -1897,5 +1901,15 @@
}
],
"startTick": 7233,
"intervalPerTick": 0.015
"intervalPerTick": 0.015,
"pauses": [
{
"from": 60409,
"to": 63698
},
{
"from": 79213,
"to": 80377
}
]
}

View file

@ -1,3 +1,7 @@
---
source: tests/tests.rs
expression: state
---
{
"chat": [
{
@ -1298,5 +1302,11 @@
}
],
"startTick": 11793,
"intervalPerTick": 0.015
"intervalPerTick": 0.015,
"pauses": [
{
"from": 14081,
"to": 16714
}
]
}

View file

@ -1,3 +1,7 @@
---
source: tests/tests.rs
expression: state
---
{
"players": [
{

View file

@ -1,3 +1,7 @@
---
source: tests/tests.rs
expression: state
---
{
"chat": [
{
@ -2505,5 +2509,6 @@
}
],
"startTick": 348,
"intervalPerTick": 0.015
"intervalPerTick": 0.015,
"pauses": []
}

View file

@ -1,3 +1,7 @@
---
source: tests/tests.rs
expression: state
---
{
"chat": [
{
@ -1474,5 +1478,6 @@
}
],
"startTick": 10587,
"intervalPerTick": 0.015
"intervalPerTick": 0.015,
"pauses": []
}

View file

@ -1,3 +1,7 @@
---
source: tests/tests.rs
expression: state
---
{
"chat": [
{
@ -2509,5 +2513,6 @@
}
],
"startTick": 67,
"intervalPerTick": 0.015
"intervalPerTick": 0.015,
"pauses": []
}

View file

@ -1,3 +1,7 @@
---
source: tests/tests.rs
expression: state
---
{
"chat": [
{
@ -2570,5 +2574,6 @@
}
],
"startTick": 77,
"intervalPerTick": 0.015
"intervalPerTick": 0.015,
"pauses": []
}

View file

@ -1,3 +1,7 @@
---
source: tests/tests.rs
expression: state
---
{
"chat": [
{
@ -1672,5 +1676,6 @@
}
],
"startTick": 173463,
"intervalPerTick": 0.015
"intervalPerTick": 0.015,
"pauses": []
}

View file

@ -1,3 +1,7 @@
---
source: tests/tests.rs
expression: state
---
{
"players": [
{

View file

@ -1,3 +1,7 @@
---
source: tests/tests.rs
expression: state
---
{
"chat": [],
"users": {
@ -12,5 +16,6 @@
"deaths": [],
"rounds": [],
"startTick": 68,
"intervalPerTick": 0.015
"intervalPerTick": 0.015,
"pauses": []
}

View file

@ -1,3 +1,7 @@
---
source: tests/tests.rs
expression: state
---
{
"chat": [
{
@ -1608,5 +1612,6 @@
}
],
"startTick": 24964,
"intervalPerTick": 0.015
"intervalPerTick": 0.015,
"pauses": []
}

View file

@ -1,63 +1,38 @@
use std::fs;
use test_case::test_case;
use tf_demo_parser::demo::parser::gamestateanalyser::{GameState, GameStateAnalyser};
use tf_demo_parser::{Demo, DemoParser, MatchState};
use tf_demo_parser::demo::parser::gamestateanalyser::GameStateAnalyser;
use tf_demo_parser::{Demo, DemoParser};
#[test_case("small.dem", "small.json"; "small.dem")]
#[test_case("gully.dem", "gully.json"; "gully.dem")]
#[test_case("comp.dem", "comp.json"; "comp.dem")]
#[test_case("malformed_cvar.dem", "malformed_cvar.json"; "malformed_cvar.dem")]
#[test_case("unicode-saytext.dem", "unicode-saytext.json"; "unicode-saytext.dem")]
#[test_case("nousers.dem", "nousers.json"; "nousers.dem")]
#[test_case("decal.dem", "decal.json"; "decal.dem")]
#[test_case("saytext2.dem", "saytext2.json"; "saytext2.dem")]
#[test_case("emptysaytext.dem", "emptysaytext.json"; "emptysaytext.dem")]
#[test_case("protocol23.dem", "protocol23.json"; "protocol23.dem")]
fn snapshot_test(input_file: &str, snapshot_file: &str) {
#[test_case("small.dem")]
#[test_case("gully.dem")]
#[test_case("comp.dem")]
#[test_case("malformed_cvar.dem")]
#[test_case("unicode-saytext.dem")]
#[test_case("nousers.dem")]
#[test_case("decal.dem")]
#[test_case("saytext2.dem")]
#[test_case("emptysaytext.dem")]
#[test_case("protocol23.dem")]
fn snapshot_test(input_file: &str) {
let file = fs::read(format!("test_data/{}", input_file)).expect("Unable to read file");
let demo = Demo::new(&file);
let (_, state) = DemoParser::new(demo.get_stream()).parse().unwrap();
//
// fs::write(
// format!("test_data/{}", snapshot_file),
// serde_json::to_string_pretty(&state).unwrap(),
// )
// .unwrap();
let expected: MatchState = serde_json::from_slice(
fs::read(format!("test_data/{}", snapshot_file))
.expect("Unable to read file")
.as_slice(),
)
.unwrap();
pretty_assertions::assert_eq!(expected, state);
insta::assert_json_snapshot!(format!("{input_file}_minimal"), state);
let (_, state) = DemoParser::new_all(demo.get_stream()).parse().unwrap();
pretty_assertions::assert_eq!(expected, state);
insta::assert_json_snapshot!(format!("{input_file}_minimal"), state);
}
#[test_case("small.dem", "small_game_state.json"; "small.dem")]
#[test_case("gully.dem", "gully_game_state.json"; "gully.dem")]
fn game_state_test(input_file: &str, snapshot_file: &str) {
#[test_case("small.dem")]
#[test_case("gully.dem")]
fn game_state_test(input_file: &str) {
let file = fs::read(format!("test_data/{}", input_file)).expect("Unable to read file");
let demo = Demo::new(&file);
let (_, state) = DemoParser::new_with_analyser(demo.get_stream(), GameStateAnalyser::new())
.parse()
.unwrap();
// fs::write(
// format!("test_data/{}", snapshot_file),
// serde_json::to_string_pretty(&state).unwrap(),
// )
// .unwrap();
let expected: GameState = serde_json::from_slice(
fs::read(format!("test_data/{}", snapshot_file))
.expect("Unable to read file")
.as_slice(),
)
.unwrap();
pretty_assertions::assert_eq!(expected.players, state.players);
pretty_assertions::assert_eq!(expected, state);
insta::assert_json_snapshot!(input_file, state);
}