Skip to content

Commit 7ce1171

Browse files
committed
test: tuple variants reject extra elements from text and every Value
1 parent 701fcf1 commit 7ce1171

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

‎src/tests/serde.rs‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,3 +1371,36 @@ fn fixed_length_sequences_reject_extra_elements() {
13711371
let mut d = b"[1]".to_vec();
13721372
assert!(from_slice::<(u8, u8)>(&mut d).is_err());
13731373
}
1374+
1375+
#[test]
1376+
fn tuple_variants_reject_extra_elements() {
1377+
// A tuple variant's array is a fixed-length sequence too, from text and from every Value.
1378+
use crate::serde::{
1379+
from_borrowed_value, from_owned_value, from_refborrowed_value, from_refowned_value,
1380+
};
1381+
#[derive(Deserialize, Debug, PartialEq)]
1382+
enum Enm {
1383+
Var(u8, u8),
1384+
}
1385+
let mut d = br#"{"Var":[1,2,3]}"#.to_vec();
1386+
assert!(from_slice::<Enm>(&mut d).is_err());
1387+
let mut d = br#"[{"Var":[1,2,3]},{"Var":[4,5]}]"#.to_vec();
1388+
assert!(from_slice::<Vec<Enm>>(&mut d).is_err());
1389+
1390+
let mut d = br#"{"Var":[1,2,3]}"#.to_vec();
1391+
let o = to_owned_value(&mut d).expect("valid");
1392+
let mut d2 = br#"{"Var":[1,2,3]}"#.to_vec();
1393+
let b = to_borrowed_value(&mut d2).expect("valid");
1394+
assert!(from_owned_value::<Enm>(o.clone()).is_err());
1395+
assert!(from_refowned_value::<Enm>(&o).is_err());
1396+
assert!(from_borrowed_value::<Enm>(b.clone()).is_err());
1397+
assert!(from_refborrowed_value::<Enm>(&b).is_err());
1398+
1399+
// exact length is unchanged
1400+
let mut d = br#"{"Var":[1,2]}"#.to_vec();
1401+
assert_eq!(from_slice::<Enm>(&mut d).ok(), Some(Enm::Var(1, 2)));
1402+
let mut d = br#"{"Var":[1,2]}"#.to_vec();
1403+
let o = to_owned_value(&mut d).expect("valid");
1404+
assert_eq!(from_refowned_value::<Enm>(&o).ok(), Some(Enm::Var(1, 2)));
1405+
assert_eq!(from_owned_value::<Enm>(o).ok(), Some(Enm::Var(1, 2)));
1406+
}

0 commit comments

Comments
 (0)