diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/env.rs | 4 | ||||
-rw-r--r-- | tests/file_json5.rs | 2 | ||||
-rw-r--r-- | tests/integer_range.rs | 10 | ||||
-rw-r--r-- | tests/unsigned_int.rs | 48 | ||||
-rw-r--r-- | tests/unsigned_int_hm.rs | 46 |
5 files changed, 106 insertions, 4 deletions
diff --git a/tests/env.rs b/tests/env.rs index 2ee67de..3a24bde 100644 --- a/tests/env.rs +++ b/tests/env.rs @@ -191,7 +191,9 @@ fn test_parse_float() { // can't use `matches!` because of float value match config { - TestFloatEnum::Float(TestFloat { float_val }) => assert_eq!(float_val, 42.3), + TestFloatEnum::Float(TestFloat { float_val }) => { + assert!(float_cmp::approx_eq!(f64, float_val, 42.3)) + } } }) } diff --git a/tests/file_json5.rs b/tests/file_json5.rs index 74d06c2..bdeb3ea 100644 --- a/tests/file_json5.rs +++ b/tests/file_json5.rs @@ -84,7 +84,7 @@ fn test_error_parse() { assert_eq!( res.unwrap_err().to_string(), format!( - " --> 2:7\n |\n2 | ok: true␊\n | ^---\n |\n = expected null in {}", + " --> 2:7\n |\n2 | ok: true\n | ^---\n |\n = expected null in {}", path_with_extension.display() ) ); diff --git a/tests/integer_range.rs b/tests/integer_range.rs index 7777ef2..e80a2f2 100644 --- a/tests/integer_range.rs +++ b/tests/integer_range.rs @@ -13,8 +13,14 @@ fn wrapping_u16() { .build() .unwrap(); - let port: u16 = c.get("settings.port").unwrap(); - assert_eq!(port, 464); + // FIXME: Can't compare ConfigError, because Unexpected are private. + let _port_error = c.get::<u16>("settings.port").unwrap_err(); + /* + assert!(matches!( + Err(ConfigError::invalid_type(None, config::Unexpected::U64(66000), "an unsigned 16 bit integer"),) + port_error + )); + */ } #[test] diff --git a/tests/unsigned_int.rs b/tests/unsigned_int.rs new file mode 100644 index 0000000..e870c8a --- /dev/null +++ b/tests/unsigned_int.rs @@ -0,0 +1,48 @@ +#![cfg(feature = "preserve_order")] + +extern crate indexmap; + +#[derive(serde::Deserialize, Eq, PartialEq, Debug)] +struct Container<T> { + inner: T, +} + +#[derive(serde::Deserialize, Eq, PartialEq, Debug)] +struct Unsigned { + unsigned: u16, +} + +impl Default for Unsigned { + fn default() -> Self { + Self { unsigned: 128 } + } +} + +impl From<Unsigned> for config::ValueKind { + fn from(unsigned: Unsigned) -> Self { + let mut properties = indexmap::IndexMap::new(); + properties.insert( + "unsigned".to_string(), + config::Value::from(unsigned.unsigned), + ); + + Self::Table(properties) + } +} + +#[test] +fn test_deser_unsigned_int() { + let container = Container { + inner: Unsigned::default(), + }; + + let built = config::Config::builder() + .set_default("inner", Unsigned::default()) + .unwrap() + .build() + .unwrap() + .try_deserialize::<Container<Unsigned>>() + .unwrap(); + + assert_eq!(container, built); +} diff --git a/tests/unsigned_int_hm.rs b/tests/unsigned_int_hm.rs new file mode 100644 index 0000000..ab2a60c --- /dev/null +++ b/tests/unsigned_int_hm.rs @@ -0,0 +1,46 @@ +#![cfg(not(feature = "preserve_order"))] + +#[derive(serde::Deserialize, Eq, PartialEq, Debug)] +struct Container<T> { + inner: T, +} + +#[derive(serde::Deserialize, Eq, PartialEq, Debug)] +struct Unsigned { + unsigned: u16, +} + +impl Default for Unsigned { + fn default() -> Self { + Self { unsigned: 128 } + } +} + +impl From<Unsigned> for config::ValueKind { + fn from(unsigned: Unsigned) -> Self { + let mut properties = std::collections::HashMap::new(); + properties.insert( + "unsigned".to_string(), + config::Value::from(unsigned.unsigned), + ); + + Self::Table(properties) + } +} + +#[test] +fn test_deser_unsigned_int_hm() { + let container = Container { + inner: Unsigned::default(), + }; + + let built = config::Config::builder() + .set_default("inner", Unsigned::default()) + .unwrap() + .build() + .unwrap() + .try_deserialize::<Container<Unsigned>>() + .unwrap(); + + assert_eq!(container, built); +} |