aboutsummaryrefslogtreecommitdiff
path: root/tools/interface_generator/templates
diff options
context:
space:
mode:
authoraqua <aqua@iserlohn-fortress.net>2024-08-07 17:36:57 +0300
committeraqua <aqua@iserlohn-fortress.net>2024-08-07 17:36:57 +0300
commitdcd2f898af9d4efcb22417c19fa1b3abc8c548c5 (patch)
tree3ef0eaa4b9595bf90c733e8f196edd1c3f72c472 /tools/interface_generator/templates
parentAdded interface_generator (diff)
downloadkernel-dcd2f898af9d4efcb22417c19fa1b3abc8c548c5.tar.xz
Added bazel rule for interface_generator
Diffstat (limited to 'tools/interface_generator/templates')
-rw-r--r--tools/interface_generator/templates/__c_functions.mako4
-rw-r--r--tools/interface_generator/templates/__c_system_include.mako (renamed from tools/interface_generator/templates/c_system_include.mako)0
-rw-r--r--tools/interface_generator/templates/__c_types.mako (renamed from tools/interface_generator/templates/c_types.mako)4
-rw-r--r--tools/interface_generator/templates/__header.mako5
-rw-r--r--tools/interface_generator/templates/c_functions.mako4
-rw-r--r--tools/interface_generator/templates/c_header.mako13
-rw-r--r--tools/interface_generator/templates/interface.h.mako8
-rw-r--r--tools/interface_generator/templates/interface_mock.cpp.mako32
-rw-r--r--tools/interface_generator/templates/interface_mock.hpp.mako26
9 files changed, 77 insertions, 19 deletions
diff --git a/tools/interface_generator/templates/__c_functions.mako b/tools/interface_generator/templates/__c_functions.mako
new file mode 100644
index 0000000..2e40119
--- /dev/null
+++ b/tools/interface_generator/templates/__c_functions.mako
@@ -0,0 +1,4 @@
+/* Functions */
+% for fn in functions:
+${fn['return']} ${name}_${fn['name']}(${ ", ".join(fn['arguments']) });
+% endfor
diff --git a/tools/interface_generator/templates/c_system_include.mako b/tools/interface_generator/templates/__c_system_include.mako
index d6a9d09..d6a9d09 100644
--- a/tools/interface_generator/templates/c_system_include.mako
+++ b/tools/interface_generator/templates/__c_system_include.mako
diff --git a/tools/interface_generator/templates/c_types.mako b/tools/interface_generator/templates/__c_types.mako
index ac32469..ce6b6b5 100644
--- a/tools/interface_generator/templates/c_types.mako
+++ b/tools/interface_generator/templates/__c_types.mako
@@ -1,6 +1,6 @@
/* Types */
% for type in types:
-typedef struct ${type['name']} {
+typedef struct ${name}_${type['name']} {
${ "\n".join([ " {};".format(member) for member in type['members'] ]) }
-} ${type['name']};
+} ${name}_${type['name']};
% endfor
diff --git a/tools/interface_generator/templates/__header.mako b/tools/interface_generator/templates/__header.mako
new file mode 100644
index 0000000..24b0381
--- /dev/null
+++ b/tools/interface_generator/templates/__header.mako
@@ -0,0 +1,5 @@
+/* This file is generated by ${PROG['name']} v${PROG['version']} */
+
+/******************************************************************************
+${ license }
+ ******************************************************************************/
diff --git a/tools/interface_generator/templates/c_functions.mako b/tools/interface_generator/templates/c_functions.mako
deleted file mode 100644
index a7f88be..0000000
--- a/tools/interface_generator/templates/c_functions.mako
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Functions */
-% for fn in functions:
-${fn['return']} ${fn['name']}(${ ", ".join(fn['arguments']) });
-% endfor
diff --git a/tools/interface_generator/templates/c_header.mako b/tools/interface_generator/templates/c_header.mako
deleted file mode 100644
index 069b449..0000000
--- a/tools/interface_generator/templates/c_header.mako
+++ /dev/null
@@ -1,13 +0,0 @@
-/* This file is generated by ${PROG['name']} v${PROG['version']} */
-
-/******************************************************************************
-<%include file="${license}" />
- ******************************************************************************/
-
-#ifndef ${ name.upper() }_H
-#define ${ name.upper() }_H
-
-<%include file="c_system_include.mako" />
-<%include file="c_types.mako" />
-<%include file="c_functions.mako" />
-#endif /* ${ name.upper() }_H */
diff --git a/tools/interface_generator/templates/interface.h.mako b/tools/interface_generator/templates/interface.h.mako
new file mode 100644
index 0000000..47ea940
--- /dev/null
+++ b/tools/interface_generator/templates/interface.h.mako
@@ -0,0 +1,8 @@
+<%include file="__header.mako" />
+#ifndef ${ name.upper() }
+#define ${ name.upper() }
+
+<%include file="__c_system_include.mako" />
+<%include file="__c_types.mako" />
+<%include file="__c_functions.mako" />
+#endif /* ${ name.upper() } */
diff --git a/tools/interface_generator/templates/interface_mock.cpp.mako b/tools/interface_generator/templates/interface_mock.cpp.mako
new file mode 100644
index 0000000..721f2c4
--- /dev/null
+++ b/tools/interface_generator/templates/interface_mock.cpp.mako
@@ -0,0 +1,32 @@
+<%include file="__header.mako" />
+
+#include <stdexcept>
+#include "${name}_mock.hpp"
+
+static I${name}_mock *s_instance = nullptr;
+
+I${name}_mock::I${name}_mock()
+{
+ if(s_instance != nullptr)
+ {
+ throw std::runtime_error("Creating a second instance of mock object");
+ }
+ s_instance = this;
+}
+
+I${name}_mock::~I${name}_mock()
+{
+ // destructors shouldn't throw exceptions
+ s_instance = nullptr;
+}
+
+% for fn in functions:
+${fn['return']} ${name}_${fn['name']}(${ ", ".join(fn['arguments']) })
+{
+ if(s_instance == nullptr)
+ {
+ throw std::runtime_error("No mock created to handle function ${name}_${fn['name']}");
+ }
+ return s_instance->${fn['name']}(${ ", ".join(fn['argument_names']) });
+}
+% endfor
diff --git a/tools/interface_generator/templates/interface_mock.hpp.mako b/tools/interface_generator/templates/interface_mock.hpp.mako
new file mode 100644
index 0000000..e33d50e
--- /dev/null
+++ b/tools/interface_generator/templates/interface_mock.hpp.mako
@@ -0,0 +1,26 @@
+<%include file="__header.mako" />
+#ifndef ${ name.upper() }_MOCK
+#define ${ name.upper() }_MOCK
+
+extern "C" {
+#include "${ name }.h"
+}
+
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+class I${name}_mock
+{
+public:
+ I${name}_mock();
+ ~I${name}_mock();
+
+ /* Functions */
+% for fn in functions:
+ MOCK_METHOD(${fn['return']}, ${fn['name']}, (${ ", ".join(fn['arguments']) }));
+% endfor
+};
+
+using ${name}_mock = ::testing::NiceMock<I${name}_mock>;
+
+#endif /* ${ name.upper() }_MOCK */