فهرست منبع

Implement enum deserialization

- Add tests
Alexey Edelev 6 سال پیش
والد
کامیت
812be64d29
2فایلهای تغییر یافته به همراه14 افزوده شده و 2 حذف شده
  1. 6 2
      src/protobuf/protobufobject.cpp
  2. 8 0
      tests/deserializationtest.cpp

+ 6 - 2
src/protobuf/protobufobject.cpp

@@ -301,8 +301,12 @@ void ProtobufObjectPrivate::deserializeProperty(WireTypes wireType, const QMetaP
         newPropertyValue = deserializeLengthDelimited(it);
         break;
     case QMetaType::User:
-        newPropertyValue = metaProperty.read(this);
-        deserializeUserType(metaProperty, it, newPropertyValue);
+        if (metaProperty.isEnumType()) {
+            newPropertyValue = deserializeVarint<int32>(it);
+        } else {
+            newPropertyValue = metaProperty.read(this);
+            deserializeUserType(metaProperty, it, newPropertyValue);
+        }
         break;
     case QMetaType::QByteArrayList: {
         QByteArrayList currentValue = metaProperty.read(this).value<QByteArrayList>();

+ 8 - 0
tests/deserializationtest.cpp

@@ -51,6 +51,7 @@
 #include "repeatedsfixedintmessage.h"
 #include "repeatedfixedint64message.h"
 #include "repeatedsfixedint64message.h"
+#include "simpleenummessage.h"
 #include "repeatedcomplexmessage.h"
 
 using namespace qtprotobufnamespace::tests;
@@ -618,3 +619,10 @@ TEST_F(DeserializationTest, BoolDeserializeTest)
     test.deserialize(QByteArray::fromHex("0800"));
     ASSERT_EQ(test.testFieldBool(), false);
 }
+
+TEST_F(DeserializationTest, SimpleEnumMessageDeserializeTest)
+{
+    SimpleEnumMessage test;
+    test.deserialize(QByteArray::fromHex("0803"));
+    ASSERT_EQ(test.localEnum(), SimpleEnumMessage::LOCAL_ENUM_VALUE3);
+}