use quick_protobuf::*;
use super::basic::*;
use crate::rust_protobuf::hex::{decode_hex, encode_hex};
#[test]
fn test1() {
let mut test1 = Test1::default();
test1.a = 150;
test_serialize_deserialize!("08 96 01", &test1, Test1);
}
#[test]
fn test2() {
let mut test2 = Test2::default();
test2.b = "testing".into();
test_serialize_deserialize!("12 07 74 65 73 74 69 6e 67", &test2, Test2);
}
#[test]
fn test3() {
let mut test1 = Test1::default();
test1.a = 150;
let mut test3 = Test3::default();
test3.c = Some(test1);
test_serialize_deserialize!("1a 03 08 96 01", &test3, Test3);
}
#[test]
fn test4() {
let mut test4 = Test4::default();
test4.d = vec![3i32, 270, 86942];
test_serialize_deserialize!("22 06 03 8E 02 9E A7 05", &test4, Test4);
}
#[test]
fn test_read_unpacked_expect_packed() {
let mut test_packed_unpacked = TestPackedUnpacked::default();
test_packed_unpacked.packed = Vec::new();
test_packed_unpacked.unpacked = vec![17i32, 1000];
test_deserialize!("20 11 20 e8 07", &test_packed_unpacked, TestPackedUnpacked);
}
#[test]
fn test_read_packed_expect_unpacked() {
let mut test_packed_unpacked = TestPackedUnpacked::default();
test_packed_unpacked.packed = vec![17i32, 1000];
test_packed_unpacked.unpacked = Vec::new();
test_deserialize!("2a 03 11 e8 07", &test_packed_unpacked, TestPackedUnpacked);
test_serialize_deserialize_length_delimited!(&test_packed_unpacked, TestPackedUnpacked);
}
#[test]
fn test_empty() {
test_serialize_deserialize!("", &TestEmpty::default(), TestEmpty);
}
#[test]
#[should_panic]
fn test_read_junk() {
let bytes = decode_hex("00");
let mut reader = BytesReader::from_bytes(&bytes);
Test1::from_reader(&mut reader, &bytes).unwrap();
}
#[test]
fn test_types_singular() {
let mut message = TestTypesSingular::default();
message.double_field = 19f64;
message.float_field = 20f32;
message.int32_field = 21;
message.int64_field = -22;
message.uint32_field = 23;
message.uint64_field = 24;
message.sint32_field = -25;
message.sint64_field = 26;
message.fixed32_field = 27;
message.fixed64_field = 28;
message.sfixed32_field = -29;
message.sfixed64_field = 30;
message.bool_field = true;
message.string_field = "thirty two".into();
message.bytes_field = vec![33u8, 34].into();
message.enum_field = TestEnumDescriptor::BLUE;
test_serialize_deserialize_length_delimited!(&message, TestTypesSingular);
}
#[test]
fn test_types_repeated() {
let mut message = TestTypesRepeated::default();
message.double_field = vec![19f64, 20f64];
message.float_field = vec![20f32];
message.int32_field = vec![21i32, -22, 23];
message.int64_field = vec![22i64];
message.uint32_field = vec![23u32, 24];
message.uint64_field = vec![24u64];
message.sint32_field = vec![25i32];
message.sint64_field = vec![26i64, -27];
message.fixed32_field = vec![27u32];
message.fixed64_field = vec![28u64];
message.sfixed32_field = vec![29i32, -30];
message.sfixed64_field = vec![30i64];
message.bool_field = vec![true, true];
message.string_field = vec!["thirty two".into(), "thirty three".into()];
message.bytes_field = vec![vec![33u8, 34].into(), vec![35u8].into()];
message.enum_field = vec![TestEnumDescriptor::BLUE, TestEnumDescriptor::GREEN];
test_serialize_deserialize_length_delimited!(&message, TestTypesRepeated);
}
#[test]
fn test_types_repeated_packed() {
let mut message = TestTypesRepeatedPacked::default();
message.double_field = vec![19f64, 20f64].into();
message.float_field = vec![20f32].into();
message.int32_field = vec![21i32, -22, 23];
message.int64_field = vec![22i64];
message.uint32_field = vec![23u32, 24];
message.uint64_field = vec![24u64];
message.sint32_field = vec![25i32];
message.sint64_field = vec![26i64, -27];
message.fixed32_field = vec![27u32].into();
message.fixed64_field = vec![28u64].into();
message.sfixed32_field = vec![29i32, -30].into();
message.sfixed64_field = vec![30i64].into();
message.bool_field = vec![true, true];
message.string_field = vec!["thirty two".into(), "thirty three".into()];
message.bytes_field = vec![vec![33u8, 34].into(), vec![35u8].into()];
message.enum_field = vec![TestEnumDescriptor::BLUE, TestEnumDescriptor::GREEN];
test_serialize_deserialize_length_delimited!(&message, TestTypesRepeatedPacked);
}
#[test]
fn test_default_instance() {
let d = TestDefaultInstance::default();
assert_eq!(None, d.field.and_then(|f| Some(f.s)));
}
#[test]
fn test_truncated_no_varint() {
let bytes = decode_hex("08");
let mut reader = BytesReader::from_bytes(&bytes);
assert!(TestTruncated::from_reader(&mut reader, &bytes).is_err());
}
#[test]
fn test_truncated_middle_of_varint() {
let bytes = decode_hex("08 96");
let mut reader = BytesReader::from_bytes(&bytes);
assert!(TestTruncated::from_reader(&mut reader, &bytes).is_err());
}
#[test]
fn test_truncated_middle_of_length_delimited() {
let bytes = decode_hex("0a 03 10");
let mut reader = BytesReader::from_bytes(&bytes);
assert!(TestTruncated::from_reader(&mut reader, &bytes).is_err());
}
#[test]
fn test_truncated_repeated_packed() {
let bytes = decode_hex("12 04 10 20");
let mut reader = BytesReader::from_bytes(&bytes);
assert!(TestTruncated::from_reader(&mut reader, &bytes).is_err());
}
#[test]
fn test_bug_sint() {
{
let mut x = TestBugSint::default();
x.s32 = -1;
test_serialize_deserialize!("08 01", &x, TestBugSint);
}
{
let mut x = TestBugSint::default();
x.s64 = -2;
test_serialize_deserialize!("10 03", &x, TestBugSint);
}
}