/* cunit - A little C Unit facility */
-/* Copyright (c) 2005-2012. The SimGrid Team.
+/* Copyright (c) 2005-2014. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
/**
* @addtogroup XBT_cunit
- * @brief Unit test mechanism (to test a set of functions)
+ * @brief Unit testing implementation (see @ref inside_tests_add_units)
*
* This module is mainly intended to allow the tests of SimGrid
* itself and may lack the level of genericity that you would expect
* feature of SimGrid (and this code is sufficient to cover our
* needs, actually, so why should we bother switching?)
*
- * Note that if you want to test a full binary (such as an example),
- * you want to use our integration testing mechanism, not our unit
- * testing one. Please refer to Section \ref
- * inside_cmake_addtest_integration
+ * Unit testing is not intended to write integration tests.
+ * Please refer to \ref inside_tests_add_integration for that instead.
*
- * Some more information on our unit testing is available in Section @ref inside_cmake_addtest_unit.
- *
- * All code intended to be executed as a unit test will be extracted
- * by a script (tools/sg_unit_extract.pl), and must thus be protected
- * between preprocessor definitions, as follows. Note that
- * SIMGRID_TEST string must appear on the endif line too for the
- * script to work, and that this script does not allow to have more
- * than one suite per file. For now, but patches are naturally
- * welcome.
- *
-@verbatim
-#ifdef SIMGRID_TEST
-
-<your code>
-
-#endif // SIMGRID_TEST
-@endverbatim
*
*
* @{
/** @brief Provide informations about the suite declared in this file
* @hideinitializer
*
- * Actually, this macro is not used by C, but by the script
- * extracting the test units, but that should be transparent for you.
+ * Actually, this macro is only used by the script extracting the test
+ * units, but that should be transparent for you.
*
* @param suite_name the short name of this suite, to be used in the --tests argument of testall afterward. Avoid spaces and any other strange chars
* @param suite_title instructive title that testall should display when your suite is run
* @param func a valid function name that will be used to contain all code of this unit
* @param title human informative description of your test (displayed in testall)
*/
+#ifdef __cplusplus
+#define XBT_TEST_UNIT(name,func,title) \
+ extern "C" void func(void); /*prototype*/ \
+ void func(void)
+#else
#define XBT_TEST_UNIT(name,func,title) \
void func(void); /*prototype*/ \
void func(void)
-
+#endif
/* test operations */
XBT_PUBLIC(void) _xbt_test_add(const char *file, int line, const char *fmt,
- ...) _XBT_GNUC_PRINTF(3, 4);
+ ...) XBT_ATTRIB_PRINTF(3, 4);
XBT_PUBLIC(void) _xbt_test_fail(const char *file, int line,
- const char *fmt, ...) _XBT_GNUC_PRINTF(3,
+ const char *fmt, ...) XBT_ATTRIB_PRINTF(3,
4);
XBT_PUBLIC(void) _xbt_test_log(const char *file, int line, const char *fmt,
- ...) _XBT_GNUC_PRINTF(3, 4);
+ ...) XBT_ATTRIB_PRINTF(3, 4);
/** @brief Declare that a new test begins (printf-like parameters, describing the test)
* @hideinitializer */
#define xbt_test_add(...) _xbt_test_add(__FILE__, __LINE__, __VA_ARGS__)
__VA_ARGS__)
#define _xbt_test_assert_CHECK(cond, ...) \
do { if (!(cond)) xbt_test_fail(__VA_ARGS__); } while (0)
+/** @brief Report some details to help debugging when the test fails (shown only on failure)
+ * @hideinitializer */
#define xbt_test_log(...) _xbt_test_log(__FILE__, __LINE__, __VA_ARGS__)
/** @brief Declare that the lastly started test failed because of the provided exception */