summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile5
-rw-r--r--tests/alltypes.proto3
-rw-r--r--tests/extensions.proto5
-rw-r--r--tests/test_encode_extensions.c34
4 files changed, 45 insertions, 2 deletions
diff --git a/tests/Makefile b/tests/Makefile
index 16f62e5c..dc564c28 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -8,7 +8,7 @@ TESTS= decode_unittests encode_unittests \
test_decode_callbacks test_encode_callbacks \
test_missing_fields test_no_messages test_funny_name \
test_multiple_files test_cxxcompile test_options \
- bc_encode bc_decode
+ bc_encode bc_decode test_encode_extensions
# More strict checks for the core part of nanopb
CC_VERSION=$(shell $(CC) -v 2>&1)
@@ -84,6 +84,7 @@ test_no_messages: no_messages.pb.h no_messages.pb.c no_messages.pb.o
test_funny_name: funny-proto+name.pb.h funny-proto+name.pb.o
bc_encode: bc_alltypes.pb.o pb_encode.o bc_encode.o
bc_decode: bc_alltypes.pb.o pb_decode.o bc_decode.o
+test_encode_extensions: test_encode_extensions.c pb_encode.o alltypes.pb.o extensions.pb.o
%.pb: %.proto
protoc -I. -I../generator -I/usr/include -o$@ $<
@@ -125,7 +126,7 @@ run_unittests: $(TESTS)
./test_encode3_buf 1 | ./test_decode3_buf 1
./test_decode3 < alltypes_with_extra_fields.pb
./bc_encode | ./bc_decode
-
+
./test_missing_fields
test_options: options.pb.h options.expected options.pb.o
diff --git a/tests/alltypes.proto b/tests/alltypes.proto
index 6ccf57d7..a2cf8bbc 100644
--- a/tests/alltypes.proto
+++ b/tests/alltypes.proto
@@ -86,5 +86,8 @@ message AllTypes {
// Just to make sure that the size of the fields has been calculated
// properly, i.e. otherwise a bug in last field might not be detected.
required int32 end = 99;
+
+
+ extensions 200 to 255;
}
diff --git a/tests/extensions.proto b/tests/extensions.proto
new file mode 100644
index 00000000..12c7c9a5
--- /dev/null
+++ b/tests/extensions.proto
@@ -0,0 +1,5 @@
+import 'alltypes.proto';
+
+extend AllTypes {
+ optional int32 AllTypes_extensionfield1 = 255;
+}
diff --git a/tests/test_encode_extensions.c b/tests/test_encode_extensions.c
new file mode 100644
index 00000000..a3500d7d
--- /dev/null
+++ b/tests/test_encode_extensions.c
@@ -0,0 +1,34 @@
+/* Tests extension fields.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <pb_encode.h>
+#include "alltypes.pb.h"
+#include "extensions.pb.h"
+
+int main(int argc, char **argv)
+{
+ AllTypes alltypes = {0};
+ int32_t extensionfield1 = 12345;
+ pb_extension_t ext1 = {&AllTypes_extensionfield1, &extensionfield1, NULL};
+
+ alltypes.extensions = &ext1;
+
+ uint8_t buffer[1024];
+ pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
+
+ /* Now encode it and check if we succeeded. */
+ if (pb_encode(&stream, AllTypes_fields, &alltypes))
+ {
+ fwrite(buffer, 1, stream.bytes_written, stdout);
+ return 0; /* Success */
+ }
+ else
+ {
+ fprintf(stderr, "Encoding failed: %s\n", PB_GET_ERROR(&stream));
+ return 1; /* Failure */
+ }
+}
+