mirror of
https://github.com/ThrowTheSwitch/Unity.git
synced 2026-01-23 08:25:58 +01:00
Merge pull request #639 from AJIOB/auto_define_test_case_marco
Provide the way for automatically define TEST_CASE & TEST_RANGE macros (Thanks, Alex. Looks great!)
This commit is contained in:
@@ -438,6 +438,36 @@ This will rarely be necessary. Most often, Unity will automatically detect if th
|
|||||||
In the event that the compiler supports variadic macros, but is primarily C89 (ANSI), defining this option will allow you to use them.
|
In the event that the compiler supports variadic macros, but is primarily C89 (ANSI), defining this option will allow you to use them.
|
||||||
This option is also not necessary when using Ceedling or the test runner generator script.
|
This option is also not necessary when using Ceedling or the test runner generator script.
|
||||||
|
|
||||||
|
#### `UNITY_SUPPORT_TEST_CASES`
|
||||||
|
|
||||||
|
Unity can automatically define all supported parameterized tests macros.
|
||||||
|
That feature is disabled by default.
|
||||||
|
To enable it, use the following example:
|
||||||
|
|
||||||
|
```C
|
||||||
|
#define UNITY_SUPPORT_TEST_CASES
|
||||||
|
```
|
||||||
|
|
||||||
|
You can manually provide required `TEST_CASE` or `TEST_RANGE` macro definitions
|
||||||
|
before including `unity.h`, and they won't be redefined.
|
||||||
|
If you provide one of the following macros, some of default definitions will not be
|
||||||
|
defined:
|
||||||
|
| User defines macro | Unity will _not_ define following macro |
|
||||||
|
|---|---|
|
||||||
|
| `UNITY_EXCLUDE_TEST_CASE` | `TEST_CASE` |
|
||||||
|
| `UNITY_EXCLUDE_TEST_RANGE` | `TEST_RANGE` |
|
||||||
|
| `TEST_CASE` | `TEST_CASE` |
|
||||||
|
| `TEST_RANGE` | `TEST_RANGE` |
|
||||||
|
|
||||||
|
`UNITY_EXCLUDE_TEST_*` defines is not processed by test runner generator script.
|
||||||
|
If you exclude one of them from definition, you should provide your own definition
|
||||||
|
for them or avoid using undefined `TEST_*` macro as a test generator.
|
||||||
|
Otherwise, compiler cannot build source code file with provided call.
|
||||||
|
|
||||||
|
_Note:_
|
||||||
|
That feature requires variadic macro support by compiler. If required feature
|
||||||
|
is not detected, it will not be enabled, even though preprocessor macro is defined.
|
||||||
|
|
||||||
## Getting Into The Guts
|
## Getting Into The Guts
|
||||||
|
|
||||||
There will be cases where the options above aren't quite going to get everything perfect.
|
There will be cases where the options above aren't quite going to get everything perfect.
|
||||||
|
|||||||
@@ -765,19 +765,35 @@ extern const char UnityStrErrShorthand[];
|
|||||||
#define TEST_ABORT() return
|
#define TEST_ABORT() return
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Automatically enable variadic macros support, if it not enabled before */
|
||||||
|
#ifndef UNITY_SUPPORT_VARIADIC_MACROS
|
||||||
|
#ifdef __STDC_VERSION__
|
||||||
|
#if __STDC_VERSION__ >= 199901L
|
||||||
|
#define UNITY_SUPPORT_VARIADIC_MACROS
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__) */
|
/* This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__) */
|
||||||
#ifndef RUN_TEST
|
#ifndef RUN_TEST
|
||||||
#ifdef __STDC_VERSION__
|
|
||||||
#if __STDC_VERSION__ >= 199901L
|
|
||||||
#define UNITY_SUPPORT_VARIADIC_MACROS
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#ifdef UNITY_SUPPORT_VARIADIC_MACROS
|
#ifdef UNITY_SUPPORT_VARIADIC_MACROS
|
||||||
#define RUN_TEST(...) RUN_TEST_AT_LINE(__VA_ARGS__, __LINE__, throwaway)
|
#define RUN_TEST(...) RUN_TEST_AT_LINE(__VA_ARGS__, __LINE__, throwaway)
|
||||||
#define RUN_TEST_AT_LINE(func, line, ...) UnityDefaultTestRun(func, #func, line)
|
#define RUN_TEST_AT_LINE(func, line, ...) UnityDefaultTestRun(func, #func, line)
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Enable default macros for masking param tests test cases */
|
||||||
|
#ifdef UNITY_SUPPORT_TEST_CASES
|
||||||
|
#ifdef UNITY_SUPPORT_VARIADIC_MACROS
|
||||||
|
#if !defined(TEST_CASE) && !defined(UNITY_EXCLUDE_TEST_CASE)
|
||||||
|
#define TEST_CASE(...)
|
||||||
|
#endif
|
||||||
|
#if !defined(TEST_RANGE) && !defined(UNITY_EXCLUDE_TEST_RANGE)
|
||||||
|
#define TEST_RANGE(...)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* If we can't do the tricky version, we'll just have to require them to always include the line number */
|
/* If we can't do the tricky version, we'll just have to require them to always include the line number */
|
||||||
#ifndef RUN_TEST
|
#ifndef RUN_TEST
|
||||||
#ifdef CMOCK
|
#ifdef CMOCK
|
||||||
|
|||||||
3
test/testdata/testRunnerGenerator.c
vendored
3
test/testdata/testRunnerGenerator.c
vendored
@@ -19,9 +19,6 @@
|
|||||||
suitetest- custom prefix for when we want to use custom suite setup/teardown
|
suitetest- custom prefix for when we want to use custom suite setup/teardown
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Support for Meta Test Rig */
|
|
||||||
#define TEST_CASE(a)
|
|
||||||
|
|
||||||
/* Include Passthroughs for Linking Tests */
|
/* Include Passthroughs for Linking Tests */
|
||||||
void putcharSpy(int c) { (void)putchar(c);}
|
void putcharSpy(int c) { (void)putchar(c);}
|
||||||
void flushSpy(void) {}
|
void flushSpy(void) {}
|
||||||
|
|||||||
4
test/testdata/testRunnerGeneratorSmall.c
vendored
4
test/testdata/testRunnerGeneratorSmall.c
vendored
@@ -11,9 +11,6 @@ TEST_FILE("some_file.c")
|
|||||||
spec - normal default prefix. required to run default setup/teardown calls.
|
spec - normal default prefix. required to run default setup/teardown calls.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Support for Meta Test Rig */
|
|
||||||
#define TEST_CASE(a)
|
|
||||||
|
|
||||||
/* Include Passthroughs for Linking Tests */
|
/* Include Passthroughs for Linking Tests */
|
||||||
void putcharSpy(int c) { (void)putchar(c);}
|
void putcharSpy(int c) { (void)putchar(c);}
|
||||||
void flushSpy(void) {}
|
void flushSpy(void) {}
|
||||||
@@ -67,4 +64,3 @@ void spec_ThisTestPassesWhenNormalTeardownRan(void)
|
|||||||
{
|
{
|
||||||
TEST_ASSERT_EQUAL_MESSAGE(1, CounterTeardown, "Normal Teardown Wasn't Run");
|
TEST_ASSERT_EQUAL_MESSAGE(1, CounterTeardown, "Normal Teardown Wasn't Run");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
test/testdata/testRunnerGeneratorWithMocks.c
vendored
4
test/testdata/testRunnerGeneratorWithMocks.c
vendored
@@ -20,9 +20,6 @@
|
|||||||
suitetest- custom prefix for when we want to use custom suite setup/teardown
|
suitetest- custom prefix for when we want to use custom suite setup/teardown
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Support for Meta Test Rig */
|
|
||||||
#define TEST_CASE(a)
|
|
||||||
|
|
||||||
/* Include Passthroughs for Linking Tests */
|
/* Include Passthroughs for Linking Tests */
|
||||||
void putcharSpy(int c) { (void)putchar(c);}
|
void putcharSpy(int c) { (void)putchar(c);}
|
||||||
void flushSpy(void) {}
|
void flushSpy(void) {}
|
||||||
@@ -194,4 +191,3 @@ void test_ShouldCallMockInitAndVerifyFunctionsForEachTest(void)
|
|||||||
TEST_ASSERT_EQUAL_MESSAGE(Unity.NumberOfTests - 1, mockMock_Destroy_Counter, "Mock Destroy Should Be Called Once Per Test Completed");
|
TEST_ASSERT_EQUAL_MESSAGE(Unity.NumberOfTests - 1, mockMock_Destroy_Counter, "Mock Destroy Should Be Called Once Per Test Completed");
|
||||||
TEST_ASSERT_EQUAL_MESSAGE(0, CMockMemFreeFinalCounter, "Mock MemFreeFinal Should Not Be Called Until End");
|
TEST_ASSERT_EQUAL_MESSAGE(0, CMockMemFreeFinalCounter, "Mock MemFreeFinal Should Not Be Called Until End");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,10 +8,6 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "unity.h"
|
#include "unity.h"
|
||||||
|
|
||||||
/* Support for Meta Test Rig */
|
|
||||||
#define TEST_CASE(...)
|
|
||||||
#define TEST_RANGE(...)
|
|
||||||
|
|
||||||
/* Include Passthroughs for Linking Tests */
|
/* Include Passthroughs for Linking Tests */
|
||||||
void putcharSpy(int c) { (void)putchar(c);}
|
void putcharSpy(int c) { (void)putchar(c);}
|
||||||
void flushSpy(void) {}
|
void flushSpy(void) {}
|
||||||
|
|||||||
Reference in New Issue
Block a user