diff --git a/test_suite/tests/test_de.rs b/test_suite/tests/test_de.rs index 3a8fcc448b..a7eedba3ff 100644 --- a/test_suite/tests/test_de.rs +++ b/test_suite/tests/test_de.rs @@ -17,15 +17,15 @@ use std::ffi::{CString, OsString}; use std::net; use std::num::Wrapping; use std::path::{Path, PathBuf}; -use std::rc::Rc; -use std::sync::Arc; +use std::rc::{Rc, Weak as RcWeak}; +use std::sync::{Arc, Weak as ArcWeak}; use std::time::{Duration, UNIX_EPOCH}; #[cfg(feature = "unstable")] use std::ffi::CStr; extern crate serde; -use serde::Deserialize; +use serde::{Deserialize, Deserializer}; extern crate fnv; use self::fnv::FnvHasher; @@ -182,6 +182,27 @@ macro_rules! declare_error_tests { } } +#[derive(Debug)] +struct SkipPartialEq(T); + +impl<'de, T> Deserialize<'de> for SkipPartialEq +where + T: Deserialize<'de>, +{ + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + T::deserialize(deserializer).map(SkipPartialEq) + } +} + +impl PartialEq for SkipPartialEq { + fn eq(&self, _other: &Self) -> bool { + true + } +} + fn assert_de_tokens_ignore(ignorable_tokens: &[Token]) { #[derive(PartialEq, Debug, Deserialize)] struct IgnoreBase { @@ -788,11 +809,33 @@ declare_tests! { Token::Bool(true), ], } + test_rc_weak_some { + SkipPartialEq(RcWeak::::new()) => &[ + Token::Some, + Token::Bool(true), + ], + } + test_rc_weak_none { + SkipPartialEq(RcWeak::::new()) => &[ + Token::None, + ], + } test_arc { Arc::new(true) => &[ Token::Bool(true), ], } + test_arc_weak_some { + SkipPartialEq(ArcWeak::::new()) => &[ + Token::Some, + Token::Bool(true), + ], + } + test_arc_weak_none { + SkipPartialEq(ArcWeak::::new()) => &[ + Token::None, + ], + } test_wrapping { Wrapping(1usize) => &[ Token::U32(1),