diff options
Diffstat (limited to 'serde_v8/tests')
-rw-r--r-- | serde_v8/tests/de.rs | 66 | ||||
-rw-r--r-- | serde_v8/tests/ser.rs | 6 |
2 files changed, 53 insertions, 19 deletions
diff --git a/serde_v8/tests/de.rs b/serde_v8/tests/de.rs index d08f98d67..1d4dae51a 100644 --- a/serde_v8/tests/de.rs +++ b/serde_v8/tests/de.rs @@ -90,6 +90,7 @@ detest!(de_option_undefined, Option<bool>, "undefined", None); detest!(de_unit_null, (), "null", ()); detest!(de_unit_undefined, (), "undefined", ()); detest!(de_bool, bool, "true", true); +detest!(de_char, char, "'é'", 'é'); detest!(de_u64, u64, "32", 32); detest!(de_string, String, "'Hello'", "Hello".to_owned()); detest!(de_vec_u64, Vec<u64>, "[1,2,3,4,5]", vec![1, 2, 3, 4, 5]); @@ -105,6 +106,12 @@ detest!( "[123, true, null]", (123, true, ()) ); +defail!( + de_tuple_wrong_len, + (u64, bool, ()), + "[123, true, null, 'extra']", + |e| e == Err(Error::LengthMismatch) +); detest!( de_mathop, MathOp, @@ -281,24 +288,30 @@ detest!( de_json_object, serde_json::Value, "({a: 1, b: 'hello', c: true})", - serde_json::Value::Object( - vec![ - ( - "a".to_string(), - serde_json::Value::Number(serde_json::Number::from(1)), - ), - ( - "b".to_string(), - serde_json::Value::String("hello".to_string()), - ), - ("c".to_string(), serde_json::Value::Bool(true),), - ] - .drain(..) - .collect() - ) + serde_json::json!({ + "a": 1, + "b": "hello", + "c": true, + }) +); +detest!( + de_json_object_from_map, + serde_json::Value, + "(new Map([['a', 1], ['b', 'hello'], ['c', true]]))", + serde_json::json!({ + "a": 1, + "b": "hello", + "c": true, + }) +); +// TODO: this is not optimal, ideally we'd get an array of [1,2,3] instead. +// Fixing that will require exposing Set::AsArray in the v8 bindings. +detest!( + de_json_object_from_set, + serde_json::Value, + "(new Set([1, 2, 3]))", + serde_json::json!({}) ); -detest!(de_bigint_u64, u64, "BigInt(2**59)", 1 << 59); -detest!(de_bigint_i64, i64, "BigInt(-(2**59))", -(1 << 59)); defail!(defail_struct, MathOp, "123", |e| e == Err(Error::ExpectedObject)); @@ -323,6 +336,25 @@ detest!(de_bstr, ByteString, "'hello'", "hello".into()); defail!(defail_bstr, ByteString, "'👋bye'", |e| e == Err(Error::ExpectedLatin1)); +#[derive(PartialEq, Debug, Deserialize)] +pub struct StructWithBytes { + #[serde(with = "serde_bytes")] + a: Vec<u8>, + #[serde(with = "serde_bytes")] + b: Vec<u8>, + #[serde(with = "serde_bytes")] + c: Vec<u8>, +} +detest!( + de_struct_with_bytes, + StructWithBytes, + "({ a: new Uint8Array([1, 2]), b: (new Uint8Array([3 , 4])).buffer, c: (new Uint32Array([0])).buffer})", + StructWithBytes { + a: vec![1, 2], + b: vec![3, 4], + c: vec![0, 0, 0, 0], + } +); detest!( de_u16str, U16String, diff --git a/serde_v8/tests/ser.rs b/serde_v8/tests/ser.rs index e292e242d..76a43bdcc 100644 --- a/serde_v8/tests/ser.rs +++ b/serde_v8/tests/ser.rs @@ -104,17 +104,19 @@ macro_rules! sertest_polluted { }; } +sertest!(ser_char, 'é', "x === 'é'"); sertest!(ser_option_some, Some(true), "x === true"); sertest!(ser_option_null, None as Option<bool>, "x === null"); sertest!(ser_unit_null, (), "x === null"); sertest!(ser_bool, true, "x === true"); sertest!(ser_u64, 32, "x === 32"); sertest!(ser_f64, 12345.0, "x === 12345.0"); -sertest!(ser_string, "Hello".to_owned(), "x === 'Hello'"); +sertest!(ser_string, "Hello", "x === 'Hello'"); +sertest!(ser_bytes, b"\x01\x02\x03", "arrEqual(x, [1, 2, 3])"); sertest!(ser_vec_u64, vec![1, 2, 3, 4, 5], "arrEqual(x, [1,2,3,4,5])"); sertest!( ser_vec_string, - vec!["hello".to_owned(), "world".to_owned(),], + vec!["hello", "world"], "arrEqual(x, ['hello', 'world'])" ); sertest!(ser_tuple, (123, true, ()), "arrEqual(x, [123, true, null])"); |