From e6dfe4d73589ed8193a9fed320031e3265da22a3 Mon Sep 17 00:00:00 2001 From: George Rhoten Date: Wed, 16 Jan 2002 04:33:33 +0000 Subject: [PATCH] ICU-770 Verify that ICU can be reused after calling u_cleanup X-SVN-Rev: 7439 --- icu4c/source/test/cintltst/cintltst.c | 97 ++++++++++++---------- icu4c/source/test/cintltst/usrchtst.c | 1 + icu4c/source/tools/ctestfw/ctest.c | 42 ++++------ icu4c/source/tools/ctestfw/unicode/ctest.h | 19 +++-- 4 files changed, 85 insertions(+), 74 deletions(-) diff --git a/icu4c/source/test/cintltst/cintltst.c b/icu4c/source/test/cintltst/cintltst.c index e5ce661b5b9..9ba63337f26 100644 --- a/icu4c/source/test/cintltst/cintltst.c +++ b/icu4c/source/test/cintltst/cintltst.c @@ -57,67 +57,73 @@ int main(int argc, const char* const argv[]) UResourceBundle *rb; UConverter *cnv; + while (REPEAT_TESTS > 0) { + #ifdef CTST_LEAK_CHECK - ctst_init(); + ctst_init(); #endif - /* If no ICU_DATA environment was set, try to fake up one. */ - ctest_setICU_DATA(); + /* If no ICU_DATA environment was set, try to fake up one. */ + ctest_setICU_DATA(); #ifdef XP_MAC_CONSOLE - argc = ccommand((char***)&argv); + argc = ccommand((char***)&argv); #endif - cnv = ucnv_open(NULL, &errorCode); - if(cnv != NULL) { - /* ok */ - ucnv_close(cnv); - } else { - fprintf(stderr, - "*** Failure! The default converter cannot be opened.\n" - "*** Check the ICU_DATA environment variable and \n" - "*** check that the data files are present.\n"); - return 1; - } - - /* try more data */ - cnv = ucnv_open("iso-8859-7", &errorCode); - if(cnv != 0) { - /* ok */ - ucnv_close(cnv); - } else { - fprintf(stderr, - "*** Failure! The converter for iso-8859-7 cannot be opened.\n" + cnv = ucnv_open(NULL, &errorCode); + if(cnv != NULL) { + /* ok */ + ucnv_close(cnv); + } else { + fprintf(stderr, + "*** Failure! The default converter cannot be opened.\n" "*** Check the ICU_DATA environment variable and \n" "*** check that the data files are present.\n"); - return 1; - } + return 1; + } - rb = ures_open(NULL, "en", &errorCode); - if(U_SUCCESS(errorCode)) { - /* ok */ - ures_close(rb); - } else { - fprintf(stderr, - "*** Failure! The \"en\" locale resource bundle cannot be opened.\n" - "*** Check the ICU_DATA environment variable and \n" - "*** check that the data files are present.\n"); - return 1; - } + /* try more data */ + cnv = ucnv_open("iso-8859-7", &errorCode); + if(cnv != 0) { + /* ok */ + ucnv_close(cnv); + } else { + fprintf(stderr, + "*** Failure! The converter for iso-8859-7 cannot be opened.\n" + "*** Check the ICU_DATA environment variable and \n" + "*** check that the data files are present.\n"); + return 1; + } - fprintf(stdout, "Default locale for this run is %s\n", uloc_getDefault()); + rb = ures_open(NULL, "en", &errorCode); + if(U_SUCCESS(errorCode)) { + /* ok */ + ures_close(rb); + } else { + fprintf(stderr, + "*** Failure! The \"en\" locale resource bundle cannot be opened.\n" + "*** Check the ICU_DATA environment variable and \n" + "*** check that the data files are present.\n"); + return 1; + } - root = NULL; - addAllTests(&root); - nerrors = processArgs(root, argc, argv); - cleanUpTestTree(root); + fprintf(stdout, "Default locale for this run is %s\n", uloc_getDefault()); + + root = NULL; + addAllTests(&root); + nerrors = processArgs(root, argc, argv); + if (--REPEAT_TESTS > 0) { + printf("Repeating tests %d more time(s)\n", REPEAT_TESTS); + } + cleanUpTestTree(root); #ifdef CTST_LEAK_CHECK - ctst_freeAll(); + ctst_freeAll(); - /* To check for leaks */ + /* To check for leaks */ - u_cleanup(); /* nuke the hashtable.. so that any still-open cnvs are leaked */ + u_cleanup(); /* nuke the hashtable.. so that any still-open cnvs are leaked */ #endif + } return nerrors ? 1 : 0; } @@ -344,5 +350,6 @@ void ctst_freeAll() { free(ctst_allocated_stuff[i]); } } + _testDirectory=NULL; } #endif diff --git a/icu4c/source/test/cintltst/usrchtst.c b/icu4c/source/test/cintltst/usrchtst.c index 1570081a7b6..b96d50c68a2 100644 --- a/icu4c/source/test/cintltst/usrchtst.c +++ b/icu4c/source/test/cintltst/usrchtst.c @@ -91,6 +91,7 @@ static void TestEnd() { TOCLOSE_ = TRUE; close(); + TOCLOSE_ = TRUE; } /** diff --git a/icu4c/source/tools/ctestfw/ctest.c b/icu4c/source/tools/ctestfw/ctest.c index 4fb0dd13620..edc1184d269 100644 --- a/icu4c/source/tools/ctestfw/ctest.c +++ b/icu4c/source/tools/ctestfw/ctest.c @@ -57,10 +57,13 @@ static void iterateTestsWithLevel( const TestNode *root, int len, static void help ( const char *argv0 ); static int ERRONEOUS_FUNCTION_COUNT = 0; - int ERROR_COUNT = 0; +static int ERROR_COUNT = 0; /* Count of errors from all tests. */ static int INDENT_LEVEL = 0; - int VERBOSITY = 0; /* be No-verbose by default */ - int ERR_MSG =1; /*error messages will be displayed by default*/ +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? */ /*-------------------------------------------*/ /* strncmp that also makes sure there's a \0 at s2[0] */ @@ -420,7 +423,6 @@ int processArgs(const TestNode* root, const TestNode* toRun; int i; int doList = FALSE; - int runAll = FALSE; int subtreeOptionSeen = FALSE; int errorCount = 0; @@ -448,8 +450,6 @@ int processArgs(const TestNode* root, if( doList == TRUE) showTests(toRun); - else if( runAll == TRUE) - runTests(toRun); else runTests(toRun); @@ -457,11 +457,7 @@ int processArgs(const TestNode* root, subtreeOptionSeen = TRUE; } - else if (strcmp( argv[i], "-v" )==0 ) - { - VERBOSITY = TRUE; - } - else if (strcmp( argv[i], "-verbose")==0 ) + else if (strcmp( argv[i], "-v" )==0 || strcmp( argv[i], "-verbose")==0) { VERBOSITY = TRUE; } @@ -469,21 +465,19 @@ int processArgs(const TestNode* root, { doList = TRUE; } - else if (strcmp( argv[i], "-all") ==0) + else if (strcmp( argv[i], "-e") ==0) { - runAll = TRUE; + QUICK = TRUE; } - else if(strcmp( argv[i], "-a") == 0) - { - runAll = TRUE; - } - else if(strcmp( argv[i], "-n") == 0) + else if(strcmp( argv[i], "-n") == 0 || strcmp( argv[i], "-no_err_msg") == 0) { ERR_MSG = FALSE; } - else if (strcmp( argv[i], "-no_err_msg") == 0) + else if (strcmp( argv[i], "-r") == 0) { - ERR_MSG = FALSE; + if (!REPEAT_TESTS_INIT) { + REPEAT_TESTS++; + } } else if (strcmp( argv[1], "-h" )==0 ) { @@ -502,8 +496,6 @@ int processArgs(const TestNode* root, { if( doList == TRUE) showTests(toRun); - else if( runAll == TRUE) - runTests(toRun); else runTests(toRun); @@ -515,6 +507,8 @@ int processArgs(const TestNode* root, printf(" Total errors: %d\n", errorCount ); } + REPEAT_TESTS_INIT = 1; + return errorCount; /* total error count */ } @@ -527,13 +521,13 @@ static void help ( const char *argv0 ) printf("Usage: %s [ -l ] [ -v ] [ -verbose] [-a] [ -all] [-n] \n [ -no_err_msg] [ -h ] [ /path/to/test ]\n", argv0); printf(" -l To get a list of test names\n"); - printf(" -all To run all the test\n"); - printf(" -a To run all the test(same a -all)\n"); + printf(" -e to do exhaustive testing\n"); printf(" -verbose To turn ON verbosity\n"); 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(" -no_err_msg (same as -n) \n"); + printf(" -r repeat tests after calling u_cleanup \n"); printf(" -[/subtest] To run a subtest \n"); printf(" eg: to run just the utility tests type: cintltest /tsutil) \n"); } diff --git a/icu4c/source/tools/ctestfw/unicode/ctest.h b/icu4c/source/tools/ctestfw/unicode/ctest.h index 9050a25c313..f51e043d1a0 100644 --- a/icu4c/source/tools/ctestfw/unicode/ctest.h +++ b/icu4c/source/tools/ctestfw/unicode/ctest.h @@ -55,28 +55,37 @@ typedef void (*TestFunctionPtr)(); typedef struct TestNode TestNode; /** - * Count of errors from all tests. - * May be reset. + * Set this to zero to disable log_verbose() messages. + * Otherwise nonzero to see log_verbose() messages. + * * @internal Internal APIs for testing purpose only */ -T_CTEST_EXPORT_API extern int ERROR_COUNT; +T_CTEST_EXPORT_API extern int REPEAT_TESTS; /** * Set this to zero to disable log_verbose() messages. * Otherwise nonzero to see log_verbose() messages. - * @internal Internal APIs for testing purpose only * + * @internal Internal APIs for testing purpose only */ T_CTEST_EXPORT_API extern int VERBOSITY; /** * Set this to zero to disable log_verbose() messages. * Otherwise nonzero to see log_verbose() messages. - * @internal Internal APIs for testing purpose only * + * @internal Internal APIs for testing purpose only */ T_CTEST_EXPORT_API extern int ERR_MSG; +/** + * Set this to zero to disable some of the slower tests. + * Otherwise nonzero to run the slower tests. + * + * @internal Internal APIs for testing purpose only + */ +T_CTEST_EXPORT_API extern int QUICK; + /** * Show the names of all nodes. *