summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSam Scott <sam.scott89@gmail.com>2017-05-20 22:07:44 +0100
committerSam Scott <sam.scott89@gmail.com>2017-05-20 22:07:44 +0100
commit6e71ba43eb6bd62f2b567224e387333016bd3a5c (patch)
treefacec78176a03f5df9124949f7043188224e370c /tests
parenta810aff7ab7891579d69fcdffefeaca3835ce533 (diff)
Rewrite of most components.
Simplify `ser` logic, and expand `de` functionality.
Diffstat (limited to 'tests')
-rw-r--r--tests/test_deserialize.rs35
-rw-r--r--tests/test_serialize.rs47
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