| use super::super::ordered_json::*; |
| |
| fn check(json: OrderedJson, serialized: &str) { |
| assert_eq!(json.to_string(), serialized); |
| assert_eq!(serde_json::to_string(&json).unwrap(), serialized); |
| |
| let json = json.to_string(); |
| let json: OrderedJson = serde_json::from_str(&json).unwrap(); |
| |
| assert_eq!(json.to_string(), serialized); |
| assert_eq!(serde_json::to_string(&json).unwrap(), serialized); |
| |
| let json = serde_json::to_string(&json).unwrap(); |
| let json: OrderedJson = serde_json::from_str(&json).unwrap(); |
| |
| assert_eq!(json.to_string(), serialized); |
| assert_eq!(serde_json::to_string(&json).unwrap(), serialized); |
| } |
| |
| // Make sure there is no extra level of string, plus number of escapes. |
| #[test] |
| fn escape_json_number() { |
| let json = OrderedJson::serialize(3).unwrap(); |
| let json = EscapedJson::from(json); |
| assert_eq!(format!("{json}"), "3"); |
| } |
| |
| #[test] |
| fn escape_json_single_quote() { |
| let json = OrderedJson::serialize("he's").unwrap(); |
| let json = EscapedJson::from(json); |
| assert_eq!(format!("{json}"), r#""he\'s""#); |
| } |
| |
| #[test] |
| fn escape_json_array() { |
| let json = OrderedJson::serialize([1, 2, 3]).unwrap(); |
| let json = EscapedJson::from(json); |
| assert_eq!(format!("{json}"), r#"[1,2,3]"#); |
| } |
| |
| #[test] |
| fn escape_json_string() { |
| let json = OrderedJson::serialize(r#"he"llo"#).unwrap(); |
| let json = EscapedJson::from(json); |
| assert_eq!(format!("{json}"), r#""he\\\"llo""#); |
| } |
| |
| #[test] |
| fn escape_json_string_escaped() { |
| let json = OrderedJson::serialize(r#"he\"llo"#).unwrap(); |
| let json = EscapedJson::from(json); |
| assert_eq!(format!("{json}"), r#""he\\\\\\\"llo""#); |
| } |
| |
| #[test] |
| fn escape_json_string_escaped_escaped() { |
| let json = OrderedJson::serialize(r#"he\\"llo"#).unwrap(); |
| let json = EscapedJson::from(json); |
| assert_eq!(format!("{json}"), r#""he\\\\\\\\\\\"llo""#); |
| } |
| |
| // Testing round trip + making sure there is no extra level of string |
| #[test] |
| fn number() { |
| let json = OrderedJson::serialize(3).unwrap(); |
| let serialized = "3"; |
| check(json, serialized); |
| } |
| |
| #[test] |
| fn boolean() { |
| let json = OrderedJson::serialize(true).unwrap(); |
| let serialized = "true"; |
| check(json, serialized); |
| } |
| |
| #[test] |
| fn string() { |
| let json = OrderedJson::serialize("he\"llo").unwrap(); |
| let serialized = r#""he\"llo""#; |
| check(json, serialized); |
| } |
| |
| #[test] |
| fn serialize_array() { |
| let json = OrderedJson::serialize([3, 1, 2]).unwrap(); |
| let serialized = "[3,1,2]"; |
| check(json, serialized); |
| } |
| |
| #[test] |
| fn sorted_array() { |
| let items = ["c", "a", "b"]; |
| let serialized = r#"["a","b","c"]"#; |
| let items: Vec<OrderedJson> = |
| items.into_iter().map(OrderedJson::serialize).collect::<Result<Vec<_>, _>>().unwrap(); |
| let json = OrderedJson::array_sorted(items); |
| check(json, serialized); |
| } |
| |
| #[test] |
| fn nested_array() { |
| let a = OrderedJson::serialize(3).unwrap(); |
| let b = OrderedJson::serialize(2).unwrap(); |
| let c = OrderedJson::serialize(1).unwrap(); |
| let d = OrderedJson::serialize([1, 3, 2]).unwrap(); |
| let json = OrderedJson::array_sorted([a, b, c, d]); |
| let serialized = r#"[1,2,3,[1,3,2]]"#; |
| check(json, serialized); |
| } |
| |
| #[test] |
| fn array_unsorted() { |
| let items = ["c", "a", "b"]; |
| let serialized = r#"["c","a","b"]"#; |
| let items: Vec<OrderedJson> = |
| items.into_iter().map(OrderedJson::serialize).collect::<Result<Vec<_>, _>>().unwrap(); |
| let json = OrderedJson::array_unsorted(items); |
| check(json, serialized); |
| } |