From 6c18c0eeca796cf1f396efde71ff93231979fd68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1niel=20Buga?= Date: Wed, 12 Feb 2025 10:54:39 +0100 Subject: [PATCH] Test and fix "required-by" relationship --- src/config.rs | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/config.rs b/src/config.rs index 3670867..a97ba51 100644 --- a/src/config.rs +++ b/src/config.rs @@ -105,7 +105,7 @@ impl ActiveConfiguration<'_> { disabled_by.push(opt.name.as_str()); } } else if o == option.name() { - required_by.push(o.as_str()); + required_by.push(opt.name.as_str()); } } }); @@ -154,3 +154,44 @@ pub fn find_option<'c>( } None } + +#[cfg(test)] +mod test { + use esp_metadata::Chip; + + use crate::{ + config::ActiveConfiguration, + template::{GeneratorOption, GeneratorOptionItem}, + }; + + #[test] + fn requires_picks_the_right_options() { + let options = &[ + GeneratorOptionItem::Option(GeneratorOption { + name: "option1".to_string(), + display_name: "Foobar".to_string(), + help: "".to_string(), + chips: vec![Chip::Esp32], + requires: vec!["option2".to_string()], + }), + GeneratorOptionItem::Option(GeneratorOption { + name: "option2".to_string(), + display_name: "Barfoo".to_string(), + help: "".to_string(), + chips: vec![Chip::Esp32], + requires: vec![], + }), + ]; + let active = ActiveConfiguration { + chip: Chip::Esp32, + selected: vec!["option1".to_string()], + options, + }; + + let rels = active.collect_relationships(&options[0]); + assert_eq!(rels.requires, &["option2"]); + + let rels = active.collect_relationships(&options[1]); + assert_eq!(rels.required_by, &["option1"]); + } +}