tests: Use rtems_test_printer in general

Update #3170.
Update #3199.
This commit is contained in:
Sebastian Huber
2017-10-26 13:59:09 +02:00
parent 46ddc3c5da
commit 7e1029158e
10 changed files with 54 additions and 175 deletions

View File

@@ -5,7 +5,6 @@
#ifndef __BUFFER_TEST_IO_h
#define __BUFFER_TEST_IO_h
#include <rtems/bspIo.h>
#include <rtems/test.h>
#ifdef __cplusplus
@@ -34,186 +33,56 @@ extern "C" {
#define TEST_STATE_STRING "*** TEST STATE: BENCHMARK\n"
#endif
/*
* USE PRINTK TO MINIMIZE SIZE
*/
#if defined(TESTS_USE_PRINTK)
#undef printf
#define printf(...) \
do { \
rtems_printf( &rtems_test_printer, __VA_ARGS__ ); \
} while (0)
#include <rtems/print.h>
#undef puts
#define puts(_s) \
do { \
rtems_printf( &rtems_test_printer, "%s\n", _s ); \
} while (0)
#undef printf
#define printf(...) \
do { \
printk( __VA_ARGS__); \
} while (0)
#undef putchar
#define putchar(_c) \
do { \
rtems_printf( &rtems_test_printer, "%c", _c ); \
} while (0)
#undef puts
#define puts(_s) \
do { \
printk( "%s\n", _s); \
} while (0)
/* Do not call exit() since it closes stdin, etc and pulls in stdio code */
#define rtems_test_exit(_s) \
do { \
rtems_shutdown_executive(0); \
} while (0)
#undef putchar
#define putchar(_c) \
do { \
printk( "%c", _c ); \
} while (0)
#define FLUSH_OUTPUT() \
do { \
} while (0)
/* Do not call exit() since it closes stdin, etc and pulls in stdio code */
#define rtems_test_exit(_s) \
do { \
rtems_shutdown_executive(0); \
} while (0)
#define FLUSH_OUTPUT() \
do { \
} while (0)
#if defined(TEST_STATE_STRING)
#define TEST_BEGIN() \
do { \
printk("\n"); \
printk(TEST_BEGIN_STRING); \
printk(TEST_STATE_STRING); \
} while (0)
#else
#define TEST_BEGIN() \
do { \
printk("\n"); \
printk(TEST_BEGIN_STRING); \
} while (0)
#endif
#define TEST_END() \
do { \
printk( "\n" ); \
printk(TEST_END_STRING); \
printk( "\n" ); \
} while (0)
/*
* BUFFER TEST OUTPUT
*/
#if defined(TEST_STATE_STRING)
#define TEST_BEGIN() \
do { \
rtems_printf( &rtems_test_printer, "\n"); \
rtems_printf( &rtems_test_printer, TEST_BEGIN_STRING ); \
rtems_printf( &rtems_test_printer, TEST_STATE_STRING ); \
} while (0)
#else
#include <stdio.h>
#include <stdlib.h>
#define TEST_PRINT__FORMAT(_fmtpos, _appos) \
__attribute__((__format__(__printf__, _fmtpos, _appos)))
#define _TEST_OUTPUT_BUFFER_SIZE 2048
extern char _test_output_buffer[_TEST_OUTPUT_BUFFER_SIZE];
void _test_output_printf(const char *, ...) TEST_PRINT__FORMAT(1, 2);
void _test_output_append(const char *);
void _test_output_flush(void);
#define rtems_test_exit(_s) \
do { \
fflush(stdout); \
fflush(stderr); \
_test_output_flush(); \
exit(_s); \
} while (0)
#undef printf
#define printf(...) _test_output_printf( __VA_ARGS__ )
#undef puts
#define puts(_string) \
do { \
_test_output_append( _string ); \
_test_output_append( "\n" ); \
} while (0)
#undef putchar
#define putchar(_c) \
do { \
char _buffer[2]; \
_buffer[0] = _c; \
_buffer[1] = '\0'; \
_test_output_append( _buffer ); \
} while (0)
/* we write to stderr when there is a pause() */
#define FLUSH_OUTPUT() _test_output_flush()
#if defined(TEST_STATE_STRING)
#define TEST_BEGIN() \
do { \
_test_output_append( "\n" ); \
_test_output_printf(TEST_BEGIN_STRING); \
_test_output_append(TEST_STATE_STRING); \
_test_output_append( "\n" ); \
} while (0)
#else
#define TEST_BEGIN() \
do { \
_test_output_append( "\n" ); \
_test_output_printf(TEST_BEGIN_STRING); \
_test_output_append( "\n" ); \
} while (0)
#endif
#define TEST_END() \
do { \
_test_output_append( "\n" ); \
_test_output_printf(TEST_END_STRING); \
_test_output_append( "\n" ); \
} while (0)
/*
* Inline the tests this way because adding the code to the support directory
* requires all the makefile files to changed.
*/
#if defined(TEST_INIT)
char _test_output_buffer[_TEST_OUTPUT_BUFFER_SIZE];
int _test_output_buffer_index = 0;
void _test_output_printf(const char* format, ...)
{
va_list args;
char* in;
size_t size;
bool lf;
va_start(args, format);
in = _test_output_buffer + _test_output_buffer_index;
size = vsniprintf(in,
_TEST_OUTPUT_BUFFER_SIZE - _test_output_buffer_index,
format, args);
lf = memchr(in, '\n', size);
_test_output_buffer_index += size;
if ( lf || _test_output_buffer_index >= (_TEST_OUTPUT_BUFFER_SIZE - 80) )
_test_output_flush();
va_end(args);
}
void _test_output_append(const char *_buffer)
{
char* in;
size_t size;
bool lf;
in = _test_output_buffer + _test_output_buffer_index;
size = strlcpy(in, _buffer, _TEST_OUTPUT_BUFFER_SIZE - _test_output_buffer_index);
lf = memchr(in, '\n', size);
if ( lf || _test_output_buffer_index >= (_TEST_OUTPUT_BUFFER_SIZE - 80) )
_test_output_flush();
}
void _test_output_flush(void)
{
printk( _test_output_buffer );
_test_output_buffer_index = 0;
_test_output_buffer[0] = '\0';
}
#endif
#define TEST_BEGIN() \
do { \
rtems_printf( &rtems_test_printer, "\n" ); \
rtems_printf( &rtems_test_printer, TEST_BEGIN_STRING ); \
} while (0)
#endif
#define TEST_END() \
do { \
rtems_printf( &rtems_test_printer, "\n" ); \
rtems_printf( &rtems_test_printer, TEST_END_STRING ); \
rtems_printf( &rtems_test_printer, "\n" ); \
} while (0)
#ifdef __cplusplus
};
#endif

View File

@@ -60,7 +60,7 @@ extern "C" {
&& (((!_Thread_Dispatch_is_enabled()) == false && (_expect) != 0) \
|| ((!_Thread_Dispatch_is_enabled()) && (_expect) == 0)) \
) { \
printk( \
printf( \
"\n_Thread_Dispatch_disable_level is (%i)" \
" not %d detected at %s:%d\n", \
!_Thread_Dispatch_is_enabled(), (_expect), __FILE__, __LINE__ ); \
@@ -77,7 +77,7 @@ extern "C" {
#define check_if_allocator_mutex_is_not_owned() \
do { \
if ( _RTEMS_Allocator_is_owner() ) { \
printk( \
printf( \
"\nRTEMS Allocator Mutex is owned by executing thread " \
"and should not be.\n" \
"Detected at %s:%d\n", \

View File

@@ -14,6 +14,8 @@
#include "test_support.h"
#include "tmacros.h"
#include <rtems/bspIo.h>
static rtems_id locked_print_semaphore; /* synchronisation semaphore */
static int locked_printf_plugin(void *context, const char *fmt, va_list ap)