#ifdef HAVE_CONFIG_H
#include "config.h"
#define __CDIO_CONFIG_H__ 1
#endif
#ifdef HAVE_STDIO_H
#include <stdio.h>
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#include <cdio/logging.h>
char *last_debugmsg = NULL;
char *last_infomsg = NULL;
char *last_warnmsg = NULL;
char *last_errmsg = NULL;
char *last_assertmsg = NULL;
char *last_othermsg = NULL;
/* Here is an example of a custom log handler. */
static void
test_log_handler (cdio_log_level_t level, const char *message)
{
switch(level) {
case CDIO_LOG_DEBUG:
last_debugmsg = strdup(message);
return;
case CDIO_LOG_INFO:
last_infomsg = strdup(message);
return;
case CDIO_LOG_WARN:
last_warnmsg = strdup(message);
return;
case CDIO_LOG_ERROR:
last_errmsg = strdup(message);
return;
case CDIO_LOG_ASSERT:
last_assertmsg = strdup(message);
return;
default:
fprintf(stderr, "level %d message: %s should not happen\n",
level, message);
exit(20);
}
}
int
main(int argc, const char *argv[])
{
const char *test_msg = "test message";
#ifndef HAVE_WIN32_CDROM
cdio_log_handler_t old_log_handler = (cdio_log_handler_t) NULL;
old_log_handler = cdio_log_set_handler(test_log_handler);
if (old_log_handler != cdio_default_log_handler) {
fprintf(stderr, "Should have gotten old log handler back %p vs %p\n",
(void *) old_log_handler,
(void *) cdio_default_log_handler);
exit(1);
}
#else
cdio_log_set_handler(test_log_handler);
#endif
/* Check that calling each of the logger routine appears in the right variable,
based on the log level */
test_msg = "debug";
cdio_debug("%s", test_msg);
if (last_debugmsg != NULL) {
fprintf(stderr, "debug message should have been ignored due to default log level\n");
exit(2);
}
cdio_loglevel_default = CDIO_LOG_DEBUG;
cdio_debug("%s", test_msg);
if (last_debugmsg == NULL ||
strncmp(test_msg, last_debugmsg, strlen(test_msg)) != 0) {
fprintf(stderr, "debug message %s did not get handled\n",
last_debugmsg);
free(last_debugmsg);
exit(2);
}
free(last_debugmsg);
test_msg = "info";
cdio_info("%s", test_msg);
if (strncmp(test_msg, last_infomsg, strlen(test_msg)) != 0) {
fprintf(stderr, "info message %s did not get handled\n", last_infomsg);
free(last_infomsg);
exit(3);
}
free(last_infomsg);
test_msg = "warn";
cdio_warn("%s", test_msg);
if (strncmp(test_msg, last_warnmsg, strlen(test_msg)) != 0) {
fprintf(stderr, "warn message %s did not get handled\n", last_warnmsg);
free(last_warnmsg);
exit(4);
}
free(last_warnmsg);
test_msg = "error";
cdio_error("%s", test_msg);
if (strncmp(test_msg, last_errmsg, strlen(test_msg)) != 0) {
fprintf(stderr, "error message %s did not get handled\n", last_errmsg);
free(last_errmsg);
exit(5);
}
free(last_errmsg);
/* Try using generic cdio_log routine */
test_msg = "debug via cdio_log";
cdio_log(CDIO_LOG_DEBUG, "%s", test_msg);
if (strncmp(test_msg, last_debugmsg, strlen(test_msg)) != 0) {
fprintf(stderr, "debug message %s did not get handled, phase 2\n", last_debugmsg);
free(last_debugmsg);
exit(6);
}
free(last_debugmsg);
test_msg = "info via cdio_log";
cdio_log(CDIO_LOG_INFO, "%s", test_msg);
if (strncmp(test_msg, last_infomsg, strlen(test_msg)) != 0) {
fprintf(stderr, "info message %s did not get handled\n", last_infomsg);
free(last_infomsg);
exit(7);
}
free(last_infomsg);
test_msg = "warn via cdio_log";
cdio_log(CDIO_LOG_WARN, "%s", test_msg);
if (strncmp(test_msg, last_warnmsg, strlen(test_msg)) != 0) {
fprintf(stderr, "warn message %s did not get handled\n", last_warnmsg);
free(last_warnmsg);
exit(8);
}
free(last_warnmsg);
test_msg = "error via cdio_log";
cdio_log(CDIO_LOG_ERROR, "%s", test_msg);
if (strncmp(test_msg, last_errmsg, strlen(test_msg)) != 0) {
fprintf(stderr, "error message %s did not get handled\n", last_errmsg);
free(last_errmsg);
exit(9);
}
free(last_errmsg);
exit(0);
}