diff options
author | Petteri Aimonen <jpa@git.mail.kapsi.fi> | 2023-10-19 10:09:21 +0300 |
---|---|---|
committer | Petteri Aimonen <jpa@git.mail.kapsi.fi> | 2023-10-19 10:09:21 +0300 |
commit | 7d790f9ebd419d9cece7752177dba6c4f6c85646 (patch) | |
tree | 1395f084455d07f33dc775d3c2e785a1de1c9aa6 | |
parent | 8163cd494b2b271ff111808e9b4077d74285f05a (diff) |
Add test case for package name replacement in included file (#899)
-rw-r--r-- | tests/typename_mangling/SConscript | 21 | ||||
-rw-r--r-- | tests/typename_mangling/test_replace_package.c | 27 |
2 files changed, 45 insertions, 3 deletions
diff --git a/tests/typename_mangling/SConscript b/tests/typename_mangling/SConscript index ee750ef..9e140d8 100644 --- a/tests/typename_mangling/SConscript +++ b/tests/typename_mangling/SConscript @@ -1,19 +1,26 @@ -# Test mangle_names option +# Test mangle_names option in various configurations. +# Each sub testcase makes a modified copy of the files in the build directory. Import('env') -def set_mangling(type): +def set_options(setting, value): + '''Create options file that sets a nanopb generator option''' def command(target, source, env): with open(str(source[0])) as src, open(str(target[0]), "w") as dst: - dst.write("* mangle_names:{}\n".format(type)) + dst.write("* {}:{}\n".format(setting, value)) dst.write(src.read()) return command +def set_mangling(type): + return set_options('mangle_names', type) + +# Test type names when M_STRIP_PACKAGE option is used in a single file env.Command("strip_package.options", "with_package.options", set_mangling("M_STRIP_PACKAGE")) env.Command("strip_package.proto", "with_package.proto", Copy("$TARGET", "$SOURCE")) env.NanopbProto(["strip_package", "strip_package.options"]) env.Program(["test_strip_package.c", "strip_package.pb.c", '$COMMON/pb_common.o']) +# Test type names with M_STRIP_PACKAGE used in both files env.Command("strip_package_a.options", "with_package.options", set_mangling("M_STRIP_PACKAGE")) env.Command("strip_package_b.options", "with_package.options", set_mangling("M_STRIP_PACKAGE")) env.Command("strip_package_a.proto", "with_package_a.proto", Copy("$TARGET", "$SOURCE")) @@ -22,11 +29,19 @@ env.NanopbProto(["strip_package_a", "strip_package_a.options"]) env.NanopbProto(["strip_package_b", "strip_package_b.options"]) env.Program(["test_strip_package_dependencies.c", "strip_package_a.pb.c", "strip_package_b.pb.c", '$COMMON/pb_common.o']) +# Test type names with M_STRIP_PACKAGE used in file A and (nanopb).package overrides package name in B +env.Command("replace_package_b.options", "with_package.options", set_options("package", '"ReplacedName"')) +env.Command("replace_package_b.proto", "with_package_b.proto", Copy("$TARGET", "$SOURCE")) +env.NanopbProto(["replace_package_b", "replace_package_b.options", "strip_package_a.proto"]) +env.Program(["test_replace_package.c", "strip_package_a.pb.c", "replace_package_b.pb.c", '$COMMON/pb_common.o']) + +# Test M_FLATTEN with a single file env.Command("flatten.options", "with_package.options", set_mangling("M_FLATTEN")) env.Command("flatten.proto", "with_package.proto", Copy("$TARGET", "$SOURCE")) env.NanopbProto(["flatten", "flatten.options"]) env.Program(["test_flatten.c", "flatten.pb.c", '$COMMON/pb_common.o']) +# Test M_PACKAGE_INITIALS with a single file env.Command("package_initials.options", "with_package.options", set_mangling("M_PACKAGE_INITIALS")) env.Command("package_initials.proto", "with_package.proto", Copy("$TARGET", "$SOURCE")) env.NanopbProto(["package_initials", "package_initials.options"]) diff --git a/tests/typename_mangling/test_replace_package.c b/tests/typename_mangling/test_replace_package.c new file mode 100644 index 0000000..a1d86bc --- /dev/null +++ b/tests/typename_mangling/test_replace_package.c @@ -0,0 +1,27 @@ +/* + * Tests if expected names are generated when M_STRIP_PACKAGE is used in one of the files. + */ + +#include <stdio.h> +#include "unittests.h" +#include "replace_package_b.pb.h" + +int main() +{ + MessageA msgA1 = package_a_MessageA_init_default; + package_a_MessageA msgA2 = MessageA_init_default; + + package_b_MessageB msgB1 = ReplacedName_MessageB_init_zero; + ReplacedName_MessageB msgB2 = package_b_MessageB_init_zero; + + package_a_EnumA e1 = EnumA_VALUE_A_0; + EnumA e2 = EnumA_VALUE_A_1; + e2 = _package_a_EnumA_MIN; + e2 = _EnumA_MIN; + e2 = _package_a_EnumA_MAX; + e2 = _EnumA_MAX; + e2 = _package_a_EnumA_ARRAYSIZE; + e2 = _EnumA_ARRAYSIZE; + + return msgA1.enum_a_field + msgA2.enum_a_field + msgB1.nested_enum + msgB2.nested_enum + e1 + e2; /* marks variables as used */ +} |