mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-23 02:28:00 +00:00
93 lines
2.6 KiB
Rust
93 lines
2.6 KiB
Rust
// Copyright 2017 Serde Developers
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
// option. This file may not be copied, modified, or distributed
|
|
// except according to those terms.
|
|
|
|
use serde::{Serialize, Deserialize};
|
|
|
|
use de::Deserializer;
|
|
use error::Error;
|
|
use ser::Serializer;
|
|
use token::Token;
|
|
|
|
use std::fmt::Debug;
|
|
|
|
/// Runs both `assert_ser_tokens` and `assert_de_tokens`.
|
|
pub fn assert_tokens<'de, T>(value: &T, tokens: &'de [Token])
|
|
where
|
|
T: Serialize + Deserialize<'de> + PartialEq + Debug,
|
|
{
|
|
assert_ser_tokens(value, tokens);
|
|
assert_de_tokens(value, tokens);
|
|
}
|
|
|
|
/// Asserts that `value` serializes to the given `tokens`.
|
|
pub fn assert_ser_tokens<T>(value: &T, tokens: &[Token])
|
|
where
|
|
T: Serialize,
|
|
{
|
|
let mut ser = Serializer::new(tokens);
|
|
match value.serialize(&mut ser) {
|
|
Ok(_) => {}
|
|
Err(err) => panic!("value failed to serialize: {}", err),
|
|
}
|
|
|
|
if ser.remaining() > 0 {
|
|
panic!("{} remaining tokens", ser.remaining());
|
|
}
|
|
}
|
|
|
|
/// Asserts that `value` serializes to the given `tokens`, and then yields `error`.
|
|
pub fn assert_ser_tokens_error<T>(value: &T, tokens: &[Token], expected: Error)
|
|
where
|
|
T: Serialize,
|
|
{
|
|
let mut ser = Serializer::new(tokens);
|
|
match value.serialize(&mut ser) {
|
|
Ok(_) => panic!("value serialized successfully"),
|
|
Err(err) => assert_eq!(err, expected),
|
|
}
|
|
|
|
if ser.remaining() > 0 {
|
|
panic!("{} remaining tokens", ser.remaining());
|
|
}
|
|
}
|
|
|
|
/// Asserts that the given `tokens` deserialize into `value`.
|
|
pub fn assert_de_tokens<'de, T>(value: &T, tokens: &'de [Token])
|
|
where
|
|
T: Deserialize<'de> + PartialEq + Debug,
|
|
{
|
|
let mut de = Deserializer::new(tokens);
|
|
match T::deserialize(&mut de) {
|
|
Ok(v) => assert_eq!(v, *value),
|
|
Err(err) => panic!("tokens failed to deserialize: {}", err),
|
|
}
|
|
|
|
if de.remaining() > 0 {
|
|
panic!("{} remaining tokens", de.remaining());
|
|
}
|
|
}
|
|
|
|
/// Asserts that the given `tokens` yield `expected` error when deserializing.
|
|
pub fn assert_de_tokens_error<'de, T>(tokens: &'de [Token], expected: Error)
|
|
where
|
|
T: Deserialize<'de>,
|
|
{
|
|
let mut de = Deserializer::new(tokens);
|
|
match T::deserialize(&mut de) {
|
|
Ok(_) => panic!("tokens deserialized successfully"),
|
|
Err(err) => assert_eq!(err, expected),
|
|
}
|
|
|
|
// There may be one token left if a peek caused the error
|
|
de.next_token();
|
|
|
|
if de.remaining() > 0 {
|
|
panic!("{} remaining tokens", de.remaining());
|
|
}
|
|
}
|