mirror of
https://github.com/ThrowTheSwitch/Unity.git
synced 2025-12-18 14:40:15 +08:00
Added first working implementation.
This commit is contained in:
150
src/unity.c
150
src/unity.c
@@ -67,13 +67,9 @@ static const char UnityStrDetail2Name[] = " " UNITY_DETAIL2_NAME " ";
|
||||
* Pretty Printers & Test Result Output Handlers
|
||||
*-----------------------------------------------*/
|
||||
|
||||
void UnityPrint(const char* string)
|
||||
{
|
||||
const char* pch = string;
|
||||
|
||||
if (pch != NULL)
|
||||
{
|
||||
while (*pch)
|
||||
/*-----------------------------------------------*/
|
||||
/* Local helper function to print characters. */
|
||||
static void UnityPrintChar(const char* pch)
|
||||
{
|
||||
/* printable characters plus CR & LF are printed */
|
||||
if ((*pch <= 126) && (*pch >= 32))
|
||||
@@ -92,18 +88,6 @@ void UnityPrint(const char* string)
|
||||
UNITY_OUTPUT_CHAR('\\');
|
||||
UNITY_OUTPUT_CHAR('n');
|
||||
}
|
||||
#ifdef UNITY_OUTPUT_COLOR
|
||||
/* print ANSI escape code */
|
||||
else if (*pch == 27 && *(pch + 1) == '[')
|
||||
{
|
||||
while (*pch && *pch != 'm')
|
||||
{
|
||||
UNITY_OUTPUT_CHAR(*pch);
|
||||
pch++;
|
||||
}
|
||||
UNITY_OUTPUT_CHAR('m');
|
||||
}
|
||||
#endif
|
||||
/* unprintable characters are shown as codes */
|
||||
else
|
||||
{
|
||||
@@ -111,11 +95,139 @@ void UnityPrint(const char* string)
|
||||
UNITY_OUTPUT_CHAR('x');
|
||||
UnityPrintNumberHex((UNITY_UINT)*pch, 2);
|
||||
}
|
||||
}
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
#ifdef UNITY_OUTPUT_COLOR
|
||||
static UNITY_UINT UnityPrintAnsiEscapeString(const char* string)
|
||||
{
|
||||
const char* pch = string;
|
||||
UNITY_UINT count = 0;
|
||||
|
||||
while (*pch && *pch != 'm')
|
||||
{
|
||||
UNITY_OUTPUT_CHAR(*pch);
|
||||
pch++;
|
||||
count++;
|
||||
}
|
||||
UNITY_OUTPUT_CHAR('m');
|
||||
count++;
|
||||
|
||||
return count;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
void UnityPrint(const char* string)
|
||||
{
|
||||
const char* pch = string;
|
||||
|
||||
if (pch != NULL)
|
||||
{
|
||||
while (*pch)
|
||||
{
|
||||
#ifdef UNITY_OUTPUT_COLOR
|
||||
/* print ANSI escape code */
|
||||
if (*pch == 27 && *(pch + 1) == '[')
|
||||
{
|
||||
pch += UnityPrintAnsiEscapeString(pch);
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
UnityPrintChar(pch);
|
||||
pch++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
#ifndef UNITY_EXCLUDE_PRINT_FORMATTED
|
||||
void UnityPrintFormatted(const char* format, ... )
|
||||
{
|
||||
const char* pch = format;
|
||||
va_list va;
|
||||
va_start(va, format);
|
||||
|
||||
if (pch != NULL)
|
||||
{
|
||||
while (*pch)
|
||||
{
|
||||
/* format identification character */
|
||||
if (*pch == '%')
|
||||
{
|
||||
pch++;
|
||||
|
||||
if (pch != NULL)
|
||||
{
|
||||
switch (*pch)
|
||||
{
|
||||
case 'd':
|
||||
case 'i':
|
||||
{
|
||||
const UNITY_INT number = va_arg(va, UNITY_INT);
|
||||
UnityPrintNumber(number);
|
||||
break;
|
||||
}
|
||||
case 'u':
|
||||
{
|
||||
const UNITY_UINT number = va_arg(va, UNITY_UINT);
|
||||
UnityPrintNumberUnsigned(number);
|
||||
break;
|
||||
}
|
||||
case 'x':
|
||||
case 'X':
|
||||
case 'p':
|
||||
{
|
||||
const UNITY_UINT number = va_arg(va, UNITY_UINT);
|
||||
UNITY_OUTPUT_CHAR('0');
|
||||
UNITY_OUTPUT_CHAR('x');
|
||||
UnityPrintNumberHex(number, 8);
|
||||
break;
|
||||
}
|
||||
case 'c':
|
||||
{
|
||||
const UNITY_INT ch = va_arg(va, UNITY_INT);
|
||||
UnityPrintChar((const char *)&ch);
|
||||
break;
|
||||
}
|
||||
case 's':
|
||||
{ const char * string = va_arg(va, const char *);
|
||||
UnityPrint(string);
|
||||
break;
|
||||
}
|
||||
case '%':
|
||||
default:
|
||||
UnityPrintChar(pch);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef UNITY_OUTPUT_COLOR
|
||||
/* print ANSI escape code */
|
||||
else if (*pch == 27 && *(pch + 1) == '[')
|
||||
{
|
||||
pch += UnityPrintAnsiEscapeString(pch);
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
else if (*pch == '\n')
|
||||
{
|
||||
UNITY_PRINT_EOL();
|
||||
}
|
||||
else
|
||||
{
|
||||
UnityPrintChar(pch);
|
||||
}
|
||||
|
||||
pch++;
|
||||
}
|
||||
}
|
||||
|
||||
va_end(va);
|
||||
}
|
||||
#endif /* ! UNITY_EXCLUDE_PRINT_FORMATTED */
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
void UnityPrintLen(const char* string, const UNITY_UINT32 length)
|
||||
{
|
||||
const char* pch = string;
|
||||
|
||||
@@ -23,6 +23,10 @@
|
||||
#include <stddef.h>
|
||||
#endif
|
||||
|
||||
#ifndef UNITY_EXCLUDE_PRINT_FORMATTED
|
||||
#include <stdarg.h>
|
||||
#endif
|
||||
|
||||
/* Unity Attempts to Auto-Detect Integer Types
|
||||
* Attempt 1: UINT_MAX, ULONG_MAX in <limits.h>, or default to 32 bits
|
||||
* Attempt 2: UINTPTR_MAX in <stdint.h>, or default to same size as long
|
||||
@@ -489,6 +493,11 @@ void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int
|
||||
*-------------------------------------------------------*/
|
||||
|
||||
void UnityPrint(const char* string);
|
||||
|
||||
#ifndef UNITY_EXCLUDE_PRINT_FORMATTED
|
||||
void UnityPrintFormatted(const char* format, ... );
|
||||
#endif
|
||||
|
||||
void UnityPrintLen(const char* string, const UNITY_UINT32 length);
|
||||
void UnityPrintMask(const UNITY_UINT mask, const UNITY_UINT number);
|
||||
void UnityPrintNumberByStyle(const UNITY_INT number, const UNITY_DISPLAY_STYLE_T style);
|
||||
|
||||
Reference in New Issue
Block a user