Move ENUMTYPE together with other enum defines & add test (#803)
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index 77036b2..fc4f93d 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -1437,6 +1437,12 @@
                         Globals.naming_style.type_name(field.ctype)
                     )
 
+        return result
+
+    def enumtype_defines(self):
+        '''Defines to allow user code to refer to enum type of a specific field'''
+        result = ''
+        for field in self.all_fields():
             if field.pbtype in ['ENUM', "UENUM"]:
                 if field.rules == 'ONEOF':
                     result += "#define %s_%s_%s_ENUMTYPE %s\n" % (
@@ -1913,6 +1919,9 @@
                 yield '/* Helper constants for enums */\n'
                 for enum in self.enums:
                     yield enum.auxiliary_defines() + '\n'
+
+                for msg in self.messages:
+                    yield msg.enumtype_defines() + '\n'
                 yield '\n'
 
         yield '#ifdef __cplusplus\n'
diff --git a/tests/enum_mapping/SConscript b/tests/enum_mapping/SConscript
new file mode 100644
index 0000000..92c7eb5
--- /dev/null
+++ b/tests/enum_mapping/SConscript
@@ -0,0 +1,8 @@
+# Test generated ENUMTYPE defines
+
+Import('env')
+
+env.NanopbProto('enum_mapping')
+env.Object("enum_mapping.pb.c")
+env.Match(["enum_mapping.pb.h", "enum_mapping.expected"])
+
diff --git a/tests/enum_mapping/enum_mapping.expected b/tests/enum_mapping/enum_mapping.expected
new file mode 100644
index 0000000..fd19de7
--- /dev/null
+++ b/tests/enum_mapping/enum_mapping.expected
@@ -0,0 +1,3 @@
+define TestMsg_test1_ENUMTYPE TestEnum1
+define TestMsg_oneof1_test2_ENUMTYPE TestEnum2
+
diff --git a/tests/enum_mapping/enum_mapping.proto b/tests/enum_mapping/enum_mapping.proto
new file mode 100644
index 0000000..0e26096
--- /dev/null
+++ b/tests/enum_mapping/enum_mapping.proto
@@ -0,0 +1,26 @@
+syntax = "proto3";
+
+enum TestEnum1
+{
+    A = 0;
+    B = 2;
+    C = -3;
+}
+
+enum TestEnum2
+{
+    X = 0;
+    Y = 5;
+}
+
+message TestMsg
+{
+    TestEnum1 test1 = 1;
+    
+    oneof oneof1
+    {
+        TestEnum2 test2 = 2;
+    }
+}
+
+