|
|
@@ -171,6 +171,46 @@ TEST(OneofField, deserialize)
|
|
|
EXPECT_EQ(1, msg.get_y());
|
|
|
}
|
|
|
|
|
|
+TEST(OneofField, deserialize_override)
|
|
|
+{
|
|
|
+ InSequence s;
|
|
|
+
|
|
|
+ message_oneof msg;
|
|
|
+ Mocks::ReadBufferMock buffer;
|
|
|
+
|
|
|
+ uint8_t referee[] = {0x08, 0x01, // a
|
|
|
+ 0x50, 0x01, // b
|
|
|
+ 0x30, 0x01, // y
|
|
|
+ 0x28, 0x01}; // x
|
|
|
+
|
|
|
+ for(auto r: referee) {
|
|
|
+ EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(r), Return(true)));
|
|
|
+ }
|
|
|
+ EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(Return(false));
|
|
|
+
|
|
|
+ EXPECT_TRUE(msg.deserialize(buffer));
|
|
|
+
|
|
|
+ EXPECT_EQ(1, msg.get_a());
|
|
|
+ EXPECT_EQ(1, msg.get_b());
|
|
|
+ EXPECT_EQ(message_oneof::id::X, msg.get_which_xyz());
|
|
|
+ EXPECT_EQ(1, msg.get_x());
|
|
|
+}
|
|
|
+
|
|
|
+TEST(OneofField, deserialize_failure)
|
|
|
+{
|
|
|
+ InSequence s;
|
|
|
+
|
|
|
+ message_oneof msg;
|
|
|
+ Mocks::ReadBufferMock buffer;
|
|
|
+
|
|
|
+ EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x30), Return(true))); // y
|
|
|
+ EXPECT_CALL(buffer, pop(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(0x01), Return(false))); // This simulates the fialure.
|
|
|
+
|
|
|
+ EXPECT_FALSE(msg.deserialize(buffer));
|
|
|
+ EXPECT_EQ(message_oneof::id::NOT_SET, msg.get_which_xyz());
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
TEST(OneofField, deserialize_second_oneof)
|
|
|
{
|
|
|
InSequence s;
|