Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Refactoring the TestCaseInit and TestCaseQuit functions

to be caller from the Runner.
  • Loading branch information
mkauppila committed Jun 4, 2011
1 parent 343e28c commit 23d5100986b8fafe06c63898ade0ce2682d38878
@@ -5,7 +5,7 @@ SUBDIRS = tests testrect
bin_PROGRAMS = runner
runner_SOURCES = runner.c SDL_test.c
runner_CLAGS = -W -Wall -Wextra -g `sdl-config --cflags` -DSDL_NO_COMPAT
runner_LDFLAGS = `sdl-config --libs`
runner_LDFLAGS = `sdl-config --libs`

install: install-tests
install-tests:
@@ -27,27 +27,31 @@
#include "SDL_test.h"

/*! \brief return value of test case. Non-zero value means that the test failed */
static int _testReturnValue;
int _testReturnValue;

static int _testAssertsFailed;
static int _testAssertsPassed;
/*! \brief counts the failed asserts */
int _testAssertsFailed;

/*! \brief counts the passed asserts */
int _testAssertsPassed;

void
TestCaseInit()
_TestCaseInit()
{
_testReturnValue = 0;
_testAssertsFailed = 0;
_testAssertsPassed = 0;
}

int
TestCaseQuit()
_TestCaseQuit()
{
printf("Asserts: passed %d, failed %d\n", _testAssertsPassed, _testAssertsFailed);
//! \todo make the test fail, if it does not contain any asserts
printf("Asserts: passed %d, failed %d\n", _testAssertsPassed, _testAssertsFailed);fflush(stdout);
return _testReturnValue;
}

void
void
AssertEquals(Uint32 expected, Uint32 actual, char* message, ...)
{
va_list args;
@@ -57,15 +61,15 @@ AssertEquals(Uint32 expected, Uint32 actual, char* message, ...)
va_start( args, message );
SDL_vsnprintf( buf, sizeof(buf), message, args );
va_end( args );
printf("Assert Equals failed: expected %d, got %d; %s\n", expected, actual, buf);
printf("Assert Equals failed: expected %d, got %d; %s\n", expected, actual, buf); fflush(stdout);
_testReturnValue = 1;
_testAssertsFailed++;
} else {
_testAssertsPassed++;
}
}

void
void
AssertTrue(int condition, char *message, ...)
{
va_list args;
@@ -23,11 +23,14 @@

#include <SDL/SDL.h>

extern int _testReturnValue;
extern int _testAssertsFailed;
extern int _testAssertsPassed;

// \todo Should these be consts?
#define TEST_ENABLED 1
#define TEST_DISABLED 0


/*!
* Holds information about a test case
*/
@@ -38,23 +41,28 @@ typedef struct TestCaseReference {
long requirements; /*!< Set to TEST_REQUIRES_OPENGL, TEST_REQUIRES_AUDIO, ... */
} TestCaseReference;

/*! \fn TestCaseInit
/*! \fn _TestCaseInit
* Initialized the test case. Must be called at
* the beginning of every test case, before doing
* anything else.
*/
void TestCaseInit();
void _TestCaseInit();

/*! \fn TestCaseQuit
/*! \fn _TestCaseQuit
* Deinitializes and exits the test case
*
* \return 0 if test succeeded, otherwise 1
*/
int TestCaseQuit();

int _TestCaseQuit();

/*!
* todo add comment
*/
void AssertEquals(Uint32 expected, Uint32 actual, char *message, ...);

/*!
* todo add comment
*/
void AssertTrue(int condition, char *message, ...);

#endif
@@ -28,7 +28,11 @@
#include "SDL_test.h"

//!< Function pointer to a test case function
typedef int (*TestCase)(void *arg);
typedef void (*TestCase)(void *arg);
//!< Function pointer to a test case init function
typedef void (*TestCaseInit)(void);
//!< Function pointer to a test case quit function
typedef int (*TestCaseQuit)(void);

//!< Flag for executing tests in-process
static int execute_inproc = 0;
@@ -99,6 +103,7 @@ QueryTestCases(void *library)
return tests;
}


/*!
* Loads test case from a test suite
*
@@ -110,7 +115,7 @@ QueryTestCases(void *library)
TestCase
LoadTestCase(void *suite, char *testName)
{
TestCase test = (int (*)(void *)) SDL_LoadFunction(suite, testName);
TestCase test = (TestCase) SDL_LoadFunction(suite, testName);
if(test == NULL) {
fprintf(stderr, "Loading test failed, tests == NULL\n");
fprintf(stderr, "%s\n", SDL_GetError());
@@ -119,6 +124,43 @@ LoadTestCase(void *suite, char *testName)
return test;
}

/*!
* Loads function that initialises the test case from the
* given test suite.
*
* \param suite Used test suite
*
* \return Function pointer (TestCaseInit) which points to loaded init function. NULL if function fails.
*/
TestCaseInit
LoadTestCaseInit(void *suite) {
TestCaseInit testCaseInit = (TestCaseInit) SDL_LoadFunction(suite, "_TestCaseInit");
if(testCaseInit == NULL) {
fprintf(stderr, "Loading TestCaseInit function failed, testCaseInit == NULL\n");
fprintf(stderr, "%s\n", SDL_GetError());
}

return testCaseInit;
}

/*!
* Loads function that deinitialises the executed test case from the
* given test suite.
*
* \param suite Used test suite
*
* \return Function pointer (TestCaseInit) which points to loaded init function. NULL if function fails.
*/
TestCaseQuit
LoadTestCaseQuit(void *suite) {
TestCaseQuit testCaseQuit = (TestCaseQuit) SDL_LoadFunction(suite, "_TestCaseQuit");
if(testCaseQuit == NULL) {
fprintf(stderr, "Loading TestCaseQuit function failed, testCaseQuit == NULL\n");
fprintf(stderr, "%s\n", SDL_GetError());
}

return testCaseQuit;
}

/*!
* If using out-of-proc execution of tests. This function
@@ -147,6 +189,16 @@ HandleTestReturnValue(int stat_lock)
return returnValue;
}

/*!
* Prints usage information
*/
void printUsage() {
printf("Usage: ./runner [--in-proc] [--help]\n");
printf("Options:\n");
printf(" --in-proc Executes tests in-process\n");
printf(" --help Print this help\n");
}

/*!
* Parse command line arguments
*
@@ -164,13 +216,13 @@ ParseOptions(int argc, char *argv[])
execute_inproc = 1;
}
else if(SDL_strcmp(arg, "--help") == 0 || SDL_strcmp(arg, "-h") == 0) {
printf("Usage: ./runner [--in-proc] [--help]\n");
printf("Options:\n");
printf(" --in-proc Executes tests in-process\n");
printf(" --help Print this help.:\n");
printUsage();
exit(0);
} else {
printf("runner: unknown command '%s'\n", arg);
printUsage();
exit(0);
}
// \todo print error for unknown option
}
}

@@ -206,15 +258,25 @@ main(int argc, char *argv[])

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) {
TestCase test = (TestCase) LoadTestCase(suite, testname);
retVal = test(0x0);
testCaseInit();

test(0x0);

retVal = testCaseQuit();
} else {
int childpid = fork();
if(childpid == 0) {
TestCase test = (TestCase) LoadTestCase(suite, testname);
return test(0x0);
testCaseInit();

test(0x0);

return testCaseQuit();
} else {
int stat_lock = -1;
int child = wait(&stat_lock);
@@ -21,8 +21,8 @@ TestCaseReference **QueryTestSuite() {
return (TestCaseReference **)testSuite;
}

/**
* @brief Tests SDL_IntersectRectAndLine()
/*!
* \brief Tests SDL_IntersectRectAndLine()
*/
int rect_testIntersectRectAndLine (void *arg)
{
@@ -31,8 +31,6 @@ int rect_testIntersectRectAndLine (void *arg)
int x2, y2;
SDL_bool clipped;

TestCaseInit();

x1 = -10;
y1 = 0;
x2 = -10;
@@ -132,6 +130,4 @@ int rect_testIntersectRectAndLine (void *arg)
x1 == 0 && y1 == 31 && x2 == 31 && y2 == 0,
"diagonal line to upper right was incorrectly clipped: %d,%d - %d,%d",
x1, y1, x2, y2);

return TestCaseQuit();
}
@@ -1,6 +1,6 @@
lib_LTLIBRARIES = libtest.la
libtest_la_SOURCES = test.c ../SDL_test.c
libtest_la_CLAGS = -fPIC -g
libtest_la_CLAGS = -fPIC -g
libtest_la_LDFLAGS = `sdl-config --libs`

distclean-local:
@@ -48,36 +48,25 @@ TestCaseReference **QueryTestSuite() {
}

/* Test case functions */
int hello(void *arg)
void hello(void *arg)
{
TestCaseInit();

const char *revision = SDL_GetRevision();

printf("Revision is %s\n", revision);
AssertEquals(3, 5, "fails");

return TestCaseQuit();
AssertEquals(3, 5, "fails");
}

int hello2(void *arg)
void hello2(void *arg)
{
TestCaseInit();

char *msg = "eello";
//msg[0] = 'H';

return TestCaseQuit();
AssertTrue(0, "fails");
}

int hello3(void *arg)
void hello3(void *arg)
{
TestCaseInit();
printf("hello3\n");

AssertEquals(3, 3, "passes");

return TestCaseQuit();
AssertTrue(1, "passes");
}

#endif

0 comments on commit 23d5100

Please sign in to comment.