diff options
author | Lars Wirzenius <liw@liw.fi> | 2019-10-27 15:41:27 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2019-10-27 15:41:27 +0200 |
commit | f3bbb447458ef060c0d4dddfbebc5883f074824f (patch) | |
tree | b69b876bbb4f98fb1369dcc0c2d410d6703b2280 /src/steps.rs | |
parent | f9b209294282f1cf67ff91bf474926b3de63cfca (diff) | |
download | subplot-f3bbb447458ef060c0d4dddfbebc5883f074824f.tar.gz |
Add: function to parse a scenario step
Diffstat (limited to 'src/steps.rs')
-rw-r--r-- | src/steps.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/steps.rs b/src/steps.rs index ca9a75c..ce1c031 100644 --- a/src/steps.rs +++ b/src/steps.rs @@ -27,6 +27,27 @@ impl ScenarioStep { pub fn text(&self) -> &str { &self.text } + + pub fn from_str(text: &str) -> Option<ScenarioStep> { + let mut words = text.split_whitespace(); + + let kind = match words.next() { + Some("given") => StepKind::Given, + Some("when") => StepKind::When, + Some("then") => StepKind::Then, + _ => return None, + }; + + let mut joined = String::new(); + for word in words { + joined.push_str(word); + joined.push_str(" "); + } + if joined.len() > 1 { + joined.pop(); + } + Some(ScenarioStep::new(kind, &joined)) + } } /// The kind of scenario step we have: given, when, or then. @@ -40,3 +61,36 @@ pub enum StepKind { When, Then, } + +#[cfg(test)] +mod test { + use super::{ScenarioStep, StepKind}; + + #[test] + fn parses_given() { + let step = ScenarioStep::from_str("given I am Tomjon").unwrap(); + assert_eq!(step.kind(), StepKind::Given); + assert_eq!(step.text(), "I am Tomjon"); + } + + #[test] + fn parses_given_with_extra_spaces() { + let step = ScenarioStep::from_str(" given I am Tomjon ").unwrap(); + assert_eq!(step.kind(), StepKind::Given); + assert_eq!(step.text(), "I am Tomjon"); + } + + #[test] + fn parses_when() { + let step = ScenarioStep::from_str("when I declare myself king").unwrap(); + assert_eq!(step.kind(), StepKind::When); + assert_eq!(step.text(), "I declare myself king"); + } + + #[test] + fn parses_then() { + let step = ScenarioStep::from_str("then everyone accepts it").unwrap(); + assert_eq!(step.kind(), StepKind::Then); + assert_eq!(step.text(), "everyone accepts it"); + } +} |