ICU-1941 don't fail in liposuction mode

X-SVN-Rev: 9871
This commit is contained in:
Steven R. Loomis 2002-09-17 19:45:03 +00:00
parent 5641297bf3
commit ac39475f03
2 changed files with 112 additions and 22 deletions

View File

@ -42,6 +42,7 @@ typedef enum { RUNTESTS, SHOWTESTS } TestMode;
static char ERROR_LOG[MAX_TEST_LOG][MAXTESTNAME];
/* Local prototypes */
static TestNode* addTestNode( TestNode *root, const char *name );
static TestNode* createTestNode();
@ -57,20 +58,33 @@ static void getNextLevel( const char* name,
static void iterateTestsWithLevel( const TestNode *root, int len,
const TestNode** list,
TestMode mode);
/* If we need to make the framework multi-thread safe
we need to pass around the following 3 vars
*/
static void help ( const char *argv0 );
/**
* Do the work of logging an error. Doesn't increase the error count.
*
* @prefix optional prefix prepended to message, or NULL.
* @param pattern printf style pattern
* @param ap vprintf style arg list
*/
static void vlog_err(const char *prefix, const char *pattern, va_list ap);
static void vlog_info(const char *prefix, const char *pattern, va_list ap);
static void vlog_verbose(const char *prefix, const char *pattern, va_list ap);
/* If we need to make the framework multi-thread safe
we need to pass around the following vars
*/
static int ERRONEOUS_FUNCTION_COUNT = 0;
static int ERROR_COUNT = 0; /* Count of errors from all tests. */
static int DATA_ERROR_COUNT = 0; /* count of data related errors or warnings */
static int INDENT_LEVEL = 0;
int REPEAT_TESTS_INIT = 0; /* Was REPEAT_TESTS initialized? */
int REPEAT_TESTS = 1; /* Number of times to run the test */
int VERBOSITY = 0; /* be No-verbose by default */
int ERR_MSG =1; /* error messages will be displayed by default*/
int QUICK = 1; /* Skip some of the slower tests? */
int WARN_ON_MISSING_DATA = 0; /* Reduce data errs to warnings? */
/*-------------------------------------------*/
/* strncmp that also makes sure there's a \0 at s2[0] */
@ -319,9 +333,18 @@ void runTests ( const TestNode *root )
}
else
{
log_info("\n[All tests passed successfully...]\n");
log_info("\n[All tests passed successfully...]\n");
}
if(DATA_ERROR_COUNT) {
if(WARN_ON_MISSING_DATA==0) {
log_info("\t*Note* some errors are data-loading related. If the data used is not the "
"\tstock ICU data (i.e some have been added or removed), consider using"
"\tthe '-w' option to turn these errors into warnings.\n");
} else {
log_info("\t*WARNING* some data-loading errors were ignored by the -w option.\n");
}
}
}
const char* getTestName(void)
@ -390,6 +413,45 @@ const TestNode* getTest(const TestNode* root, const char* name)
}
}
void vlog_err(const char *prefix, const char *pattern, va_list ap)
{
if( ERR_MSG == FALSE){
return;
}
fprintf(stderr, "%-*s", INDENT_LEVEL," " );
if(prefix) {
fputs(prefix, stderr);
}
vfprintf(stderr, pattern, ap);
fflush(stderr);
va_end(ap);
}
void vlog_info(const char *prefix, const char *pattern, va_list ap)
{
fprintf(stdout, "%-*s", INDENT_LEVEL," " );
if(prefix) {
fputs(prefix, stderr);
}
vfprintf(stdout, pattern, ap);
fflush(stdout);
va_end(ap);
}
void vlog_verbose(const char *prefix, const char *pattern, va_list ap)
{
if ( VERBOSITY == FALSE )
return;
fprintf(stdout, "%-*s", INDENT_LEVEL," " );
if(prefix) {
fputs(prefix, stderr);
}
vfprintf(stdout, pattern, ap);
fflush(stdout);
va_end(ap);
}
void log_err(const char* pattern, ...)
{
va_list ap;
@ -400,14 +462,8 @@ void log_err(const char* pattern, ...)
*/
++ERROR_COUNT;
}
if( ERR_MSG == FALSE){
return;
}
va_start(ap, pattern);
fprintf(stderr, "%-*s", INDENT_LEVEL," " );
vfprintf(stderr, pattern, ap);
fflush(stderr);
va_end(ap);
vlog_err(NULL, pattern, ap);
}
void log_info(const char* pattern, ...)
@ -415,27 +471,36 @@ void log_info(const char* pattern, ...)
va_list ap;
va_start(ap, pattern);
fprintf(stdout, "%-*s", INDENT_LEVEL," " );
vfprintf(stdout, pattern, ap);
fflush(stdout);
va_end(ap);
vlog_info(NULL, pattern, ap);
}
void log_verbose(const char* pattern, ...)
{
va_list ap;
if ( VERBOSITY == FALSE )
return;
va_start(ap, pattern);
fprintf(stdout, "%-*s", INDENT_LEVEL," " );
vfprintf(stdout, pattern, ap);
fflush(stdout);
va_end(ap);
vlog_verbose(NULL, pattern, ap);
}
void log_data_err(const char* pattern, ...)
{
va_list ap;
va_start(ap, pattern);
++DATA_ERROR_COUNT; /* for informational message at the end */
if(WARN_ON_MISSING_DATA == 0) {
/* Fatal error. */
if(strchr(pattern, '\n') != NULL) {
++ERROR_COUNT;
}
vlog_err(NULL, pattern, ap); /* no need for prefix in default case */
} else {
vlog_info("[Data] ", pattern, ap);
}
}
int processArgs(const TestNode* root,
int argc,
@ -493,6 +558,10 @@ int processArgs(const TestNode* root,
{
QUICK = FALSE;
}
else if (strcmp( argv[i], "-w") ==0)
{
WARN_ON_MISSING_DATA = TRUE;
}
else if(strcmp( argv[i], "-n") == 0 || strcmp( argv[i], "-no_err_msg") == 0)
{
ERR_MSG = FALSE;
@ -550,6 +619,8 @@ static void help ( const char *argv0 )
printf(" -v To turn ON verbosity(same as -verbose)\n");
printf(" -h To print this message\n");
printf(" -n To turn OFF printing error messages\n");
printf(" -w Don't fail on data-loading errs, just warn. Useful if\n"
" user has reduced/changed the common set of ICU data \n");
printf(" -no_err_msg (same as -n) \n");
printf(" -r repeat tests after calling u_cleanup \n");
printf(" -[/subtest] To run a subtest \n");

View File

@ -87,6 +87,16 @@ T_CTEST_EXPORT_API extern int ERR_MSG;
*/
T_CTEST_EXPORT_API extern int QUICK;
/**
* Set this to nonzero to warn (not error) on missing data.
* Otherwise, zero will cause an error to be propagated when data is not available.
* Affects the behavior of log_dataerr.
*
* @see log_data_err
* @internal Internal APIs for testing purpose only
*/
T_CTEST_EXPORT_API extern int WARN_ON_MISSING_DATA;
/**
* Show the names of all nodes.
*
@ -155,6 +165,15 @@ T_CTEST_API void log_info(const char* pattern, ...);
*/
T_CTEST_API void log_verbose(const char* pattern, ...);
/**
* Log an error message concerning missing data. (printf style)
* If WARN_ON_MISSING_DATA is nonzero, this will case a log_info (warning) to be
* printed, but if it is zero this will produce an error (log_err).
* @param pattern printf-style format string
* @internal Internal APIs for testing purpose only
*/
T_CTEST_API void log_data_err(const char *pattern, ...);
/**
* Processes the command line arguments.
* This is a sample implementation