1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
use googletest::prelude::*;
use protobuf::prelude::*;
use unittest_rust_proto::{NestedTestAllTypes, TestAllTypes};
#[gtest]
fn copy_from() {
let mut dst = TestAllTypes::new();
let mut src = TestAllTypes::new();
dst.copy_from(src.as_view());
assert_that!(dst.has_optional_int32(), eq(false));
src.set_optional_int32(42);
assert_that!(src.has_optional_int32(), eq(true));
assert_that!(dst.has_optional_int32(), eq(false)); // Not aliased.
dst.copy_from(src);
assert_that!(dst.has_optional_int32(), eq(true));
}
#[gtest]
fn take_from() {
let mut dst = TestAllTypes::new();
let mut src = TestAllTypes::new();
src.set_optional_int32(42);
src.optional_nested_message_mut().set_bb(10);
dst.take_from(src.as_mut());
assert_that!(src.has_optional_int32(), eq(false)); // Take_from clears the original message.
assert_that!(src.optional_nested_message().bb(), eq(0));
assert_that!(dst.has_optional_int32(), eq(true));
assert_that!(dst.optional_nested_message().bb(), eq(10));
dst.take_from(src); // Consuming take_from of an empty thing.
assert_that!(dst.has_optional_int32(), eq(false));
}
#[gtest]
fn take_from_submsg() {
let mut dst = NestedTestAllTypes::new();
let mut src = NestedTestAllTypes::new();
src.child_mut().child_mut().payload_mut().set_optional_int32(42);
dst.child_mut().take_from(src.child_mut());
// The src's submessage is empty but its presence on parent is not affected.
assert_that!(src.has_child(), eq(true));
assert_that!(src.child().has_child(), eq(false));
assert_that!(dst.child().child().payload().optional_int32(), eq(42));
}
#[gtest]
fn merge_from_empty() {
let mut dst = TestAllTypes::new();
let src = TestAllTypes::new();
dst.merge_from(src.as_view());
assert_that!(dst.has_optional_int32(), eq(false));
}
#[gtest]
fn merge_from_non_empty() {
let mut dst = TestAllTypes::new();
let src = proto!(TestAllTypes { optional_int32: 42 });
dst.as_mut().merge_from(src.as_view());
assert_eq!(dst.optional_int32(), 42);
}
#[gtest]
fn merge_repeated_empty() {
let mut dst = TestAllTypes::new();
let mut src = TestAllTypes::new();
src.repeated_int32_mut().extend(0..5);
dst.merge_from(src.as_view());
assert_that!(
&dst.repeated_int32().iter().collect::<Vec<_>>(),
eq(&src.repeated_int32().iter().collect::<Vec<_>>())
);
}
#[gtest]
fn merge_repeated_non_empty() {
let mut dst = TestAllTypes::new();
let mut src = TestAllTypes::new();
dst.repeated_int32_mut().extend(0..5);
src.repeated_int32_mut().extend(5..10);
dst.merge_from(src.as_view());
assert_that!(
&dst.repeated_int32().iter().collect::<Vec<_>>(),
eq(&(0..10).collect::<Vec<_>>())
);
}
#[gtest]
fn merge_from_sub_message() {
let mut dst = NestedTestAllTypes::new();
let src = proto!(NestedTestAllTypes {
child: NestedTestAllTypes { payload: TestAllTypes { optional_int32: 42 } }
});
dst.merge_from(src.as_view());
assert_that!(dst.child().payload().optional_int32(), eq(42));
}
|