From 2fefbf36c90d5a013a455b3d11b793a116ead0b8 Mon Sep 17 00:00:00 2001 From: michele Date: Fri, 23 Apr 2021 17:41:10 +0200 Subject: [PATCH] #111 Test default conversion fail error message --- tests/fixture/mod.rs | 4 +++ tests/resources/fixture/default_conversion.rs | 29 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/tests/fixture/mod.rs b/tests/fixture/mod.rs index 464b0db..45452eb 100644 --- a/tests/fixture/mod.rs +++ b/tests/fixture/mod.rs @@ -179,9 +179,13 @@ mod should { fn convert_literal_string_for_default_values() { let (output, _) = run_test("default_conversion.rs"); + assert_in!(output.stdout.str(), "Cannot parse 'error' to get MyType"); + TestResults::new() .ok("test_base") .ok("test_byte_array") + .ok("test_convert_custom") + .fail("test_fail_conversion") .assert(output); } diff --git a/tests/resources/fixture/default_conversion.rs b/tests/resources/fixture/default_conversion.rs index 28668b8..fd0a400 100644 --- a/tests/resources/fixture/default_conversion.rs +++ b/tests/resources/fixture/default_conversion.rs @@ -1,11 +1,34 @@ use rstest::{fixture, rstest}; use std::net::{Ipv4Addr, SocketAddr}; +struct MyType(String); +struct E; +impl core::str::FromStr for MyType { + type Err = E; + + fn from_str(s: &str) -> Result { + match s { + "error" => Err(E), + inner => Ok(MyType(inner.to_owned())), + } + } +} + #[fixture] fn base(#[default = "1.2.3.4"] ip: Ipv4Addr, #[default = r#"8080"#] port: u16) -> SocketAddr { SocketAddr::new(ip.into(), port) } +#[fixture] +fn fail(#[default = "error"] t: MyType) -> MyType { + t +} + +#[fixture] +fn valid(#[default = "some"] t: MyType) -> MyType { + t +} + #[rstest] fn test_base(base: SocketAddr) { assert_eq!(base, "1.2.3.4:8080".parse().unwrap()); @@ -20,3 +43,9 @@ fn byte_array(#[default = b"1234"] some: &[u8]) -> usize { fn test_byte_array(byte_array: usize) { assert_eq!(4, byte_array); } + +#[rstest] +fn test_convert_custom(valid: MyType) {} + +#[rstest] +fn test_fail_conversion(fail: MyType) {}