diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile | 5 | ||||
-rw-r--r-- | tests/alltypes.proto | 3 | ||||
-rw-r--r-- | tests/extensions.proto | 5 | ||||
-rw-r--r-- | tests/test_encode_extensions.c | 34 |
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 */ + } +} + |