[libcamera-devel] [PATCH v5 9/9] [RFC] test: generated_serializer: Test skipHeader enums and flags
Paul Elder
paul.elder at ideasonboard.com
Tue Oct 11 12:58:59 CEST 2022
Add fields to the test struct to test serialization/deserialization of
scoped enums and flags of said scoped enums that are defined in a C++
header, which are thus designated by [skipHeader] in mojom.
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
New in v5
RFC because this touches core stuff. This can be detached from the rest
of the series.
---
include/libcamera/ipa/core.mojom | 2 ++
include/libcamera/ipa/ipa_interface.h | 7 +++++++
.../generated_serializer_test.cpp | 11 +++++++++++
.../include/libcamera/ipa/test.mojom | 4 ++++
4 files changed, 24 insertions(+)
diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom
index 1ff674b0..3438af93 100644
--- a/include/libcamera/ipa/core.mojom
+++ b/include/libcamera/ipa/core.mojom
@@ -84,6 +84,8 @@ module libcamera;
[skipSerdes, skipHeader] struct ControlList {};
[skipSerdes, skipHeader] struct SharedFD {};
+[skipHeader, scopedEnum] enum TestEnum {};
+
[skipHeader] struct Point {
int32 x;
int32 y;
diff --git a/include/libcamera/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h
index 8884f0ed..96fb8344 100644
--- a/include/libcamera/ipa/ipa_interface.h
+++ b/include/libcamera/ipa/ipa_interface.h
@@ -27,6 +27,13 @@ namespace libcamera {
* tag must be #included here.
*/
+enum class TestEnum {
+ TestEnumValueA,
+ TestEnumValueB,
+ TestEnumValueC,
+ TestEnumValueD,
+};
+
class IPAInterface
{
public:
diff --git a/test/serialization/generated_serializer/generated_serializer_test.cpp b/test/serialization/generated_serializer/generated_serializer_test.cpp
index 4670fe46..6f01c3d4 100644
--- a/test/serialization/generated_serializer/generated_serializer_test.cpp
+++ b/test/serialization/generated_serializer/generated_serializer_test.cpp
@@ -11,6 +11,8 @@
#include "test.h"
+#include <libcamera/ipa/ipa_interface.h>
+
#include "test_ipa_interface.h"
#include "test_ipa_serializer.h"
@@ -59,6 +61,9 @@ if (struct1.field != struct2.field) { \
t.s3 = "lorem ipsum";
t.i = 58527;
t.c = ipa::test::IPAOperationInit;
+ t.ex = TestEnum::TestEnumValueA;
+ t.exf |= TestEnum::TestEnumValueB;
+
t.e = ipa::test::ErrorFlags::Error1;
Flags<ipa::test::ErrorFlags> flags;
@@ -87,6 +92,8 @@ if (struct1.field != struct2.field) { \
TEST_SCOPED_ENUM_EQUALITY(t, u, e);
TEST_SCOPED_ENUM_EQUALITY(t, u, f);
+ TEST_SCOPED_ENUM_EQUALITY(t, u, ex);
+ TEST_SCOPED_ENUM_EQUALITY(t, u, exf);
/* Test vector of generated structs */
std::vector<ipa::test::TestStruct> v = { t, u };
@@ -113,6 +120,8 @@ if (struct1.field != struct2.field) { \
TEST_SCOPED_ENUM_EQUALITY(v[0], w[0], e);
TEST_SCOPED_ENUM_EQUALITY(v[0], w[0], f);
+ TEST_SCOPED_ENUM_EQUALITY(v[0], w[0], ex);
+ TEST_SCOPED_ENUM_EQUALITY(v[0], w[0], exf);
TEST_FIELD_EQUALITY(v[1], w[1], s1);
TEST_FIELD_EQUALITY(v[1], w[1], s2);
@@ -122,6 +131,8 @@ if (struct1.field != struct2.field) { \
TEST_SCOPED_ENUM_EQUALITY(v[1], w[1], e);
TEST_SCOPED_ENUM_EQUALITY(v[1], w[1], f);
+ TEST_SCOPED_ENUM_EQUALITY(v[1], w[1], ex);
+ TEST_SCOPED_ENUM_EQUALITY(v[1], w[1], exf);
return TestPass;
}
diff --git a/test/serialization/generated_serializer/include/libcamera/ipa/test.mojom b/test/serialization/generated_serializer/include/libcamera/ipa/test.mojom
index 91c31642..1f1ba8dc 100644
--- a/test/serialization/generated_serializer/include/libcamera/ipa/test.mojom
+++ b/test/serialization/generated_serializer/include/libcamera/ipa/test.mojom
@@ -2,6 +2,8 @@
module ipa.test;
+import "include/libcamera/ipa/core.mojom";
+
enum IPAOperationCode {
IPAOperationNone,
IPAOperationInit,
@@ -28,6 +30,8 @@ struct TestStruct {
IPAOperationCode c;
ErrorFlags e;
[flags] ErrorFlags f;
+ libcamera.TestEnum ex;
+ [flags] libcamera.TestEnum exf;
};
interface IPATestInterface {
--
2.30.2
More information about the libcamera-devel
mailing list