Tiny changes to runner
authorMarkus Kauppila <markus.kauppila@gmail.com>
Mon, 23 May 2011 17:49:06 +0300
changeset 5662 57fc58008d76
parent 5661 8e1868d46268
child 5663 91f77d89e689
Tiny changes to runner
test/test-automation/.hgignore
test/test-automation/asserts.c
test/test-automation/asserts.h
test/test-automation/runner.c
--- a/test/test-automation/.hgignore	Mon May 23 13:14:09 2011 +0300
+++ b/test/test-automation/.hgignore	Mon May 23 17:49:06 2011 +0300
@@ -21,3 +21,4 @@
 # for Eclipse
 .project
 .cproject
+.settings
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/test-automation/asserts.c	Mon May 23 17:49:06 2011 +0300
@@ -0,0 +1,36 @@
+/*
+  Copyright (C) 2011 Markus Kauppila <markus.kauppila@gmail.com>
+
+  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 <stdlib.h>
+
+void
+assertEquals(Uint32 expected, Uint32 actual)
+{
+	if(expected != actual) {
+		exit(1);
+	}
+}
+
+#endif
--- a/test/test-automation/asserts.h	Mon May 23 13:14:09 2011 +0300
+++ b/test/test-automation/asserts.h	Mon May 23 17:49:06 2011 +0300
@@ -23,7 +23,6 @@
 
 #include <SDL/SDL.h>
 
-
 void assertEquals(Uint32 expected, Uint32 actual);
 
 #endif
--- a/test/test-automation/runner.c	Mon May 23 13:14:09 2011 +0300
+++ b/test/test-automation/runner.c	Mon May 23 17:49:06 2011 +0300
@@ -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 <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <sys/types.h>
 
+
 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);
-
 				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 @@
 			} else {
 				int stat_lock = -1;
 				int child = wait(&stat_lock);
-				
+
+				char *errorMsg = NULL;
+				int passed = -1;
 				if(WIFEXITED(stat_lock)) {
-					int rv = WEXITSTATUS(stat_lock);
-					printf("%d: %d exited normally with value %d\n", pid, child, rv);
+					int returnValue = WEXITSTATUS(stat_lock);
 
-					testsPassed++;
+					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();
 
-	SDL_UnloadObject(library);
-	
+	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;
 }