summaryrefslogtreecommitdiffstats
path: root/libs/nanopb/tests/options
diff options
context:
space:
mode:
Diffstat (limited to 'libs/nanopb/tests/options')
-rw-r--r--libs/nanopb/tests/options/SConscript12
-rw-r--r--libs/nanopb/tests/options/options.expected20
-rw-r--r--libs/nanopb/tests/options/options.proto98
-rw-r--r--libs/nanopb/tests/options/proto3_options.expected4
-rw-r--r--libs/nanopb/tests/options/proto3_options.proto11
5 files changed, 145 insertions, 0 deletions
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];
+}
+