diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-12-15 14:00:44 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-12-18 17:50:19 +0000 |
commit | 4045e0164afd47a383d8a3177091887848be434f (patch) | |
tree | d5fbb20ad699873fa5a325b2ea0cc100bff26f4a /src/bindings.rs | |
parent | 37e9b82bbb7011b4b3d02f47921e5be3f59616da (diff) | |
download | subplot-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.rs | 58 |
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(_)) + )); + } } |