From 5fab9ea623387fcc358f8f9ec268d51f8b2c1bc8 Mon Sep 17 00:00:00 2001 From: Alexandre Abadie Date: Fri, 29 Nov 2019 14:04:53 +0100 Subject: [PATCH] tests: add test for custom cpp file extensions --- tests/cpp_ext/Makefile | 8 +++++ tests/cpp_ext/Makefile.ci | 6 ++++ tests/cpp_ext/main.cpp | 32 +++++++++++++++++++ tests/cpp_ext/module/Makefile | 5 +++ tests/cpp_ext/module/Makefile.dep | 1 + tests/cpp_ext/module/Makefile.include | 3 ++ tests/cpp_ext/module/module.cc | 32 +++++++++++++++++++ tests/cpp_ext/module/module.cpp | 34 +++++++++++++++++++++ tests/cpp_ext/module/module.hh | 44 +++++++++++++++++++++++++++ tests/cpp_ext/tests/01-run.py | 19 ++++++++++++ 10 files changed, 184 insertions(+) create mode 100644 tests/cpp_ext/Makefile create mode 100644 tests/cpp_ext/Makefile.ci create mode 100644 tests/cpp_ext/main.cpp create mode 100644 tests/cpp_ext/module/Makefile create mode 100644 tests/cpp_ext/module/Makefile.dep create mode 100644 tests/cpp_ext/module/Makefile.include create mode 100644 tests/cpp_ext/module/module.cc create mode 100644 tests/cpp_ext/module/module.cpp create mode 100644 tests/cpp_ext/module/module.hh create mode 100755 tests/cpp_ext/tests/01-run.py diff --git a/tests/cpp_ext/Makefile b/tests/cpp_ext/Makefile new file mode 100644 index 000000000..e4206736b --- /dev/null +++ b/tests/cpp_ext/Makefile @@ -0,0 +1,8 @@ +include ../Makefile.tests_common + +FEATURES_REQUIRED += cpp + +USEMODULE += module +EXTERNAL_MODULE_DIRS += $(CURDIR)/module + +include $(RIOTBASE)/Makefile.include diff --git a/tests/cpp_ext/Makefile.ci b/tests/cpp_ext/Makefile.ci new file mode 100644 index 000000000..d5062a26c --- /dev/null +++ b/tests/cpp_ext/Makefile.ci @@ -0,0 +1,6 @@ +BOARD_INSUFFICIENT_MEMORY := \ + nucleo-f031k6 \ + nucleo-f042k6 \ + stm32f030f4-demo \ + stm32f0discovery \ + # diff --git a/tests/cpp_ext/main.cpp b/tests/cpp_ext/main.cpp new file mode 100644 index 000000000..9976c43b3 --- /dev/null +++ b/tests/cpp_ext/main.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2019 Inria + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup tests + * @{ + * + * @file + * @brief Sample C++ application + * + * @author Alexandre Abadie + * + * @} + */ + +#include + +#include "module.hh" + +int main() { + puts("Hello from C++"); + + module_class obj; + obj.print_hello(); + + return 0; +} diff --git a/tests/cpp_ext/module/Makefile b/tests/cpp_ext/module/Makefile new file mode 100644 index 000000000..c030b1a75 --- /dev/null +++ b/tests/cpp_ext/module/Makefile @@ -0,0 +1,5 @@ +MODULE = module + +SRCXXEXT = cc + +include $(RIOTBASE)/Makefile.base diff --git a/tests/cpp_ext/module/Makefile.dep b/tests/cpp_ext/module/Makefile.dep new file mode 100644 index 000000000..e355de5d7 --- /dev/null +++ b/tests/cpp_ext/module/Makefile.dep @@ -0,0 +1 @@ +FEATURES_REQUIRED += cpp diff --git a/tests/cpp_ext/module/Makefile.include b/tests/cpp_ext/module/Makefile.include new file mode 100644 index 000000000..f8c48846e --- /dev/null +++ b/tests/cpp_ext/module/Makefile.include @@ -0,0 +1,3 @@ +# Use an immediate variable to evaluate `MAKEFILE_LIST` now +USEMODULE_INCLUDES_module := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) +USEMODULE_INCLUDES += $(USEMODULE_INCLUDES_module) diff --git a/tests/cpp_ext/module/module.cc b/tests/cpp_ext/module/module.cc new file mode 100644 index 000000000..330e2119a --- /dev/null +++ b/tests/cpp_ext/module/module.cc @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2019 Inria + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup tests + * @{ + * + * @file + * @brief Sample module C++ class + * + * @author Alexandre Abadie + * + * @} + */ + +#include + +#include "module.hh" + +module_class::module_class() {} + +module_class::~module_class() {} + +void module_class::print_hello(void) +{ + puts("Hello from C++ module"); +} diff --git a/tests/cpp_ext/module/module.cpp b/tests/cpp_ext/module/module.cpp new file mode 100644 index 000000000..4a1504523 --- /dev/null +++ b/tests/cpp_ext/module/module.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2019 Inria + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup tests + * @{ + * + * @file + * @brief Sample module C++ class + * + * @author Alexandre Abadie + * + * @} + */ + +#include + +#include "module.hh" + +#error "This should not be built" + +module_class::module_class() {} + +module_class::~module_class() {} + +void module_class::print(void) +{ + puts("Hello from C++ module"); +} diff --git a/tests/cpp_ext/module/module.hh b/tests/cpp_ext/module/module.hh new file mode 100644 index 000000000..650eb8bf9 --- /dev/null +++ b/tests/cpp_ext/module/module.hh @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2019 Inria + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup tests + * @{ + * + * @file + * @brief Sample module C++ class + * + * @author Alexandre Abadie + * + * @} + */ + +#ifndef MODULE_H +#define MODULE_H + +class module_class +{ +public: + /** + * @brief constructor + */ + module_class(); + + /** + * @brief destructor + */ + ~module_class(); + + /** + * @brief public function + */ + void print_hello(void); +}; + +/** @} */ +#endif /* MODULE_H */ diff --git a/tests/cpp_ext/tests/01-run.py b/tests/cpp_ext/tests/01-run.py new file mode 100755 index 000000000..b0e3f260a --- /dev/null +++ b/tests/cpp_ext/tests/01-run.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2019 Inria +# +# This file is subject to the terms and conditions of the GNU Lesser +# General Public License v2.1. See the file LICENSE in the top level +# directory for more details. + +import sys +from testrunner import run + + +def testfunc(child): + child.expect_exact('Hello from C++') + child.expect_exact('Hello from C++ module') + + +if __name__ == "__main__": + sys.exit(run(testfunc))