summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Hrozek <jakub.hrozek@posteo.se>2015-02-04 18:38:38 +0100
committerAndreas Schneider <asn@cryptomilk.org>2015-02-08 10:29:16 +0100
commitb14b55efa6700f164dee6e129cc481375a605b0f (patch)
tree954e2e0fa6a92ba3fe02218f32c93017bc0cf66d
parent3e3d6be03d7c596e3ded99061ff70e2bed2a4b2a (diff)
downloadcmocka-b14b55efa6700f164dee6e129cc481375a605b0f.zip
cmocka-b14b55efa6700f164dee6e129cc481375a605b0f.tar.gz
cmocka-b14b55efa6700f164dee6e129cc481375a605b0f.tar.bz2
cmocka: Add subunit message output type
Signed-off-by: Jakub Hrozek <jakub.hrozek@posteo.se>
-rw-r--r--include/cmocka.h1
-rw-r--r--src/cmocka.c69
2 files changed, 67 insertions, 3 deletions
diff --git a/include/cmocka.h b/include/cmocka.h
index efadd59..e3c733f 100644
--- a/include/cmocka.h
+++ b/include/cmocka.h
@@ -1954,6 +1954,7 @@ void vprint_error(const char* const format, va_list args) CMOCKA_PRINTF_ATTRIBUT
enum cm_message_output {
CM_OUTPUT_STDOUT,
+ CM_OUTPUT_SUBUNIT,
};
/**
diff --git a/src/cmocka.c b/src/cmocka.c
index fc8c5a1..1047ff2 100644
--- a/src/cmocka.c
+++ b/src/cmocka.c
@@ -1865,6 +1865,23 @@ void print_error(const char* const format, ...) {
}
/* New formatter */
+static enum cm_message_output cm_get_output(void)
+{
+ enum cm_message_output output = global_msg_output;
+ char *env;
+
+ env = getenv("CMOCKA_MESSAGE_OUTPUT");
+ if (env != NULL) {
+ if (strcasecmp(env, "STDOUT") == 0) {
+ output = CM_OUTPUT_STDOUT;
+ } else if (strcasecmp(env, "SUBUNIT") == 0) {
+ output = CM_OUTPUT_SUBUNIT;
+ }
+ }
+
+ return output;
+}
+
enum cm_printf_type {
PRINTF_TEST_START,
PRINTF_TEST_SUCCESS,
@@ -1934,12 +1951,44 @@ static void cmprintf_standard(enum cm_printf_type type,
}
}
+static void cmprintf_subunit(enum cm_printf_type type,
+ const char *test_name,
+ const char *error_message)
+{
+ switch (type) {
+ case PRINTF_TEST_START:
+ print_message("test: %s\n", test_name);
+ break;
+ case PRINTF_TEST_SUCCESS:
+ print_message("success: %s\n", test_name);
+ break;
+ case PRINTF_TEST_FAILURE:
+ print_message("failure: %s", test_name);
+ if (error_message != NULL) {
+ print_message(" [\n%s]\n", error_message);
+ }
+ break;
+ case PRINTF_TEST_SKIPPED:
+ print_message("skip: %s\n", test_name);
+ break;
+ case PRINTF_TEST_ERROR:
+ print_message("error: %s [ %s ]", test_name, error_message);
+ break;
+ }
+}
+
static void cmprintf_group_start(const size_t num_tests)
{
- switch (global_msg_output) {
+ enum cm_message_output output;
+
+ output = cm_get_output();
+
+ switch (output) {
case CM_OUTPUT_STDOUT:
cmprintf_group_start_standard(num_tests);
break;
+ case CM_OUTPUT_SUBUNIT:
+ break;
}
}
@@ -1949,7 +1998,11 @@ static void cmprintf_group_finish(size_t total_executed,
size_t total_errors,
struct CMUnitTestState *cm_tests)
{
- switch (global_msg_output) {
+ enum cm_message_output output;
+
+ output = cm_get_output();
+
+ switch (output) {
case CM_OUTPUT_STDOUT:
cmprintf_group_finish_standard(total_executed,
total_passed,
@@ -1957,6 +2010,8 @@ static void cmprintf_group_finish(size_t total_executed,
total_errors,
cm_tests);
break;
+ case CM_OUTPUT_SUBUNIT:
+ break;
}
}
@@ -1964,10 +2019,18 @@ static void cmprintf(enum cm_printf_type type,
const char *test_name,
const char *error_message)
{
- switch (global_msg_output) {
+ va_list ap;
+ enum cm_message_output output;
+
+ output = cm_get_output();
+
+ switch (output) {
case CM_OUTPUT_STDOUT:
cmprintf_standard(type, test_name, error_message);
break;
+ case CM_OUTPUT_SUBUNIT:
+ cmprintf_subunit(type, test_name, error_message);
+ break;
}
}