diff --git a/test/test-automation/SDL_test.c b/test/test-automation/SDL_test.c index ae5538f02..377632139 100644 --- a/test/test-automation/SDL_test.c +++ b/test/test-automation/SDL_test.c @@ -56,15 +56,6 @@ _TestCaseQuit() return _testReturnValue; } - -/*! - * Assert function. Tests if the expected value equals the actual value, then - * the test assert succeeds, otherwise it fails and warns about it. - * - * \param expected Value user expects to have - * \param actual The actual value of tested variable - * \param message Message that will be printed if assert fails - */ void AssertEquals(Uint32 expected, Uint32 actual, char* message, ...) { @@ -83,14 +74,6 @@ AssertEquals(Uint32 expected, Uint32 actual, char* message, ...) } } -/*! - * Assert function. Tests if the given condition is true. True in - * this case means non-zero value. If the condition is true, the - * assert passes, otherwise it fails. - * - * \param condition Condition which will be evaluated - * \param message Message that will be printed if assert fails - */ void AssertTrue(int condition, char *message, ...) { diff --git a/test/test-automation/SDL_test.h b/test/test-automation/SDL_test.h index 5f52e298e..b61fc2d66 100644 --- a/test/test-automation/SDL_test.h +++ b/test/test-automation/SDL_test.h @@ -56,12 +56,22 @@ void _TestCaseInit(); int _TestCaseQuit(); /*! - * todo add comment + * Assert function. Tests if the expected value equals the actual value, then + * the test assert succeeds, otherwise it fails and warns about it. + * + * \param expected Value user expects to have + * \param actual The actual value of tested variable + * \param message Message that will be printed if assert fails */ void AssertEquals(Uint32 expected, Uint32 actual, char *message, ...); /*! - * todo add comment + * Assert function. Tests if the given condition is true. True in + * this case means non-zero value. If the condition is true, the + * assert passes, otherwise it fails. + * + * \param condition Condition which will be evaluated + * \param message Message that will be printed if assert fails */ void AssertTrue(int condition, char *message, ...); diff --git a/test/test-automation/runner.c b/test/test-automation/runner.c index 35ece189a..655512950 100644 --- a/test/test-automation/runner.c +++ b/test/test-automation/runner.c @@ -37,6 +37,15 @@ typedef int (*TestCaseQuit)(void); //!< Flag for executing tests in-process static int execute_inproc = 0; + +//!< Temporary array to hold test suite names +#if defined(linux) || defined( __linux) + char *testSuites[] = { "tests/libtest.so", "tests/libtestrect.so", NULL}; +#else + char *testSuites[] = { "tests/libtest.dylib", "tests/libtestrect.dylib", NULL}; +#endif + + /*! * Returns the name for the dynamic library * which implements the test suite. @@ -45,16 +54,11 @@ static int execute_inproc = 0; * returns the names of the dynamic libraries * implementing the test suites) * - * \return Name of the dummy test suite + * \return Array of test suite names */ -char * +char ** ScanForTestSuites() { -#if defined(linux) || defined( __linux) - char *libName = "tests/libtest.so"; -#else - char *libName = "tests/libtest.dylib"; -#endif - return libName; + return testSuites; } @@ -189,6 +193,49 @@ HandleTestReturnValue(int stat_lock) return returnValue; } +/*! + * Executes a test case. Loads the test, executes it and + * returns the tests return value to the caller. + * + * \param suite The suite from which the test will be loaded + * \param testReference TestCaseReference of the test under execution + * \return The return value of the test. Zero means success, non-zero failure. + */ +int +ExecuteTest(void *suite, TestCaseReference *testReference) { + char *testname = testReference->name; + + TestCaseInit testCaseInit = LoadTestCaseInit(suite); + TestCaseQuit testCaseQuit = LoadTestCaseQuit(suite); + TestCase test = (TestCase) LoadTestCase(suite, testname); + + int retVal = 1; + if(execute_inproc) { + testCaseInit(); + + test(0x0); + + retVal = testCaseQuit(); + } else { + int childpid = fork(); + if(childpid == 0) { + testCaseInit(); + + test(0x0); + + exit(testCaseQuit()); + } else { + int stat_lock = -1; + int child = wait(&stat_lock); + + retVal = HandleTestReturnValue(stat_lock); + } + } + + return retVal; +} + + /*! * Prints usage information */ @@ -243,65 +290,43 @@ main(int argc, char *argv[]) const Uint32 startTicks = SDL_GetTicks(); - char *testSuiteName = ScanForTestSuites(); - void *suite = LoadTestSuite(testSuiteName); - TestCaseReference **tests = QueryTestCases(suite); + char **testSuiteNames = ScanForTestSuites(); - TestCaseReference *reference = NULL; - int counter = 0; + char *testSuiteName = NULL; + int suiteCounter = 0; + for(testSuiteName = testSuiteNames[suiteCounter]; testSuiteName; testSuiteName = testSuiteNames[++suiteCounter]) { + void *suite = LoadTestSuite(testSuiteName); + TestCaseReference **tests = QueryTestCases(suite); - for(reference = tests[counter]; reference; reference = tests[++counter]) { - if(reference->enabled == TEST_DISABLED) { - printf("Test %s (in %s) disabled. Omitting...\n", reference->name, testSuiteName); - } else { - char *testname = reference->name; + TestCaseReference *reference = NULL; + int counter = 0; - printf("Running %s (in %s):\n", testname, testSuiteName); - - TestCaseInit testCaseInit = LoadTestCaseInit(suite); - TestCaseQuit testCaseQuit = LoadTestCaseQuit(suite); - TestCase test = (TestCase) LoadTestCase(suite, testname); - - int retVal = 1; - if(execute_inproc) { - testCaseInit(); - - test(0x0); - - retVal = testCaseQuit(); + for(reference = tests[counter]; reference; reference = tests[++counter]) { + if(reference->enabled == TEST_DISABLED) { + printf("Test %s (in %s) disabled. Omitting...\n", reference->name, testSuiteName); } else { - int childpid = fork(); - if(childpid == 0) { - testCaseInit(); + printf("Executing %s (in %s):\n", reference->name, testSuiteName); - test(0x0); + int retVal = ExecuteTest(suite, reference); - return testCaseQuit(); + if(retVal) { + failureCount++; + if(retVal == 2) { + printf("%s (in %s): FAILED -> No asserts\n", reference->name, testSuiteName); + } else { + printf("%s (in %s): FAILED\n", reference->name, testSuiteName); + } } else { - int stat_lock = -1; - int child = wait(&stat_lock); - - retVal = HandleTestReturnValue(stat_lock); + passCount++; + printf("%s (in %s): ok\n", reference->name, testSuiteName); } } - if(retVal) { - failureCount++; - if(retVal == 2) { - printf("%s (in %s): FAILED -> No asserts\n", testname, testSuiteName); - } else { - printf("%s (in %s): FAILED\n", testname, testSuiteName); - } - } else { - passCount++; - printf("%s (in %s): ok\n", testname, testSuiteName); - } + printf("\n"); } - printf("\n"); + SDL_UnloadObject(suite); } - - SDL_UnloadObject(suite); const Uint32 endTicks = SDL_GetTicks();