mirror of
https://github.com/ThrowTheSwitch/Unity.git
synced 2025-06-26 03:17:59 +08:00
Merge pull request #250 from jsalling/feature/optional-setjmp
Optional UNITY_EXCLUDE_SETJMP_H, different control flow
This commit is contained in:
49
src/unity.c
49
src/unity.c
@ -13,8 +13,8 @@ void UNITY_OUTPUT_CHAR(int);
|
||||
#endif
|
||||
|
||||
/* Helpful macros for us to use here in Assert functions */
|
||||
#define UNITY_FAIL_AND_BAIL { Unity.CurrentTestFailed = 1; longjmp(Unity.AbortFrame, 1); }
|
||||
#define UNITY_IGNORE_AND_BAIL { Unity.CurrentTestIgnored = 1; longjmp(Unity.AbortFrame, 1); }
|
||||
#define UNITY_FAIL_AND_BAIL { Unity.CurrentTestFailed = 1; TEST_ABORT(); }
|
||||
#define UNITY_IGNORE_AND_BAIL { Unity.CurrentTestIgnored = 1; TEST_ABORT(); }
|
||||
#define RETURN_IF_FAIL_OR_IGNORE if (Unity.CurrentTestFailed || Unity.CurrentTestIgnored) return
|
||||
|
||||
struct UNITY_STORAGE_T Unity;
|
||||
@ -480,32 +480,32 @@ static void UnityPrintExpectedAndActualStringsLen(const char* expected, const ch
|
||||
* Assertion & Control Helpers
|
||||
*-----------------------------------------------*/
|
||||
|
||||
static int UnityCheckArraysForNull(UNITY_INTERNAL_PTR expected, UNITY_INTERNAL_PTR actual, const UNITY_LINE_TYPE lineNumber, const char* msg)
|
||||
static int UnityIsOneArrayNull(UNITY_INTERNAL_PTR expected,
|
||||
UNITY_INTERNAL_PTR actual,
|
||||
const UNITY_LINE_TYPE lineNumber,
|
||||
const char* msg)
|
||||
{
|
||||
/* return true if they are both NULL */
|
||||
if ((expected == NULL) && (actual == NULL))
|
||||
return 1;
|
||||
if (expected == actual) return 0; /* Both are NULL or same pointer */
|
||||
|
||||
/* throw error if just expected is NULL */
|
||||
/* print and return true if just expected is NULL */
|
||||
if (expected == NULL)
|
||||
{
|
||||
UnityTestResultsFailBegin(lineNumber);
|
||||
UnityPrint(UnityStrNullPointerForExpected);
|
||||
UnityAddMsgIfSpecified(msg);
|
||||
UNITY_FAIL_AND_BAIL;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* throw error if just actual is NULL */
|
||||
/* print and return true if just actual is NULL */
|
||||
if (actual == NULL)
|
||||
{
|
||||
UnityTestResultsFailBegin(lineNumber);
|
||||
UnityPrint(UnityStrNullPointerForActual);
|
||||
UnityAddMsgIfSpecified(msg);
|
||||
UNITY_FAIL_AND_BAIL;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* return false if neither is NULL */
|
||||
return 0;
|
||||
return 0; /* return false if neither is NULL */
|
||||
}
|
||||
|
||||
/*-----------------------------------------------
|
||||
@ -578,8 +578,9 @@ void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected,
|
||||
UnityPrintPointlessAndBail();
|
||||
}
|
||||
|
||||
if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
|
||||
return;
|
||||
if (expected == actual) return; /* Both are NULL or same pointer */
|
||||
if (UnityIsOneArrayNull(expected, actual, lineNumber, msg))
|
||||
UNITY_FAIL_AND_BAIL;
|
||||
|
||||
while (elements--)
|
||||
{
|
||||
@ -685,8 +686,9 @@ void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* expected,
|
||||
UnityPrintPointlessAndBail();
|
||||
}
|
||||
|
||||
if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
|
||||
return;
|
||||
if (expected == actual) return; /* Both are NULL or same pointer */
|
||||
if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg))
|
||||
UNITY_FAIL_AND_BAIL;
|
||||
|
||||
while (elements--)
|
||||
{
|
||||
@ -810,8 +812,9 @@ void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* expecte
|
||||
UnityPrintPointlessAndBail();
|
||||
}
|
||||
|
||||
if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
|
||||
return;
|
||||
if (expected == actual) return; /* Both are NULL or same pointer */
|
||||
if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg))
|
||||
UNITY_FAIL_AND_BAIL;
|
||||
|
||||
while (elements--)
|
||||
{
|
||||
@ -1047,8 +1050,9 @@ void UnityAssertEqualStringArray( const char** expected,
|
||||
UnityPrintPointlessAndBail();
|
||||
}
|
||||
|
||||
if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
|
||||
return;
|
||||
if (expected == actual) return; /* Both are NULL or same pointer */
|
||||
if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg))
|
||||
UNITY_FAIL_AND_BAIL;
|
||||
|
||||
do
|
||||
{
|
||||
@ -1107,8 +1111,9 @@ void UnityAssertEqualMemory( UNITY_INTERNAL_PTR expected,
|
||||
UnityPrintPointlessAndBail();
|
||||
}
|
||||
|
||||
if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
|
||||
return;
|
||||
if (expected == actual) return; /* Both are NULL or same pointer */
|
||||
if (UnityIsOneArrayNull(expected, actual, lineNumber, msg))
|
||||
UNITY_FAIL_AND_BAIL;
|
||||
|
||||
while (elements--)
|
||||
{
|
||||
|
@ -72,7 +72,7 @@ void tearDown(void);
|
||||
|
||||
/* It is not necessary for you to call PASS. A PASS condition is assumed if nothing fails.
|
||||
* This method allows you to abort a test immediately with a PASS state, ignoring the remainder of the test. */
|
||||
#define TEST_PASS() longjmp(Unity.AbortFrame, 1)
|
||||
#define TEST_PASS() TEST_ABORT()
|
||||
|
||||
/*-------------------------------------------------------
|
||||
* Test Asserts (simple)
|
||||
|
@ -11,7 +11,9 @@
|
||||
#include "unity_config.h"
|
||||
#endif
|
||||
|
||||
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||
#include <setjmp.h>
|
||||
#endif
|
||||
|
||||
#ifndef UNITY_EXCLUDE_MATH_H
|
||||
#include <math.h>
|
||||
@ -374,7 +376,9 @@ struct UNITY_STORAGE_T
|
||||
UNITY_COUNTER_TYPE TestIgnores;
|
||||
UNITY_COUNTER_TYPE CurrentTestFailed;
|
||||
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
||||
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||
jmp_buf AbortFrame;
|
||||
#endif
|
||||
};
|
||||
|
||||
extern struct UNITY_STORAGE_T Unity;
|
||||
@ -537,9 +541,13 @@ extern const char UnityStrErr64[];
|
||||
* Test Running Macros
|
||||
*-------------------------------------------------------*/
|
||||
|
||||
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||
#define TEST_PROTECT() (setjmp(Unity.AbortFrame) == 0)
|
||||
|
||||
#define TEST_ABORT() {longjmp(Unity.AbortFrame, 1);}
|
||||
#define TEST_ABORT() longjmp(Unity.AbortFrame, 1)
|
||||
#else
|
||||
#define TEST_PROTECT() 1
|
||||
#define TEST_ABORT() return
|
||||
#endif
|
||||
|
||||
/* This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__) */
|
||||
#ifndef RUN_TEST
|
||||
|
@ -99,7 +99,9 @@ void testUnitySizeInitializationReminder(void)
|
||||
UNITY_COUNTER_TYPE TestIgnores;
|
||||
UNITY_COUNTER_TYPE CurrentTestFailed;
|
||||
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
||||
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||
jmp_buf AbortFrame;
|
||||
#endif
|
||||
} _Expected_Unity;
|
||||
#else
|
||||
struct {
|
||||
@ -113,7 +115,9 @@ void testUnitySizeInitializationReminder(void)
|
||||
UNITY_COUNTER_TYPE TestIgnores;
|
||||
UNITY_COUNTER_TYPE CurrentTestFailed;
|
||||
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
||||
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||
jmp_buf AbortFrame;
|
||||
#endif
|
||||
} _Expected_Unity;
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user