use dampen_cli::commands::check::cross_widget::RadioGroupValidator;
use dampen_cli::commands::check::errors::CheckError;
#[test]
fn test_duplicate_radio_value_detection() {
let mut validator = RadioGroupValidator::new();
validator.add_radio("group1", "option1", "file.dampen", 10, 5, None);
validator.add_radio("group1", "option1", "file.dampen", 15, 5, None);
let errors = validator.validate();
assert_eq!(errors.len(), 1);
match &errors[0] {
CheckError::DuplicateRadioValue { value, group, .. } => {
assert_eq!(value, "option1");
assert_eq!(group, "group1");
}
_ => panic!("Expected DuplicateRadioValue error"),
}
}
#[test]
fn test_inconsistent_handler_detection() {
let mut validator = RadioGroupValidator::new();
validator.add_radio(
"group1",
"opt1",
"file.dampen",
10,
5,
Some("handler1".to_string()),
);
validator.add_radio(
"group1",
"opt2",
"file.dampen",
15,
5,
Some("handler2".to_string()),
);
let errors = validator.validate();
assert_eq!(errors.len(), 1);
match &errors[0] {
CheckError::InconsistentRadioHandlers { group, .. } => {
assert_eq!(group, "group1");
}
_ => panic!("Expected InconsistentRadioHandlers error"),
}
}
#[test]
fn test_valid_radio_group() {
let mut validator = RadioGroupValidator::new();
validator.add_radio(
"group1",
"opt1",
"file.dampen",
10,
5,
Some("handler".to_string()),
);
validator.add_radio(
"group1",
"opt2",
"file.dampen",
15,
5,
Some("handler".to_string()),
);
validator.add_radio(
"group1",
"opt3",
"file.dampen",
20,
5,
Some("handler".to_string()),
);
let errors = validator.validate();
assert_eq!(errors.len(), 0);
}
#[test]
fn test_multiple_radio_groups() {
let mut validator = RadioGroupValidator::new();
validator.add_radio(
"group1",
"opt1",
"file.dampen",
10,
5,
Some("handler1".to_string()),
);
validator.add_radio(
"group1",
"opt2",
"file.dampen",
15,
5,
Some("handler1".to_string()),
);
validator.add_radio(
"group2",
"opt1",
"file.dampen",
20,
5,
Some("handler2".to_string()),
);
validator.add_radio(
"group2",
"opt2",
"file.dampen",
25,
5,
Some("handler2".to_string()),
);
let errors = validator.validate();
assert_eq!(errors.len(), 0);
}
#[test]
fn test_radio_group_with_no_handler() {
let mut validator = RadioGroupValidator::new();
validator.add_radio("group1", "opt1", "file.dampen", 10, 5, None);
validator.add_radio("group1", "opt2", "file.dampen", 15, 5, None);
let errors = validator.validate();
assert_eq!(errors.len(), 0);
}
#[test]
fn test_radio_group_mixed_handlers() {
let mut validator = RadioGroupValidator::new();
validator.add_radio(
"group1",
"opt1",
"file.dampen",
10,
5,
Some("handler".to_string()),
);
validator.add_radio("group1", "opt2", "file.dampen", 15, 5, None);
let errors = validator.validate();
assert_eq!(errors.len(), 1);
match &errors[0] {
CheckError::InconsistentRadioHandlers { .. } => {}
_ => panic!("Expected InconsistentRadioHandlers error"),
}
}