The intent of UNITY_WEAK_PRAGMA is that we have weak symbols for setUp
and tearDown in unity.o, so that developers can override these symbols
if needed but the link works right if they are not defined.
In order to do this using #pragma, the pragma and the definition of the
function (not the declaration) need to be present in the same translation
unit (source code file).
Previously, the UNITY_WEAK_PRAGMA code was just declaring the setUp
function, but not defining it, which means that developers had to add an
empty setUp function to their tests in order to link.
- casting to a (void*) was giving warnings to some compilers about double casting
- casting from a u8 to u16/32/64 was giving warnings about changing alignment requirements
Double castings look ugly. And if Unity is compiled with -Wcast-qual flag these type castings produce a lot of warnings:
unity/src/unity.c:490:80: warning: cast discards ‘__attribute__((const))’ qualifier from pointer target type [-Wcast-qual]
UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US16*)(void*)ptr_exp, style);
^
- `UNITY_WEAK_ATTRIBUTE`, if defined, is placed before declarations of weakly
linked symbols. If not manually defined, it will be automatically set to
`__attribute__((weak))` on GCC and Clang, except for Clang for Win32.
- `UNITY_WEAK_PRAGMA`, if defined, will cause preprocessor to emit
`#pragma weak setUp`, etc. Ignored if `UNITY_WEAK_ATTRIBUTE` is defined.
- `UNITY_NO_WEAK` undefines both of the above resulting in no weakly
linked symbols.
Work around for ThrowTheSwitch/Unity#93
This change makes parsing the results easier for tools like ceedling,
which was choking when a test used stdout and there wasn't an
EOL after "PASS" (ThrowTheSwitch/Ceedling#41).
warning: cast discards ‘__attribute__((const))’ qualifier from pointer target type [-Wcast-qual]
FYI, "-Wcast-qual" is not a default option.
The main idea: If some function receives "const void*"
why should it operate with "void*" (or something) afterwards (after casting)?
support tests named spec as well.
clean up UnityBegin to make us not have to dig inside it to inject the filename.
Add UNITY_OUTPUT_START() and UNITY_OUTPUT_COMPLETE() for future use.
By printing this newline, the filepath of the failing assertion does not get
preceded by the dot which represents a running test.
This gives the advantage, that the complete output of unity can be used as it is
with a makefile in vim. Every error gets displayed in the quickfix and you can
jump appropiately.
Microchip's XC16 and friends, when used with dsPICs, require that all pointers
to memory which could possibly be in EDS space by adorned with __eds__, e.g.
__eds__ int* p_int
Adding the macro UNITY_PTR_ATTRIBUTE allows Unity's pointers to be decorated
with whatever ridiculous attributes the compiler requires.
This patch fixes testEqualIntArrays in the unity test suite on 16-bit
architectures.
TEST_ASSERT_EQUAL_INT_ARRAY calls UnityAssertEqualIntArray with 'style'
set to UNITY_DISPLAY_STYLE_INT.
UNITY_DISPLAY_STYLE_INT is defined as UNITY_DISPLAY_STYLE_AUTO +
UNITY_DISPLAY_STYLE_INT{16,32,64} (depending on the int width).
However, the switch statement in UnityAssertEqualIntArray has special
cases for the width-specific display styles, but these comparisons
are carried out without clearing the UNITY_DISPLAY_STYLE_AUTO flag.
This means that if 'style' is UNITY_DISPLAY_STYLE_INT, and the int
width is, say, 16, bits, the default case will be hit, and elements
compared as if they were 32 bits wide. Unsurprisingly this causes
a failure in the test named above.