Browse Source

Fix issue #115

- Add default return true for operator=() of empty message
Alexey Edelev 5 years ago
parent
commit
26521b25f8

+ 3 - 0
src/generator/protobufclassgenerator.cpp

@@ -123,6 +123,9 @@ void ProtobufClassGenerator::printComparisonOperators()
     bool isFirst = true;
     PropertyMap properties;
     mPrinter.Print({{"type", mClassName}}, Templates::EqualOperatorTemplate);
+    if (mMessage->field_count() <= 0) {
+        mPrinter.Print("true");
+    }
     for (int i = 0; i < mMessage->field_count(); i++) {
         const FieldDescriptor* field = mMessage->field(i);
         if (producePropertyMap(field, properties)) {

+ 1 - 0
tests/test_protobuf/CMakeLists.txt

@@ -129,6 +129,7 @@ set(GENERATED_HEADERS
     simpleuint64uint64mapmessage.h
     simpleuintmessage.h
     stepchildenummessage.h
+    emptymessage.h
 )
 
 file(GLOB SOURCES

+ 3 - 0
tests/test_protobuf/proto/simpletest.proto

@@ -4,6 +4,9 @@ import "externalpackagetest.proto";
 
 package qtprotobufnamespace.tests;
 
+message EmptyMessage {
+}
+
 message SimpleEnumMessage {
   enum LocalEnum {
     LOCAL_ENUM_VALUE0 = 0;

+ 8 - 0
tests/test_protobuf/simpletest.cpp

@@ -65,6 +65,7 @@
 #include "repeatedexternalcomplexmessage.h"
 #include "simplesint32stringmapmessage.h"
 #include "simplestringstringmapmessage.h"
+#include "emptymessage.h"
 
 #include "globalenums.h"
 #include "qtprotobuf.h"
@@ -767,3 +768,10 @@ TEST_F(SimpleTest, SimpleStringStringMapMessageTest)
     test.mapField()["key 66"] = "Some default";
     ASSERT_STREQ(test.mapField()["key 66"].toStdString().c_str(), "Some default");
 }
+
+TEST_F(SimpleTest, EmptyMessageTest)
+{
+    EmptyMessage::registerTypes();
+    ASSERT_EQ(0, EmptyMessage::propertyOrdering.size());
+    ASSERT_EQ(1, EmptyMessage::staticMetaObject.propertyCount());
+}