diff --git a/test/test-automation/.hgignore b/test/test-automation/.hgignore index 24a79dc29..95327e9ba 100644 --- a/test/test-automation/.hgignore +++ b/test/test-automation/.hgignore @@ -21,3 +21,4 @@ runner # for Eclipse .project .cproject +.settings diff --git a/test/test-automation/asserts.c b/test/test-automation/asserts.c new file mode 100644 index 000000000..3eb734022 --- /dev/null +++ b/test/test-automation/asserts.c @@ -0,0 +1,36 @@ +/* + Copyright (C) 2011 Markus Kauppila + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef _ASSERTS_C +#define _ASSERTS_C + +#include "asserts.h" + +#include + +void +assertEquals(Uint32 expected, Uint32 actual) +{ + if(expected != actual) { + exit(1); + } +} + +#endif diff --git a/test/test-automation/asserts.h b/test/test-automation/asserts.h index d0f74f9a9..1d47ed545 100644 --- a/test/test-automation/asserts.h +++ b/test/test-automation/asserts.h @@ -23,7 +23,6 @@ #include - void assertEquals(Uint32 expected, Uint32 actual); #endif diff --git a/test/test-automation/runner.c b/test/test-automation/runner.c index 1456de2f4..53c719aee 100644 --- a/test/test-automation/runner.c +++ b/test/test-automation/runner.c @@ -18,48 +18,50 @@ 3. This notice may not be removed or altered from any source distribution. */ -#include "SDL/SDL_loadso.h" +#include "SDL/SDL.h" #include #include #include #include + int main(int argc, char *argv[]) { - int pid = getpid(); - int testsFailed = 0, testsPassed = 0; - + + // Handle command line arguments + + // print: Testing againts SDL version fuu (rev: bar) + + int failureCount = 0, passCount = 0; + + const Uint32 startTicks = SDL_GetTicks(); + char *libName = "libtest.so"; - printf("%d: Loading .so containing tests\n", pid); void *library = SDL_LoadObject(libName); if(library == NULL) { printf("Loading %s failed\n", libName); printf("%s\n", SDL_GetError()); } - printf("%d: Asking for the test case names\n", pid); - char **(*suite)(void); - suite = (char **(*)(void)) SDL_LoadFunction(library, "suite"); + const char **(*suite)(void); + suite = (const char **(*)(void)) SDL_LoadFunction(library, "suite"); if(suite == NULL) { - printf("%d: Retrieving test names failed, suite == NULL\n", pid); + printf("Retrieving test names failed, suite == NULL\n"); printf("%s\n", SDL_GetError()); } else { - char **tests = suite(); + const char **tests = suite(); char *testname = NULL; int counter = 0; - for(; (testname = tests[counter]); ++counter) { + for(; (testname = (char *) tests[counter]); ++counter) { int childpid = fork(); - if(childpid == 0) { - pid = getpid(); - - printf("%d: Loading test: %s\n", pid, testname); + if(childpid == 0) { void (*test)(void *arg); test = (void (*)(void *)) SDL_LoadFunction(library, testname); if(test == NULL) { - printf("%d: Loading test failed, tests == NULL\n", pid); + printf("Loading test failed, tests == NULL\n"); printf("%s\n", SDL_GetError()); } else { test(0x0); @@ -68,30 +70,55 @@ int main(int argc, char *argv[]) { } else { int stat_lock = -1; int child = wait(&stat_lock); - - if(WIFEXITED(stat_lock)) { - int rv = WEXITSTATUS(stat_lock); - printf("%d: %d exited normally with value %d\n", pid, child, rv); - testsPassed++; + char *errorMsg = NULL; + int passed = -1; + if(WIFEXITED(stat_lock)) { + int returnValue = WEXITSTATUS(stat_lock); + + if(returnValue == 0) { + passed = 1; + } else { + passed = 0; + } } else if(WIFSIGNALED(stat_lock)) { int signal = WTERMSIG(stat_lock); - printf("%d: %d was killed by signal nro %d\n", pid, child, signal); - - testsFailed++; + //printf("%d: %d was killed by signal nro %d\n", pid, child, signal); + //errorMsg = + errorMsg = SDL_malloc(256 * sizeof(char)); + sprintf(errorMsg, "was aborted due to signal nro %d", signal); + + passed = 0; } else if(WIFSTOPPED(stat_lock)) { //int signal = WSTOPSIG(stat_lock); //printf("%d: %d was stopped by signal nro %d\n", pid, child, signal); } + + printf("%s (in %s):", testname, libName); + if(passed) { + passCount++; + printf("\tok\n"); + } else { + failureCount++; + printf("\tfailed\n"); + if(errorMsg) { + printf("\t%s\n", errorMsg); + SDL_free(errorMsg); + } + } } } } - printf("%d: all tests executed\n", pid); - printf("%d: %d tests passed\n", pid, testsPassed); - printf("%d: %d tests failed\n", pid, testsFailed); - SDL_UnloadObject(library); - + + const Uint32 endTicks = SDL_GetTicks(); + + printf("Ran %d tests in %0.3f seconds.\n", (passCount + failureCount), (endTicks-startTicks)/1000.0f); + + printf("all tests executed\n"); + printf("%d tests passed\n", passCount); + printf("%d tests failed\n", failureCount); + return 0; }