summaryrefslogtreecommitdiff
path: root/src/bindings.rs
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2020-12-15 14:00:44 +0000
committerDaniel Silverstone <dsilvers@digital-scurf.org>2020-12-18 17:50:19 +0000
commit4045e0164afd47a383d8a3177091887848be434f (patch)
treed5fbb20ad699873fa5a325b2ea0cc100bff26f4a /src/bindings.rs
parent37e9b82bbb7011b4b3d02f47921e5be3f59616da (diff)
downloadsubplot-4045e0164afd47a383d8a3177091887848be434f.tar.gz
bindings: Add tests for simple-pattern and typemap scenarios
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'src/bindings.rs')
-rw-r--r--src/bindings.rs58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/bindings.rs b/src/bindings.rs
index 94b7a23..c43a986 100644
--- a/src/bindings.rs
+++ b/src/bindings.rs
@@ -552,6 +552,21 @@ mod test_bindings {
}
#[test]
+ fn typemap_must_match_pattern() {
+ let yaml = "
+- then: you are {age:word} years old
+ function: check_age
+ types:
+ age: number
+";
+ match Bindings::new().add_from_yaml(&yaml) {
+ Ok(_) => unreachable!(),
+ Err(SubplotError::SimplePatternKindMismatch(_)) => (),
+ Err(e) => panic!("Incorrect error: {}", e),
+ }
+ }
+
+ #[test]
fn does_not_find_match_for_unmatching_kind() {
let step = ScenarioStep::new(StepKind::Given, "given", "I am Tomjon");
let binding = Binding::new(
@@ -923,4 +938,47 @@ mod test_regex_from_simple_pattern {
_ => unreachable!(),
}
}
+
+ #[test]
+ fn typemap_updated_on_pattern_parse_default() {
+ let mut types = HashMap::new();
+ assert!(regex_from_simple_pattern("{foo}", false, &mut types).is_ok());
+ assert_eq!(types.get("foo").map(String::as_str), Some("word"));
+ }
+
+ #[test]
+ fn typemap_checked_on_pattern_parse_and_default_agrees() {
+ let mut types = HashMap::new();
+ types.insert("foo".into(), "word".into());
+ assert!(regex_from_simple_pattern("{foo}", false, &mut types).is_ok());
+ assert_eq!(types.len(), 1);
+ assert_eq!(types.get("foo").map(String::as_str), Some("word"));
+ }
+
+ #[test]
+ fn typemap_updated_on_pattern_parse_explicit() {
+ let mut types = HashMap::new();
+ assert!(regex_from_simple_pattern("{foo:number}", false, &mut types).is_ok());
+ assert_eq!(types.get("foo").map(String::as_str), Some("number"));
+ }
+
+ #[test]
+ fn typemap_used_when_kind_not_present() {
+ let mut types = HashMap::new();
+ types.insert("foo".into(), "number".into());
+ assert_eq!(
+ regex_from_simple_pattern("{foo}", false, &mut types).unwrap(),
+ r"(?P<foo>-?\d+(\.\d+)?)"
+ );
+ }
+
+ #[test]
+ fn typemap_and_pattern_kind_must_match() {
+ let mut types = HashMap::new();
+ types.insert("foo".into(), "number".into());
+ assert!(matches!(
+ regex_from_simple_pattern("{foo:word}", false, &mut types),
+ Err(SubplotError::SimplePatternKindMismatch(_))
+ ));
+ }
}