Browse Source

Change global enums inheritance

- Make GlobalEnums derived of plain QObject
- Add simple enum test
- Implement simple unit test for GlobalEnums
Alexey Edelev 6 years ago
parent
commit
361b259b55

+ 5 - 1
src/generator/generator.cpp

@@ -146,11 +146,15 @@ public:
     void run() {
         printPreamble();
         printNamespaces(mFile->package());
-        printClass();
+        printEnumClass();
         printQEnums<FileDescriptor>(mFile);
         encloseClass();
         enclose();
     }
+
+    void printEnumClass() {
+        mPrinter.Print({{"classname", mClassName}}, NonProtoClassDefinitionTemplate);
+    }
 };
 
 bool QtGenerator::Generate(const FileDescriptor *file,

+ 3 - 0
src/generator/templates.h

@@ -43,6 +43,9 @@ static const char *ListModelsIncludeTemplate = "#include <QList>\n";
 
 static const char *NamespaceTemplate = "\nnamespace $namespace$ {\n";
 
+static const char *NonProtoClassDefinitionTemplate = "\nclass $classname$ : public QObject\n"
+                      "{\n"
+                      "    Q_OBJECT\n";
 static const char *ClassDefinitionTemplate = "\nclass $classname$ : public ProtobufObject<$classname$>\n"
                       "{\n"
                       "    Q_OBJECT\n";

+ 4 - 6
src/lib/protobufobject.h

@@ -48,8 +48,7 @@ enum WireTypes {
 class ProtobufObjectPrivate : public QObject {
 protected:
     explicit ProtobufObjectPrivate(QObject *parent = nullptr) : QObject(parent) {}
-//TODO: required for recurse serialization
-//    virtual QByteArray serializePrivate() = 0;
+    virtual QByteArray serializePrivate() = 0;
 };
 
 template <typename T>
@@ -58,10 +57,9 @@ class ProtobufObject : public ProtobufObjectPrivate
 public:
     explicit ProtobufObject(QObject *parent = nullptr) : ProtobufObjectPrivate(parent) {}
 
-//TODO: required for recurse serialization
-//    QByteArray serializePrivate() override {
-//        serialize();
-//    }
+    QByteArray serializePrivate() override {
+        serialize();
+    }
 
     QByteArray serialize() {
         QByteArray result;

+ 8 - 0
tests/proto/simpletest.proto

@@ -17,3 +17,11 @@ message SimpleFloatMessage {
 message SimpleDoubleMessage {
     double testFieldDouble = 8;
 }
+
+enum TestEnum {
+    TEST_ENUM_VALUE0 = 0;
+    TEST_ENUM_VALUE1 = 1;
+    TEST_ENUM_VALUE2 = 2;
+    TEST_ENUM_VALUE3 = 4;
+    TEST_ENUM_VALUE4 = 3;
+}

+ 18 - 0
tests/simpletest.cpp

@@ -29,6 +29,7 @@
 #include "simplestringmessage.h"
 #include "simplefloatmessage.h"
 #include "simpledoublemessage.h"
+#include "globalenums.h"
 #include <QMetaProperty>
 
 using namespace qtprotobuf::tests;
@@ -81,3 +82,20 @@ TEST_F(SimpleTest, SimpleDoubleMessageTest)
     ASSERT_TRUE(test.setProperty(propertyName, QVariant::fromValue<double>(0.55)));
     ASSERT_FLOAT_EQ(test.property(propertyName).toDouble(), 0.55);
 }
+
+TEST_F(SimpleTest, SimpleEnumsTest)
+{
+    ASSERT_GT(GlobalEnums::staticMetaObject.enumeratorCount(), 0);
+    QMetaEnum simpleEnum = GlobalEnums::staticMetaObject.enumerator(0);
+    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_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);
+}