From dcd2f898af9d4efcb22417c19fa1b3abc8c548c5 Mon Sep 17 00:00:00 2001 From: aqua Date: Wed, 7 Aug 2024 17:36:57 +0300 Subject: Added bazel rule for interface_generator --- .../templates/__c_functions.mako | 4 +++ .../templates/__c_system_include.mako | 4 +++ tools/interface_generator/templates/__c_types.mako | 6 ++++ tools/interface_generator/templates/__header.mako | 5 ++++ .../interface_generator/templates/c_functions.mako | 4 --- tools/interface_generator/templates/c_header.mako | 13 --------- .../templates/c_system_include.mako | 4 --- tools/interface_generator/templates/c_types.mako | 6 ---- .../interface_generator/templates/interface.h.mako | 8 ++++++ .../templates/interface_mock.cpp.mako | 32 ++++++++++++++++++++++ .../templates/interface_mock.hpp.mako | 26 ++++++++++++++++++ 11 files changed, 85 insertions(+), 27 deletions(-) create mode 100644 tools/interface_generator/templates/__c_functions.mako create mode 100644 tools/interface_generator/templates/__c_system_include.mako create mode 100644 tools/interface_generator/templates/__c_types.mako create mode 100644 tools/interface_generator/templates/__header.mako delete mode 100644 tools/interface_generator/templates/c_functions.mako delete mode 100644 tools/interface_generator/templates/c_header.mako delete mode 100644 tools/interface_generator/templates/c_system_include.mako delete mode 100644 tools/interface_generator/templates/c_types.mako create mode 100644 tools/interface_generator/templates/interface.h.mako create mode 100644 tools/interface_generator/templates/interface_mock.cpp.mako create mode 100644 tools/interface_generator/templates/interface_mock.hpp.mako (limited to 'tools/interface_generator/templates') 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 new file mode 100644 index 0000000..d6a9d09 --- /dev/null +++ b/tools/interface_generator/templates/__c_system_include.mako @@ -0,0 +1,4 @@ +/* System includes */ +% for path in system_includes: +#include <${path}> +% endfor diff --git a/tools/interface_generator/templates/__c_types.mako b/tools/interface_generator/templates/__c_types.mako new file mode 100644 index 0000000..ce6b6b5 --- /dev/null +++ b/tools/interface_generator/templates/__c_types.mako @@ -0,0 +1,6 @@ +/* Types */ +% for type in types: +typedef struct ${name}_${type['name']} { +${ "\n".join([ " {};".format(member) for member in type['members'] ]) } +} ${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/c_system_include.mako b/tools/interface_generator/templates/c_system_include.mako deleted file mode 100644 index d6a9d09..0000000 --- a/tools/interface_generator/templates/c_system_include.mako +++ /dev/null @@ -1,4 +0,0 @@ -/* System includes */ -% for path in system_includes: -#include <${path}> -% endfor diff --git a/tools/interface_generator/templates/c_types.mako b/tools/interface_generator/templates/c_types.mako deleted file mode 100644 index ac32469..0000000 --- a/tools/interface_generator/templates/c_types.mako +++ /dev/null @@ -1,6 +0,0 @@ -/* Types */ -% for type in types: -typedef struct ${type['name']} { -${ "\n".join([ " {};".format(member) for member in type['members'] ]) } -} ${type['name']}; -% endfor 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 +#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 +#include + +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; + +#endif /* ${ name.upper() }_MOCK */ -- cgit v1.2.1