diff options
author | Sam Scott <sam.scott89@gmail.com> | 2017-05-20 22:07:44 +0100 |
---|---|---|
committer | Sam Scott <sam.scott89@gmail.com> | 2017-05-20 22:07:44 +0100 |
commit | 6e71ba43eb6bd62f2b567224e387333016bd3a5c (patch) | |
tree | facec78176a03f5df9124949f7043188224e370c /tests | |
parent | a810aff7ab7891579d69fcdffefeaca3835ce533 (diff) |
Rewrite of most components.
Simplify `ser` logic, and expand `de` functionality.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_deserialize.rs | 35 | ||||
-rw-r--r-- | tests/test_serialize.rs | 47 |
2 files changed, 82 insertions, 0 deletions
diff --git a/tests/test_deserialize.rs b/tests/test_deserialize.rs index 569be0c..5d6d2c6 100644 --- a/tests/test_deserialize.rs +++ b/tests/test_deserialize.rs @@ -333,3 +333,38 @@ fn deserialize_enum_adjacently() { let rec_params: Query = qs::from_str(params).unwrap(); assert_eq!(rec_params, Query { e: E::S("other".to_string()), v: None }); } + +#[test] +fn deserialize_enum() { + #[derive(Deserialize, Debug, PartialEq)] + struct NewU8(u8); + + #[derive(Deserialize, Debug, PartialEq)] + enum E { + B, + S(String), + } + + #[derive(Deserialize, Debug, PartialEq)] + enum V { + V1 { x: u8, y: u16 }, + V2(String), + } + + #[derive(Deserialize, Debug, PartialEq)] + struct Query { + e: E, + v: Option<V>, + u: NewU8, + } + + let params = "e=B&v[V1][x]=12&v[V1][y]=300&u=12"; + let rec_params: Query = qs::from_str(params).unwrap(); + assert_eq!(rec_params, + Query { e: E::B, v: Some(V::V1 { x: 12, y: 300 }), u: NewU8(12) } + ); + + let params = "e[S]=other&u=1"; + let rec_params: Query = qs::from_str(params).unwrap(); + assert_eq!(rec_params, Query { e: E::S("other".to_string()), v: None, u: NewU8(1) }); +} diff --git a/tests/test_serialize.rs b/tests/test_serialize.rs index 5751ff6..7d9c38f 100644 --- a/tests/test_serialize.rs +++ b/tests/test_serialize.rs @@ -63,3 +63,50 @@ fn serialize_option() { let rec_params = qs::to_string(&query).unwrap(); assert_eq!(rec_params, params); } + +#[test] +fn serialize_enum() { + #[derive(Debug,Serialize,Deserialize,PartialEq)] + #[serde(rename_all = "lowercase")] + enum TestEnum { + A, + B(bool), + C { x: u8, y: u8}, + D(u8, u8), + } + + #[derive(Debug,Serialize,Deserialize,PartialEq)] + struct Query { + e: TestEnum, + } + + let params = urlencode("e=a"); + let query = Query { + e: TestEnum::A, + }; + let rec_params = qs::to_string(&query).unwrap(); + assert_eq!(rec_params, params); + + let params = urlencode("e[b]=true"); + let query = Query { + e: TestEnum::B(true), + }; + let rec_params = qs::to_string(&query).unwrap(); + assert_eq!(rec_params, params); + + let params = urlencode("e[c][x]=2&e[c][y]=3"); + let query = Query { + e: TestEnum::C { x: 2, y: 3 }, + }; + let rec_params = qs::to_string(&query).unwrap(); + assert_eq!(rec_params, params); + + let params = urlencode("e[d][0]=128&e[d][1]=1"); + let query = Query { + e: TestEnum::D(128, 1), + }; + let rec_params = qs::to_string(&query).unwrap(); + assert_eq!(rec_params, params); + + +}
\ No newline at end of file |