From 1fb58684a277feb0ca44d92cfd628a5704ed4af5 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Fri, 7 May 2021 14:04:28 +0200 Subject: [PATCH] unity: add UNITY_MAIN_FUNC helper macro to run multiple test groups --- .../unity/include/unity_fixture_extras.h | 85 +++++++++++++++---- tools/ci/check_public_headers_exceptions.txt | 1 - 2 files changed, 69 insertions(+), 17 deletions(-) diff --git a/components/unity/include/unity_fixture_extras.h b/components/unity/include/unity_fixture_extras.h index 2eeaec2e3a..c6ad8ba46d 100644 --- a/components/unity/include/unity_fixture_extras.h +++ b/components/unity/include/unity_fixture_extras.h @@ -1,25 +1,78 @@ -/* IDF-specific additions to "Unity Fixture" */ +// Copyright 2016-2021 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* IDF-specific additions to "Unity Fixture". + * This file doesn't need to be included directly, it gets included into unity.h + * through unity_config.h. + */ + #pragma once -#ifndef CONFIG_IDF_TARGET +#include "sdkconfig.h" -/* A shorthand for running one test group from the main function */ -#define UNITY_MAIN(group_) do { \ +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(CONFIG_IDF_TARGET) || defined(CONFIG_IDF_TARGET_LINUX) +#define UNITY_MAYBE_EXIT(rc) do { exit(rc); } while(0) +#else +#define UNITY_MAYBE_EXIT(rc) do { (void) rc; } while(0) +#endif + +/* A shorthand for running all tests called from one function "func_", from the app_main function. + * Use this when there is more than one test group. + * + * Example: + * + * #include "unity.h" + * #include "unity_fixture.h" + * + * static_void run_all_tests(void) { + * RUN_TEST_GROUP(group1); // test group defined in another file, e.g. test_group1.c + * RUN_TEST_GROUP(group2); // test group defined in another file, e.g. test_group2.c + * } + * + * void app_main(void) { + * UNITY_MAIN_FUNC(run_all_tests); + * } + */ +#define UNITY_MAIN_FUNC(func_) do { \ const char* argv[] = { "test", "-v" }; \ const int argc = sizeof(argv)/sizeof(argv[0]); \ - int rc = UnityMain(argc, argv, TEST_ ## group_ ## _GROUP_RUNNER); \ + int rc = UnityMain(argc, argv, func_); \ printf("\nTests finished, rc=%d\n", rc); \ - exit(rc); \ + UNITY_MAYBE_EXIT(rc); \ } while(0) -#else // CONFIG_IDF_TARGET +/* A shorthand for running one test group from the app_main function, when there is only + * one test group and it is defined in the same file. + * + * Example: + * + * #include "unity.h" + * #include "unity_fixture.h" + * + * TEST_GROUP(my_feature); + * // also define TEST_SETUP, TEST_TEARDOWN, TESTs, TEST_GROUP_RUNNER + * + * void app_main(void) { + * UNITY_MAIN(my_feature); + * } + */ +#define UNITY_MAIN(group_) UNITY_MAIN_FUNC(TEST_ ## group_ ## _GROUP_RUNNER) -/* A shorthand for running one test group from the main function */ -#define UNITY_MAIN(group_) do { \ - const char* argv[] = { "test", "-v" }; \ - const int argc = sizeof(argv)/sizeof(argv[0]); \ - int rc = UnityMain(argc, argv, TEST_ ## group_ ## _GROUP_RUNNER); \ - printf("\nTests finished, rc=%d\n", rc); \ -} while(0) - -#endif // CONFIG_IDF_TARGET +#ifdef __cplusplus +} +#endif diff --git a/tools/ci/check_public_headers_exceptions.txt b/tools/ci/check_public_headers_exceptions.txt index 20861b1a5a..23d779deb4 100644 --- a/tools/ci/check_public_headers_exceptions.txt +++ b/tools/ci/check_public_headers_exceptions.txt @@ -82,7 +82,6 @@ components/spiffs/include/spiffs_config.h components/unity/unity/src/unity_internals.h components/unity/unity/extras/ -components/unity/include/unity_fixture_extras.h components/unity/include/unity_config.h components/unity/include/unity_test_runner.h