BoostTestTargets.cmake requires the CMake-configurable form of the Boost
test framework to be used (i.e. "#include <BoostTestTargetConfig.h>"), and
checks each test source code file for this, outputting a warning in case
this requirement is not met.
Unfortunately, a conditional in the check is badly specified (the CMake
variable syntax is not followed), so the warning is emitted even when it
should not be.
This patch fixes this bug and restores the correct behavior.
Submitted upstream at https://github.com/rpavlik/cmake-modules/pull/44
Want to verify this is the cause of crashes inside the property code,
since if it's not we have a much bigger problem.
This means all listeners are recursive, with a parent-chain walk on each
setValue call, as has been the case since 'forever'.
- osg::Vec4 objects can't be output to a stream -> use the _NOSTREAM
variant of the test macro.
- ditto for the NULL... thing -> use SG_CHECK_IS_NULL().
- Add an _NOSTREAM variant for each macro (except for SG_TEST_FAIL, that
doesn't take any argument, and for SG_VERIFY, which doesn't attempt to
print its argument to a stream---doesn't sound very useful). So, if a
and b can be output to a stream (without any undesirable side effect,
of course), use for instance SG_CHECK_EQUAL(a, b); otherwise, use
SG_CHECK_EQUAL_NOSTREAM(a, b).
- Add test macros SG_CHECK_IS_NULL, SG_CHECK_IS_NULL_NOSTREAM,
SG_CHECK_IS_NOT_NULL and SG_CHECK_IS_NOT_NULL_NOSTREAM.
- Add a few comments.
- Because of possible operator overloading, make SG_CHECK_EQUAL(a, b)
fail if, and only if (a) == (b) is false (testing if (a) != (b) for
this macro is not correct in general).
- For clarity and consistency, change the messages printed when some
tests fail: SG_VERIFY(some_test) prints 'failed: some_test' (okay),
but SG_CHECK_EQUAL(a, b) used to print 'failed: a != b', which is
inconsistent. Instead, print: 'failed: a == b' because this is what we
know that failed (again, because of possible operator overloading,
pretending we know the the logical value of (a != b) after testing
(a == b) is not correct in general.
Similarly, the "approximate equality tests" SG_CHECK_EQUAL_EP() and
SG_CHECK_EQUAL_EP2() now print something like 'failed: a ~= b' when
they fail, instead of 'failed with epsilon: a != b'.
- The header is needed for std::cerr.
- Also improve the messages when tests fail (spacing, and in some cases
an argument was missing).
- Reorder the macros a tiny bit.
Some of the modules where I previously removed duplicate private
definitions of these macros had these features, and since they seem wise
to me, I'm applying them to the canonical SG_CHECK_EQUAL_EP() and
SG_CHECK_EQUAL_EP2() macros defined in simgear/misc/test_macros.hxx.
COMPARE -> SG_CHECK_EQUAL
COMPARE_EP -> SG_CHECK_EQUAL_EP
COMPARE_EP2 -> SG_CHECK_EQUAL_EP2
VERIFY -> SG_VERIFY
Also remove duplicate private definitions of these macros in test
modules, using instead those defined in simgear/misc/test_macros.hxx.