From 32e25cbca210a359b09768537b6f443fe90a3070 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Tue, 20 Jun 2017 10:24:05 +0000 Subject: Separation Generator to a dedicated repo Change-Id: Id94831651c3266861435272a6e36c7884bef2c45 Signed-off-by: Romain Forlot --- libs/nanopb/tests/options/SConscript | 12 +++ libs/nanopb/tests/options/options.expected | 20 +++++ libs/nanopb/tests/options/options.proto | 98 +++++++++++++++++++++++ libs/nanopb/tests/options/proto3_options.expected | 4 + libs/nanopb/tests/options/proto3_options.proto | 11 +++ 5 files changed, 145 insertions(+) create mode 100644 libs/nanopb/tests/options/SConscript create mode 100644 libs/nanopb/tests/options/options.expected create mode 100644 libs/nanopb/tests/options/options.proto create mode 100644 libs/nanopb/tests/options/proto3_options.expected create mode 100644 libs/nanopb/tests/options/proto3_options.proto (limited to 'libs/nanopb/tests/options') diff --git a/libs/nanopb/tests/options/SConscript b/libs/nanopb/tests/options/SConscript new file mode 100644 index 00000000..215e3bd0 --- /dev/null +++ b/libs/nanopb/tests/options/SConscript @@ -0,0 +1,12 @@ +# Test that the generator options work as expected. + +Import("env") + +env.NanopbProto("options") +env.Object('options.pb.c') +env.Match(['options.pb.h', 'options.expected']) + +env.NanopbProto("proto3_options") +env.Object('proto3_options.pb.c') +env.Match(['proto3_options.pb.h', 'proto3_options.expected']) + diff --git a/libs/nanopb/tests/options/options.expected b/libs/nanopb/tests/options/options.expected new file mode 100644 index 00000000..9e47e6a4 --- /dev/null +++ b/libs/nanopb/tests/options/options.expected @@ -0,0 +1,20 @@ +char filesize\[20\]; +char msgsize\[30\]; +char fieldsize\[40\]; +char fieldlen\[41\]; +pb_callback_t int32_callback; +\sEnumValue1 = 1 +Message5_EnumValue1 +} pb_packed my_packed_struct; +! skipped_field +! SkippedMessage +#define PB_MSG_103 Message3 +#define PB_MSG_104 Message4 +#define PB_MSG_105 Message5 +#define OPTIONS_MESSAGES \\ +\s+PB_MSG\(103,[0-9]*,Message3\) \\ +\s+PB_MSG\(104,-1,Message4\) \\ +\s+PB_MSG\(105,[0-9]*,Message5\) \\ +#define Message5_msgid 105 +! has_proto3field + diff --git a/libs/nanopb/tests/options/options.proto b/libs/nanopb/tests/options/options.proto new file mode 100644 index 00000000..c6ca5e25 --- /dev/null +++ b/libs/nanopb/tests/options/options.proto @@ -0,0 +1,98 @@ +/* Test nanopb option parsing. + * options.expected lists the patterns that are searched for in the output. + */ + +syntax = "proto2"; + +import "nanopb.proto"; + +// File level options +option (nanopb_fileopt).max_size = 20; + +message Message1 +{ + required string filesize = 1; +} + +// Message level options +message Message2 +{ + option (nanopb_msgopt).max_size = 30; + required string msgsize = 1; +} + +// Field level options +message Message3 +{ + option (nanopb_msgopt).msgid = 103; + required string fieldsize = 1 [(nanopb).max_size = 40]; + required string fieldlen = 2 [(nanopb).max_length = 40]; +} + +// Forced callback field +message Message4 +{ + option (nanopb_msgopt).msgid = 104; + required int32 int32_callback = 1 [(nanopb).type = FT_CALLBACK]; +} + +// Short enum names +enum Enum1 +{ + option (nanopb_enumopt).long_names = false; + EnumValue1 = 1; + EnumValue2 = 2; +} + +message EnumTest +{ + required Enum1 field = 1 [default = EnumValue2]; +} + +// Short enum names inside message +message Message5 +{ + option (nanopb_msgopt).msgid = 105; + enum Enum2 + { + option (nanopb_enumopt).long_names = false; + EnumValue1 = 1; + } + required Enum2 field = 1 [default = EnumValue1]; +} + +// Packed structure +message my_packed_struct +{ + option (nanopb_msgopt).packed_struct = true; + optional int32 myfield = 1; +} + +// Message with ignored field +message Message6 +{ + required int32 field1 = 1; + optional int32 skipped_field = 2 [(nanopb).type = FT_IGNORE]; +} + +// Message that is skipped +message SkippedMessage +{ + option (nanopb_msgopt).skip_message = true; + required int32 foo = 1; +} + +// Message with oneof field +message OneofMessage +{ + oneof foo { + int32 bar = 1; + } +} + +// Proto3-style optional field in proto2 file +message Proto3Field +{ + optional int32 proto3field = 1 [(nanopb).proto3 = true]; +} + diff --git a/libs/nanopb/tests/options/proto3_options.expected b/libs/nanopb/tests/options/proto3_options.expected new file mode 100644 index 00000000..cc2f29c0 --- /dev/null +++ b/libs/nanopb/tests/options/proto3_options.expected @@ -0,0 +1,4 @@ +! bool has_proto3_default +bool has_proto3_off +! bool has_proto3_on + diff --git a/libs/nanopb/tests/options/proto3_options.proto b/libs/nanopb/tests/options/proto3_options.proto new file mode 100644 index 00000000..1017f046 --- /dev/null +++ b/libs/nanopb/tests/options/proto3_options.proto @@ -0,0 +1,11 @@ +syntax = "proto3"; + +import "nanopb.proto"; + +message Message1 +{ + int32 proto3_default = 1; + int32 proto3_off = 2 [(nanopb).proto3 = false]; + int32 proto3_on = 3 [(nanopb).proto3 = true]; +} + -- cgit 1.2.3-korg