Fix problem with .options file and extension fields.
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>
Sun, 20 Jul 2014 11:02:56 +0000 (14:02 +0300)
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>
Sun, 20 Jul 2014 11:02:56 +0000 (14:02 +0300)
The options for an extension field were being looked up under wrong name
(MessageName instead of MessageName.fieldname).

Fixed the problem and added regression test. Created a new subfolder for
regression test cases.

Update issue 125
Status: FixedInGit

generator/nanopb_generator.py
tests/SConstruct
tests/regression/issue_125/SConscript [new file with mode: 0644]
tests/regression/issue_125/extensionbug.expected [new file with mode: 0644]
tests/regression/issue_125/extensionbug.options [new file with mode: 0644]
tests/regression/issue_125/extensionbug.proto [new file with mode: 0644]

index 1f263a7..3bc8b39 100755 (executable)
@@ -645,7 +645,7 @@ def parse_file(fdesc, file_options):
             enums.append(Enum(names, enum, enum_options))
     
     for names, extension in iterate_extensions(fdesc, base_name):
-        field_options = get_nanopb_suboptions(extension, file_options, names)
+        field_options = get_nanopb_suboptions(extension, file_options, names + extension.name)
         if field_options.type != nanopb_pb2.FT_IGNORE:
             extensions.append(ExtensionField(names, extension, field_options))
     
index 7a27844..57167cc 100644 (file)
@@ -141,6 +141,6 @@ import os.path
 env['VARIANT_DIR'] = 'build'
 env['BUILD'] = '#' + env['VARIANT_DIR']
 env['COMMON'] = '#' + env['VARIANT_DIR'] + '/common'
-for subdir in Glob('*/SConscript'):
+for subdir in Glob('*/SConscript') + Glob('regression/*/SConscript'):
     SConscript(subdir, exports = 'env', variant_dir = env['VARIANT_DIR'] + '/' + os.path.dirname(str(subdir)))
 
diff --git a/tests/regression/issue_125/SConscript b/tests/regression/issue_125/SConscript
new file mode 100644 (file)
index 0000000..f2155e6
--- /dev/null
@@ -0,0 +1,9 @@
+# Regression test for Issue 125: Wrong identifier name for extension fields
+
+Import("env")
+
+env.NanopbProto(["extensionbug", "extensionbug.options"])
+env.Object('extensionbug.pb.c')
+
+env.Match(['extensionbug.pb.h', 'extensionbug.expected'])
+
diff --git a/tests/regression/issue_125/extensionbug.expected b/tests/regression/issue_125/extensionbug.expected
new file mode 100644 (file)
index 0000000..fc21335
--- /dev/null
@@ -0,0 +1,3 @@
+pb_extension_type_t Message2_extras
+uint32_t field2
+
diff --git a/tests/regression/issue_125/extensionbug.options b/tests/regression/issue_125/extensionbug.options
new file mode 100644 (file)
index 0000000..30b464a
--- /dev/null
@@ -0,0 +1,4 @@
+* type:FT_IGNORE
+
+Message2.extras type:FT_STATIC
+Message2.field2 type:FT_STATIC
diff --git a/tests/regression/issue_125/extensionbug.proto b/tests/regression/issue_125/extensionbug.proto
new file mode 100644 (file)
index 0000000..c4ac686
--- /dev/null
@@ -0,0 +1,16 @@
+message Message1
+{
+       optional uint32 fieldA = 1;
+       extensions 30 to max;
+}
+
+message Message2
+{
+       extend Message1
+       {
+               optional Message2 extras = 30;
+       }
+       
+       optional uint32 field1 = 1;
+       optional uint32 field2 = 2;
+}