瀏覽代碼

Overriding a field during deserialization and handling an desrialization failure for oneofs.

Bart Hertog 5 年之前
父節點
當前提交
ccbef899ae
共有 1 個文件被更改,包括 40 次插入0 次删除
  1. 40 0
      test/test_oneof_fields.cpp

+ 40 - 0
test/test_oneof_fields.cpp

@@ -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;