mirror of
https://github.com/ThrowTheSwitch/Unity.git
synced 2025-06-26 12:06:42 +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
|
#endif
|
||||||
|
|
||||||
/* Helpful macros for us to use here in Assert functions */
|
/* Helpful macros for us to use here in Assert functions */
|
||||||
#define UNITY_FAIL_AND_BAIL { Unity.CurrentTestFailed = 1; longjmp(Unity.AbortFrame, 1); }
|
#define UNITY_FAIL_AND_BAIL { Unity.CurrentTestFailed = 1; TEST_ABORT(); }
|
||||||
#define UNITY_IGNORE_AND_BAIL { Unity.CurrentTestIgnored = 1; longjmp(Unity.AbortFrame, 1); }
|
#define UNITY_IGNORE_AND_BAIL { Unity.CurrentTestIgnored = 1; TEST_ABORT(); }
|
||||||
#define RETURN_IF_FAIL_OR_IGNORE if (Unity.CurrentTestFailed || Unity.CurrentTestIgnored) return
|
#define RETURN_IF_FAIL_OR_IGNORE if (Unity.CurrentTestFailed || Unity.CurrentTestIgnored) return
|
||||||
|
|
||||||
struct UNITY_STORAGE_T Unity;
|
struct UNITY_STORAGE_T Unity;
|
||||||
@ -480,32 +480,32 @@ static void UnityPrintExpectedAndActualStringsLen(const char* expected, const ch
|
|||||||
* Assertion & Control Helpers
|
* 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 == actual) return 0; /* Both are NULL or same pointer */
|
||||||
if ((expected == NULL) && (actual == NULL))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/* throw error if just expected is NULL */
|
/* print and return true if just expected is NULL */
|
||||||
if (expected == NULL)
|
if (expected == NULL)
|
||||||
{
|
{
|
||||||
UnityTestResultsFailBegin(lineNumber);
|
UnityTestResultsFailBegin(lineNumber);
|
||||||
UnityPrint(UnityStrNullPointerForExpected);
|
UnityPrint(UnityStrNullPointerForExpected);
|
||||||
UnityAddMsgIfSpecified(msg);
|
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)
|
if (actual == NULL)
|
||||||
{
|
{
|
||||||
UnityTestResultsFailBegin(lineNumber);
|
UnityTestResultsFailBegin(lineNumber);
|
||||||
UnityPrint(UnityStrNullPointerForActual);
|
UnityPrint(UnityStrNullPointerForActual);
|
||||||
UnityAddMsgIfSpecified(msg);
|
UnityAddMsgIfSpecified(msg);
|
||||||
UNITY_FAIL_AND_BAIL;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return false if neither is NULL */
|
return 0; /* return false if neither is NULL */
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------
|
/*-----------------------------------------------
|
||||||
@ -578,8 +578,9 @@ void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected,
|
|||||||
UnityPrintPointlessAndBail();
|
UnityPrintPointlessAndBail();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
|
if (expected == actual) return; /* Both are NULL or same pointer */
|
||||||
return;
|
if (UnityIsOneArrayNull(expected, actual, lineNumber, msg))
|
||||||
|
UNITY_FAIL_AND_BAIL;
|
||||||
|
|
||||||
while (elements--)
|
while (elements--)
|
||||||
{
|
{
|
||||||
@ -685,8 +686,9 @@ void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* expected,
|
|||||||
UnityPrintPointlessAndBail();
|
UnityPrintPointlessAndBail();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
|
if (expected == actual) return; /* Both are NULL or same pointer */
|
||||||
return;
|
if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg))
|
||||||
|
UNITY_FAIL_AND_BAIL;
|
||||||
|
|
||||||
while (elements--)
|
while (elements--)
|
||||||
{
|
{
|
||||||
@ -810,8 +812,9 @@ void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* expecte
|
|||||||
UnityPrintPointlessAndBail();
|
UnityPrintPointlessAndBail();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
|
if (expected == actual) return; /* Both are NULL or same pointer */
|
||||||
return;
|
if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg))
|
||||||
|
UNITY_FAIL_AND_BAIL;
|
||||||
|
|
||||||
while (elements--)
|
while (elements--)
|
||||||
{
|
{
|
||||||
@ -1047,8 +1050,9 @@ void UnityAssertEqualStringArray( const char** expected,
|
|||||||
UnityPrintPointlessAndBail();
|
UnityPrintPointlessAndBail();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
|
if (expected == actual) return; /* Both are NULL or same pointer */
|
||||||
return;
|
if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg))
|
||||||
|
UNITY_FAIL_AND_BAIL;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -1107,8 +1111,9 @@ void UnityAssertEqualMemory( UNITY_INTERNAL_PTR expected,
|
|||||||
UnityPrintPointlessAndBail();
|
UnityPrintPointlessAndBail();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
|
if (expected == actual) return; /* Both are NULL or same pointer */
|
||||||
return;
|
if (UnityIsOneArrayNull(expected, actual, lineNumber, msg))
|
||||||
|
UNITY_FAIL_AND_BAIL;
|
||||||
|
|
||||||
while (elements--)
|
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.
|
/* 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. */
|
* 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)
|
* Test Asserts (simple)
|
||||||
|
@ -11,7 +11,9 @@
|
|||||||
#include "unity_config.h"
|
#include "unity_config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef UNITY_EXCLUDE_MATH_H
|
#ifndef UNITY_EXCLUDE_MATH_H
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
@ -374,7 +376,9 @@ struct UNITY_STORAGE_T
|
|||||||
UNITY_COUNTER_TYPE TestIgnores;
|
UNITY_COUNTER_TYPE TestIgnores;
|
||||||
UNITY_COUNTER_TYPE CurrentTestFailed;
|
UNITY_COUNTER_TYPE CurrentTestFailed;
|
||||||
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
||||||
|
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||||
jmp_buf AbortFrame;
|
jmp_buf AbortFrame;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct UNITY_STORAGE_T Unity;
|
extern struct UNITY_STORAGE_T Unity;
|
||||||
@ -537,9 +541,13 @@ extern const char UnityStrErr64[];
|
|||||||
* Test Running Macros
|
* Test Running Macros
|
||||||
*-------------------------------------------------------*/
|
*-------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||||
#define TEST_PROTECT() (setjmp(Unity.AbortFrame) == 0)
|
#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__) */
|
/* 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
|
||||||
|
@ -99,7 +99,9 @@ void testUnitySizeInitializationReminder(void)
|
|||||||
UNITY_COUNTER_TYPE TestIgnores;
|
UNITY_COUNTER_TYPE TestIgnores;
|
||||||
UNITY_COUNTER_TYPE CurrentTestFailed;
|
UNITY_COUNTER_TYPE CurrentTestFailed;
|
||||||
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
||||||
|
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||||
jmp_buf AbortFrame;
|
jmp_buf AbortFrame;
|
||||||
|
#endif
|
||||||
} _Expected_Unity;
|
} _Expected_Unity;
|
||||||
#else
|
#else
|
||||||
struct {
|
struct {
|
||||||
@ -113,7 +115,9 @@ void testUnitySizeInitializationReminder(void)
|
|||||||
UNITY_COUNTER_TYPE TestIgnores;
|
UNITY_COUNTER_TYPE TestIgnores;
|
||||||
UNITY_COUNTER_TYPE CurrentTestFailed;
|
UNITY_COUNTER_TYPE CurrentTestFailed;
|
||||||
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
||||||
|
#ifndef UNITY_EXCLUDE_SETJMP_H
|
||||||
jmp_buf AbortFrame;
|
jmp_buf AbortFrame;
|
||||||
|
#endif
|
||||||
} _Expected_Unity;
|
} _Expected_Unity;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user