From ba6014543dfb4040921bb4809c6b293cfdf33c84 Mon Sep 17 00:00:00 2001 From: "saber.wu" Date: Thu, 14 Jun 2018 17:09:43 +0800 Subject: support ini --- tests/Settings-invalid.ini | 2 ++ tests/Settings.ini | 9 +++++++ tests/datetime.rs | 17 +++++++++++++ tests/file_ini.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++++ tests/file_json.rs | 2 +- 5 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 tests/Settings-invalid.ini create mode 100644 tests/Settings.ini create mode 100644 tests/file_ini.rs (limited to 'tests') diff --git a/tests/Settings-invalid.ini b/tests/Settings-invalid.ini new file mode 100644 index 0000000..f2b8d9b --- /dev/null +++ b/tests/Settings-invalid.ini @@ -0,0 +1,2 @@ +ok : true, +error diff --git a/tests/Settings.ini b/tests/Settings.ini new file mode 100644 index 0000000..16badd4 --- /dev/null +++ b/tests/Settings.ini @@ -0,0 +1,9 @@ +debug = true +production = false +[place] +name = Torre di Pisa +longitude = 43.7224985 +latitude = 10.3970522 +favorite = false +reviews = 3866 +rating = 4.5 diff --git a/tests/datetime.rs b/tests/datetime.rs index 89a34a1..26b395d 100644 --- a/tests/datetime.rs +++ b/tests/datetime.rs @@ -38,6 +38,13 @@ fn make() -> Config { FileFormat::Hjson, )) .unwrap() + .merge(File::from_str( + r#" + ini_datetime = 2017-05-10T02:14:53Z + "#, + FileFormat::Ini, + )) + .unwrap() .clone() } @@ -64,6 +71,11 @@ fn test_datetime_string() { let date: String = s.get("hjson_datetime").unwrap(); assert_eq!(&date, "2017-05-10T02:14:53Z"); + + // INI + let date: String = s.get("ini_datetime").unwrap(); + + assert_eq!(&date, "2017-05-10T02:14:53Z"); } #[test] @@ -89,4 +101,9 @@ fn test_datetime() { let date: DateTime = s.get("hjson_datetime").unwrap(); assert_eq!(date, Utc.ymd(2017, 5, 10).and_hms(2, 14, 53)); + + // INI + let date: DateTime = s.get("ini_datetime").unwrap(); + + assert_eq!(date, Utc.ymd(2017, 5, 10).and_hms(2, 14, 53)); } diff --git a/tests/file_ini.rs b/tests/file_ini.rs new file mode 100644 index 0000000..4c0030a --- /dev/null +++ b/tests/file_ini.rs @@ -0,0 +1,60 @@ +extern crate config; +extern crate serde; +extern crate float_cmp; + +#[macro_use] +extern crate serde_derive; + +use config::*; + +#[derive(Debug, Deserialize, PartialEq)] +struct Place { + name: String, + longitude: f64, + latitude: f64, + favorite: bool, + reviews: u64, + rating: Option, +} + +#[derive(Debug, Deserialize, PartialEq)] +struct Settings { + debug: f64, + place: Place, +} + +fn make() -> Config { + let mut c = Config::default(); + c.merge(File::new("tests/Settings", FileFormat::Ini)) + .unwrap(); + c +} + +#[test] +fn test_file() { + let c = make(); + let s: Settings = c.try_into().unwrap(); + assert_eq!(s, Settings { + debug: 1.0, + place: Place { + name: String::from("Torre di Pisa"), + longitude: 43.7224985, + latitude: 10.3970522, + favorite: false, + reviews: 3866, + rating: Some(4.5), + }, + }); +} + +#[test] +fn test_error_parse() { + let mut c = Config::default(); + let res = c.merge(File::new("tests/Settings-invalid", FileFormat::Ini)); + + assert!(res.is_err()); + assert_eq!( + res.unwrap_err().to_string(), + r#"2:0 Expecting "[Some('='), Some(':')]" but found EOF. in tests/Settings-invalid.ini"# + ); +} diff --git a/tests/file_json.rs b/tests/file_json.rs index 1d35cae..8bffe23 100644 --- a/tests/file_json.rs +++ b/tests/file_json.rs @@ -72,4 +72,4 @@ fn test_error_parse() { res.unwrap_err().to_string(), "expected `:` at line 4 column 1 in tests/Settings-invalid.json".to_string() ); -} +} \ No newline at end of file -- cgit v1.2.3