look through negated conditionals instead of just ignoring them

https://anki.tenderapp.com/discussions/ankidesktop/38220-bug-in-2119-regarding-computation-of-req
This commit is contained in:
Damien Elmes 2020-01-23 16:28:09 +10:00
parent 5a79bc69b8
commit de3fe320c0

View file

@ -236,9 +236,11 @@ fn template_is_empty<'a>(nonempty_fields: &HashSet<&str>, nodes: &[ParsedNode<'a
return false; return false;
} }
} }
NegatedConditional { .. } => { NegatedConditional { children, .. } => {
// negated conditionals ignored when determining card generation // negated conditionals ignored when determining card generation
continue; if !template_is_empty(nonempty_fields, children) {
return false;
}
} }
} }
} }
@ -591,7 +593,7 @@ mod test {
tmpl = PT::from_text("{{2}}{{4}}").unwrap(); tmpl = PT::from_text("{{2}}{{4}}").unwrap();
assert_eq!(tmpl.renders_with_fields(&fields), false); assert_eq!(tmpl.renders_with_fields(&fields), false);
tmpl = PT::from_text("{{#3}}{{^2}}{{1}}{{/2}}{{/3}}").unwrap(); tmpl = PT::from_text("{{#3}}{{^2}}{{1}}{{/2}}{{/3}}").unwrap();
assert_eq!(tmpl.renders_with_fields(&fields), false); assert_eq!(tmpl.renders_with_fields(&fields), true);
} }
#[test] #[test]
@ -618,7 +620,10 @@ mod test {
assert_eq!(tmpl.requirements(&field_map), FieldRequirements::None); assert_eq!(tmpl.requirements(&field_map), FieldRequirements::None);
tmpl = PT::from_text("{{^a}}{{b}}{{/a}}").unwrap(); tmpl = PT::from_text("{{^a}}{{b}}{{/a}}").unwrap();
assert_eq!(tmpl.requirements(&field_map), FieldRequirements::None); assert_eq!(
tmpl.requirements(&field_map),
FieldRequirements::Any(HashSet::from_iter(vec![1].into_iter()))
);
tmpl = PT::from_text("{{#a}}{{#b}}{{a}}{{/b}}{{/a}}").unwrap(); tmpl = PT::from_text("{{#a}}{{#b}}{{a}}{{/b}}{{/a}}").unwrap();
assert_eq!( assert_eq!(
@ -631,6 +636,25 @@ mod test {
tmpl.requirements(&field_map), tmpl.requirements(&field_map),
FieldRequirements::Any(HashSet::from_iter(vec![0].into_iter())) FieldRequirements::Any(HashSet::from_iter(vec![0].into_iter()))
); );
tmpl = PT::from_text(
r#"
{{^a}}
{{b}}
{{/a}}
{{#a}}
{{a}}
{{b}}
{{/a}}
"#,
)
.unwrap();
assert_eq!(
tmpl.requirements(&field_map),
FieldRequirements::Any(HashSet::from_iter(vec![0, 1].into_iter()))
);
} }
#[test] #[test]