From fb62135f86bd8e8656f1c8800831a85432173b98 Mon Sep 17 00:00:00 2001 From: trivernis Date: Sun, 5 Dec 2021 17:21:54 +0100 Subject: [PATCH] Add tests for all payloads Signed-off-by: trivernis --- src/events/payload.rs | 12 ++++++ tests/test_serialization.rs | 76 +++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 tests/test_serialization.rs diff --git a/src/events/payload.rs b/src/events/payload.rs index a663f5d3..77bc6d65 100644 --- a/src/events/payload.rs +++ b/src/events/payload.rs @@ -146,6 +146,18 @@ mod serde_payload { } } + impl Clone for SerdePayload + where + T: Clone, + { + fn clone(&self) -> Self { + Self { + serializer: self.serializer.clone(), + data: self.data.clone(), + } + } + } + impl EventSendPayload for SerdePayload where T: Serialize, diff --git a/tests/test_serialization.rs b/tests/test_serialization.rs new file mode 100644 index 00000000..bdf264ac --- /dev/null +++ b/tests/test_serialization.rs @@ -0,0 +1,76 @@ +use bromine::prelude::*; + +#[cfg(feature = "serialize_rmp")] +#[test] +fn it_serializes_messagepack() { + test_serialization(DynamicSerializer::Messagepack) +} + +#[cfg(feature = "serialize_bincode")] +#[test] +fn it_serializes_bincode() { + test_serialization(DynamicSerializer::Bincode) +} + +#[cfg(feature = "serialize_postcard")] +#[test] +fn it_serializes_postcard() { + test_serialization(DynamicSerializer::Postcard) +} + +#[cfg(feature = "serialize_json")] +#[test] +fn it_serializes_json() { + test_serialization(DynamicSerializer::Json) +} + +#[cfg(feature = "serialize")] +fn test_serialization(serializer: DynamicSerializer) { + let test_payload = get_test_payload(serializer); + let payload_bytes = test_payload.clone().to_payload_bytes().unwrap(); + let payload = TestSerdePayload::from_payload_bytes(&payload_bytes[..]).unwrap(); + assert_eq!(payload.data(), test_payload.data()) +} + +#[cfg(feature = "serialize")] +pub mod payload { + use bromine::payload::{DynamicSerializer, SerdePayload}; + use serde::{Deserialize, Serialize}; + use std::collections::HashMap; + + pub type TestSerdePayload = SerdePayload; + + #[derive(Clone, Serialize, Deserialize, Eq, PartialEq, Debug)] + pub struct TestPayload { + items: Vec, + variant: TestPayloadEnum, + string: String, + signed: i32, + maps: HashMap, + } + + #[derive(Clone, Serialize, Deserialize, Eq, PartialEq, Debug)] + pub enum TestPayloadEnum { + First, + Second, + Third(usize), + } + + pub fn get_test_payload(serializer: DynamicSerializer) -> SerdePayload { + let mut maps = HashMap::new(); + maps.insert("Hello".to_string(), 12); + + maps.insert("Wäüörld".to_string(), -12380); + let inner_payload = TestPayload { + items: vec![0u128, 12452u128, u128::MAX], + variant: TestPayloadEnum::Third(12), + string: String::from("Hello World ſð"), + signed: -12, + maps, + }; + + SerdePayload::new(serializer, inner_payload) + } +} +#[cfg(feature = "serialize")] +pub use payload::*;