in yaml_test_runner/src/generator.rs [180:288]
fn fn_impls(
&self,
general_setup_call: Tokens,
setup_call: Option<Tokens>,
teardown_call: Option<Tokens>,
) -> Vec<Option<Tokens>> {
let mut seen_names = HashSet::new();
self.tests
.iter()
.map(|test_fn| {
let name = test_fn.name();
let unique_name = test_fn.unique_name(&mut seen_names);
if self.skip_test(name) {
info!(
r#"skipping "{}" in {} because it's included in skip.yml"#,
name,
self.path,
);
return None;
}
let fn_name = syn::Ident::from(unique_name.as_str());
let mut body = Tokens::new();
let mut skip : Option<String> = None;
let mut read_response = false;
for step in &test_fn.steps {
match step {
Step::Skip(s) => {
skip = if s.skip_version(self.version) {
let m = format!(
r#"skipping "{}" in {} because version "{}" is met. {}"#,
name,
&self.path,
s.version(),
s.reason()
);
Some(m)
} else if s.skip_features(&self.skip.features) {
let m = format!(
r#"skipping "{}" in {} because it needs features "{:?}" which are currently not implemented"#,
name,
&self.path,
s.features()
);
Some(m)
} else {
None
}
}
Step::Do(d) => {
read_response = d.to_tokens(false, &mut body);
}
Step::Match(m) => {
read_response = Self::read_response(read_response,&mut body);
m.to_tokens(&mut body);
}
Step::Set(s) => {
read_response = Self::read_response(read_response, &mut body);
s.to_tokens(&mut body);
}
Step::Length(l) => {
read_response = Self::read_response(read_response,&mut body);
l.to_tokens(&mut body);
},
Step::IsTrue(t) => {
read_response = Self::read_response(read_response,&mut body);
t.to_tokens(&mut body);
},
Step::IsFalse(f) => {
read_response = Self::read_response(read_response, &mut body);
f.to_tokens(&mut body);
},
Step::Comparison(c) => {
read_response = Self::read_response(read_response,&mut body);
c.to_tokens(&mut body);
},
Step::Contains(c) => {
read_response = Self::read_response(read_response,&mut body);
c.to_tokens(&mut body);
},
Step::TransformAndSet(t) => {
read_response = Self::read_response(read_response,&mut body);
t.to_tokens(&mut body);
}
}
}
match skip {
Some(s) => {
info!("{}", s);
None
},
None => Some(quote! {
#[tokio::test]
async fn #fn_name() -> anyhow::Result<()> {
let client = client::get();
#general_setup_call
#setup_call
#body
#teardown_call
Ok(())
}
}),
}
})
.collect()
}