summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>2014-07-20 14:02:56 +0300
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>2014-07-20 14:02:56 +0300
commitf2f9f8a9ed2f59e4ed229f09fc95f9168cc4b473 (patch)
tree645afbebb2e9774723edfbbf916a00f4bf739e3e
parent788d2825b06426f50064dc5f29b07ce0be105b2b (diff)
Fix problem with .options file and extension fields.
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
-rwxr-xr-xgenerator/nanopb_generator.py2
-rw-r--r--tests/SConstruct2
-rw-r--r--tests/regression/issue_125/SConscript9
-rw-r--r--tests/regression/issue_125/extensionbug.expected3
-rw-r--r--tests/regression/issue_125/extensionbug.options4
-rw-r--r--tests/regression/issue_125/extensionbug.proto16
6 files changed, 34 insertions, 2 deletions
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index 1f263a74..3bc8b39a 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -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))
diff --git a/tests/SConstruct b/tests/SConstruct
index 7a278443..57167ccc 100644
--- a/tests/SConstruct
+++ b/tests/SConstruct
@@ -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
index 00000000..f2155e63
--- /dev/null
+++ b/tests/regression/issue_125/SConscript
@@ -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
index 00000000..fc213354
--- /dev/null
+++ b/tests/regression/issue_125/extensionbug.expected
@@ -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
index 00000000..30b464a4
--- /dev/null
+++ b/tests/regression/issue_125/extensionbug.options
@@ -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
index 00000000..c4ac6860
--- /dev/null
+++ b/tests/regression/issue_125/extensionbug.proto
@@ -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;
+}