From: <tj...@us...> - 2010-08-29 01:16:26
|
Revision: 13672 http://alleg.svn.sourceforge.net/alleg/?rev=13672&view=rev Author: tjaden Date: 2010-08-29 01:16:19 +0000 (Sun, 29 Aug 2010) Log Message: ----------- test_driver: Accept multiple .ini files on the command line. Make the run_tests target run all tests in the same process so that we get a summary over all the test cases at the end. Remove the -x, --no-exit-code option as it is no longer needed. Modified Paths: -------------- allegro/branches/4.9/tests/CMakeLists.txt allegro/branches/4.9/tests/test_driver.c allegro/branches/4.9/tests/test_driver.txt Modified: allegro/branches/4.9/tests/CMakeLists.txt =================================================================== --- allegro/branches/4.9/tests/CMakeLists.txt 2010-08-28 22:54:37 UTC (rev 13671) +++ allegro/branches/4.9/tests/CMakeLists.txt 2010-08-29 01:16:19 UTC (rev 13672) @@ -32,15 +32,16 @@ add_custom_target(run_tests DEPENDS test_driver - COMMAND test_driver -x ${CMAKE_CURRENT_SOURCE_DIR}/test_bitmaps.ini - COMMAND test_driver -x ${CMAKE_CURRENT_SOURCE_DIR}/test_bitmaps2.ini - COMMAND test_driver -x ${CMAKE_CURRENT_SOURCE_DIR}/test_blend.ini - COMMAND test_driver -x ${CMAKE_CURRENT_SOURCE_DIR}/test_locking.ini - COMMAND test_driver -x ${CMAKE_CURRENT_SOURCE_DIR}/test_locking2.ini - COMMAND test_driver -x ${CMAKE_CURRENT_SOURCE_DIR}/test_backbuffer.ini - COMMAND test_driver -x ${CMAKE_CURRENT_SOURCE_DIR}/test_image.ini - COMMAND test_driver -x ${CMAKE_CURRENT_SOURCE_DIR}/test_fonts.ini - COMMAND test_driver -x ${CMAKE_CURRENT_SOURCE_DIR}/test_prim.ini + COMMAND test_driver + ${CMAKE_CURRENT_SOURCE_DIR}/test_bitmaps.ini + ${CMAKE_CURRENT_SOURCE_DIR}/test_bitmaps2.ini + ${CMAKE_CURRENT_SOURCE_DIR}/test_blend.ini + ${CMAKE_CURRENT_SOURCE_DIR}/test_locking.ini + ${CMAKE_CURRENT_SOURCE_DIR}/test_locking2.ini + ${CMAKE_CURRENT_SOURCE_DIR}/test_backbuffer.ini + ${CMAKE_CURRENT_SOURCE_DIR}/test_image.ini + ${CMAKE_CURRENT_SOURCE_DIR}/test_fonts.ini + ${CMAKE_CURRENT_SOURCE_DIR}/test_prim.ini ) # vim: set sts=4 sw=4 et: Modified: allegro/branches/4.9/tests/test_driver.c =================================================================== --- allegro/branches/4.9/tests/test_driver.c 2010-08-28 22:54:37 UTC (rev 13671) +++ allegro/branches/4.9/tests/test_driver.c 2010-08-29 01:16:19 UTC (rev 13672) @@ -41,6 +41,8 @@ ALLEGRO_FONT *font; } Font; +int argc; +char const **argv; ALLEGRO_DISPLAY *display; ALLEGRO_BITMAP *membuf; Bitmap bitmaps[MAX_BITMAPS]; @@ -52,7 +54,6 @@ bool save_outputs = false; bool quiet = false; int verbose = 0; -bool no_exit_code = false; int total_tests = 0; int passed_tests = 0; int failed_tests = 0; @@ -155,6 +156,26 @@ error("font limit reached"); } +static void unload_data(void) +{ + int i; + + for (i = 0; i < MAX_BITMAPS; i++) { + al_ustr_free(bitmaps[i].name); + al_destroy_bitmap(bitmaps[i].bitmap[0]); + al_destroy_bitmap(bitmaps[i].bitmap[1]); + } + memset(bitmaps, 0, sizeof(bitmaps)); + + for (i = 0; i < MAX_FONTS; i++) { + al_ustr_free(fonts[i].name); + al_destroy_font(fonts[i].font); + } + memset(fonts, 0, sizeof(fonts)); + + num_global_bitmaps = 0; +} + static void set_target_reset(ALLEGRO_BITMAP *target) { ALLEGRO_TRANSFORM ident; @@ -1075,12 +1096,11 @@ } } -static void partial_tests(ALLEGRO_CONFIG const *cfg, - int argc, char const *argv[]) +static void partial_tests(ALLEGRO_CONFIG const *cfg, int n) { ALLEGRO_USTR *name = al_ustr_new(""); - for (; argc > 0; argc--, argv++) { + while (n > 0) { /* Automatically prepend "test" for convenience. */ if (0 == strncmp(argv[0], "test ", 5)) { al_ustr_assign_cstr(name, argv[0]); @@ -1098,15 +1118,67 @@ else { run_test(cfg, al_cstr(name)); } + + argc--; + argv++; + n--; } al_ustr_free(name); } -int main(int argc, char const *argv[]) +static bool has_suffix(char const *s, char const *suf) { + return (strlen(s) >= strlen(suf)) + && streq(s + strlen(s) - strlen(suf), suf); +} + +static void process_ini_files(void) +{ ALLEGRO_CONFIG *cfg; + int n; + while (argc > 0) { + if (!has_suffix(argv[0], ".ini")) + error("expected .ini arument: %s\n", argv[0]); + cfg = al_load_config_file(argv[0]); + if (!cfg) + error("failed to load config file %s", argv[0]); + + if (verbose) + printf("Running %s\n", argv[0]); + + argc--; + argv++; + + al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP); + load_bitmaps(cfg, "bitmaps", SW); + + al_set_new_bitmap_flags(ALLEGRO_VIDEO_BITMAP); + load_bitmaps(cfg, "bitmaps", HW); + load_fonts(cfg, "fonts"); + + for (n = 0; n < argc; n++) { + if (has_suffix(argv[n], ".ini")) + break; + } + + if (n == 0) + run_matching_tests(cfg, "test "); + else + partial_tests(cfg, n); + + unload_data(); + + al_destroy_config(cfg); + } +} + +int main(const int _argc, const char const *_argv[]) +{ + argc = _argc; + argv = _argv; + if (argc == 1) { error("requires config file argument"); } @@ -1135,20 +1207,11 @@ else if (streq(opt, "-v") || streq(opt, "--verbose")) { verbose++; } - else if (streq(opt, "-x") || streq(opt, "--no-exit-code")) { - no_exit_code = true; - } else { break; } } - cfg = al_load_config_file(argv[0]); - if (!cfg) - error("failed to load config file %s", argv[0]); - argc--; - argv++; - display = al_create_display(640, 480); if (!display) { error("failed to create display"); @@ -1158,29 +1221,16 @@ membuf = al_create_bitmap( al_get_display_width(display), al_get_display_height(display)); - load_bitmaps(cfg, "bitmaps", SW); - al_set_new_bitmap_flags(ALLEGRO_VIDEO_BITMAP); - load_bitmaps(cfg, "bitmaps", HW); - load_fonts(cfg, "fonts"); + process_ini_files(); - if (argc == 0) - run_matching_tests(cfg, "test "); - else - partial_tests(cfg, argc, argv); - - al_destroy_config(cfg); - printf("\n"); printf("total tests: %d\n", total_tests); printf("passed tests: %d\n", passed_tests); printf("failed tests: %d\n", failed_tests); printf("\n"); - if (no_exit_code) - return 0; - else - return !!failed_tests; + return !!failed_tests; } /* vim: set sts=3 sw=3 et: */ Modified: allegro/branches/4.9/tests/test_driver.txt =================================================================== --- allegro/branches/4.9/tests/test_driver.txt 2010-08-28 22:54:37 UTC (rev 13671) +++ allegro/branches/4.9/tests/test_driver.txt 2010-08-29 01:16:19 UTC (rev 13672) @@ -1,7 +1,7 @@ Usage ===== - test_driver [OPTIONS] config.ini [TESTS ...] + test_driver [OPTIONS] config1.ini [TESTS ...] [config2.ini [TESTS...]] ... where options are: @@ -20,9 +20,6 @@ -v -v extra extra verbose - -x, --no-exit-code - return exit code 0 regardless of failures - If the list of tests is omitted then every test in the config file will be run. Otherwise each test named on the command line is run. For convenience, you may drop the "test " prefix on test names. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |