Browse Source

Fix generator issue with second enum in single .proto file

- Update tests
Alexey Edelev 5 years ago
parent
commit
523f8cf736

+ 2 - 7
src/generator/globalenumsgenerator.cpp

@@ -86,15 +86,10 @@ void GlobalEnumsGenerator::printMetatype(const google::protobuf::FileDescriptor
         }
         fullNamespace.append("::").append(name);
     }
-    std::string fullClassname;
+    fullNamespace.append("::").append(Templates::GlobalEnumClassNameTemplate);
     for (int i = 0; i < file->enum_type_count(); i++) {
         const auto enumDescr = file->enum_type(i);
-        if (!enumDescr->name().empty()) {
-            fullClassname.append(Templates::GlobalEnumClassNameTemplate).append("::").append(enumDescr->name());
-        }
-    }
-    if (!fullClassname.empty()) {
-        mPrinter.Print({{"classname", fullClassname}, {"namespaces", fullNamespace}},
+        mPrinter.Print({{"classname", enumDescr->name()}, {"namespaces", fullNamespace}},
                        Templates::DeclareMetaTypeListTemplate);
     }
 }

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

@@ -541,6 +541,12 @@ enum TestEnum {
     TEST_ENUM_VALUE4 = 3;
 }
 
+enum TestEnumSecondInFile {
+    TEST_ENUM_SIF_VALUE0 = 0;
+    TEST_ENUM_SIF_VALUE1 = 1;
+    TEST_ENUM_SIF_VALUE2 = 2;
+}
+
 message FieldIndexTest1Message {
     sint32 testField = 31;
 }

+ 31 - 14
tests/test_protobuf/simpletest.cpp

@@ -313,27 +313,44 @@ TEST_F(SimpleTest, SimpleExternalEnumMessageTest)
 
 TEST_F(SimpleTest, SimpleEnumsTest)
 {
-    ASSERT_GT(GlobalEnums::staticMetaObject.enumeratorCount(), 0);
-    QMetaEnum simpleEnum;
+    EXPECT_GT(GlobalEnums::staticMetaObject.enumeratorCount(), 0);
+    QMetaEnum testEnum;
     for (int i = 0; i < GlobalEnums::staticMetaObject.enumeratorCount(); i++) {
         QMetaEnum tmp = GlobalEnums::staticMetaObject.enumerator(i);
         if (QString(tmp.name()) == QString("TestEnum")) {
-            simpleEnum = tmp;
+            testEnum = tmp;
             break;
         }
     }
-    ASSERT_TRUE(simpleEnum.isValid());
-    ASSERT_STREQ(simpleEnum.key(0), "TEST_ENUM_VALUE0");
-    ASSERT_STREQ(simpleEnum.key(1), "TEST_ENUM_VALUE1");
-    ASSERT_STREQ(simpleEnum.key(2), "TEST_ENUM_VALUE2");
-    ASSERT_STREQ(simpleEnum.key(3), "TEST_ENUM_VALUE3");
-    ASSERT_STREQ(simpleEnum.key(4), "TEST_ENUM_VALUE4");
+    ASSERT_TRUE(testEnum.isValid());
+    ASSERT_STREQ(testEnum.key(0), "TEST_ENUM_VALUE0");
+    ASSERT_STREQ(testEnum.key(1), "TEST_ENUM_VALUE1");
+    ASSERT_STREQ(testEnum.key(2), "TEST_ENUM_VALUE2");
+    ASSERT_STREQ(testEnum.key(3), "TEST_ENUM_VALUE3");
+    ASSERT_STREQ(testEnum.key(4), "TEST_ENUM_VALUE4");
+
+    ASSERT_EQ(testEnum.value(0), 0);
+    ASSERT_EQ(testEnum.value(1), 1);
+    ASSERT_EQ(testEnum.value(2), 2);
+    ASSERT_EQ(testEnum.value(3), 4);
+    ASSERT_EQ(testEnum.value(4), 3);
 
-    ASSERT_EQ(simpleEnum.value(0), 0);
-    ASSERT_EQ(simpleEnum.value(1), 1);
-    ASSERT_EQ(simpleEnum.value(2), 2);
-    ASSERT_EQ(simpleEnum.value(3), 4);
-    ASSERT_EQ(simpleEnum.value(4), 3);
+    for (int i = 0; i < GlobalEnums::staticMetaObject.enumeratorCount(); i++) {
+        QMetaEnum tmp = GlobalEnums::staticMetaObject.enumerator(i);
+        if (QString(tmp.name()) == QString("TestEnumSecondInFile")) {
+            testEnum = tmp;
+            break;
+        }
+    }
+
+    ASSERT_TRUE(testEnum.isValid());
+    ASSERT_STREQ(testEnum.key(0), "TEST_ENUM_SIF_VALUE0");
+    ASSERT_STREQ(testEnum.key(1), "TEST_ENUM_SIF_VALUE1");
+    ASSERT_STREQ(testEnum.key(2), "TEST_ENUM_SIF_VALUE2");
+
+    ASSERT_EQ(testEnum.value(0), 0);
+    ASSERT_EQ(testEnum.value(1), 1);
+    ASSERT_EQ(testEnum.value(2), 2);
 }
 
 TEST_F(SimpleTest, SimpleFileEnumsTest)