From 967ce652c15c5129d3ffdf24009339a5f2a497ca Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Tue, 25 Mar 2025 19:42:28 +0000 Subject: [PATCH] Improve test coverage of YAML parsing code --- src/metadata/group.rs | 11 ++++++++++ src/metadata/location.rs | 14 +++++++++++++ src/metadata/plugin_cleaning_data.rs | 30 ++++++++++++++++++++++++++++ src/metadata/plugin_metadata.rs | 7 +++++++ 4 files changed, 62 insertions(+) diff --git a/src/metadata/group.rs b/src/metadata/group.rs index 4779fa37..da5177cd 100644 --- a/src/metadata/group.rs +++ b/src/metadata/group.rs @@ -153,6 +153,17 @@ mod tests { assert!(Group::try_from(&yaml).is_err()); } + #[test] + fn should_error_if_after_is_not_an_array_of_strings() { + let yaml = parse("{name: group1, after: other_group}"); + + assert!(Group::try_from(&yaml).is_err()); + + let yaml = parse("{name: group1, after: [0, 1]}"); + + assert!(Group::try_from(&yaml).is_err()); + } + #[test] fn should_set_all_given_fields() { let yaml = parse("{name: group1, description: text, after: [ other_group ]}"); diff --git a/src/metadata/location.rs b/src/metadata/location.rs index 33d56886..4e062e78 100644 --- a/src/metadata/location.rs +++ b/src/metadata/location.rs @@ -140,6 +140,20 @@ mod tests { assert!(Location::try_from(&yaml).is_err()); } + #[test] + fn should_error_if_link_is_not_a_string() { + let yaml = parse("{link: [https://www.example.com], name: example}"); + + assert!(Location::try_from(&yaml).is_err()); + } + + #[test] + fn should_error_if_name_is_not_a_string() { + let yaml = parse("{link: https://www.example.com, name: [example]}"); + + assert!(Location::try_from(&yaml).is_err()); + } + #[test] fn should_error_if_name_is_missing() { let yaml = parse("{link: https://www.example.com}"); diff --git a/src/metadata/plugin_cleaning_data.rs b/src/metadata/plugin_cleaning_data.rs index 2365e913..a6ec33dd 100644 --- a/src/metadata/plugin_cleaning_data.rs +++ b/src/metadata/plugin_cleaning_data.rs @@ -248,6 +248,36 @@ mod tests { assert!(PluginCleaningData::try_from(&yaml).is_err()); } + #[test] + fn should_error_if_a_count_is_not_a_number() { + let yaml = parse("{crc: 0x12345678, util: cleaner, itm: true}"); + + assert!(PluginCleaningData::try_from(&yaml).is_err()); + + let yaml = parse("{crc: 0x12345678, util: cleaner, udr: true}"); + + assert!(PluginCleaningData::try_from(&yaml).is_err()); + + let yaml = parse("{crc: 0x12345678, util: cleaner, nav: true}"); + + assert!(PluginCleaningData::try_from(&yaml).is_err()); + } + + #[test] + fn should_error_if_a_count_does_not_fit_in_a_u32() { + let yaml = parse("{crc: 0x12345678, util: cleaner, itm: -1}"); + + assert!(PluginCleaningData::try_from(&yaml).is_err()); + + let yaml = parse("{crc: 0x12345678, util: cleaner, udr: -2}"); + + assert!(PluginCleaningData::try_from(&yaml).is_err()); + + let yaml = parse("{crc: 0x12345678, util: cleaner, nav: -3}"); + + assert!(PluginCleaningData::try_from(&yaml).is_err()); + } + #[test] fn should_set_all_given_fields() { let yaml = diff --git a/src/metadata/plugin_metadata.rs b/src/metadata/plugin_metadata.rs index 30c8cd99..5fc3c9f4 100644 --- a/src/metadata/plugin_metadata.rs +++ b/src/metadata/plugin_metadata.rs @@ -938,6 +938,13 @@ mod tests { assert!(PluginMetadata::try_from(&yaml).is_err()); } + + #[test] + fn should_error_if_a_field_that_should_be_an_array_is_not() { + let yaml = parse("{name: 'Blank.esp', after: Blank.esm}"); + + assert!(PluginMetadata::try_from(&yaml).is_err()); + } } mod emit_yaml {