Logging system added to harness. Logging system doesn't
yet utilize all the given parameters.
This commit is contained in:
parent
e2799bbbb3
commit
2e8932b12e
11 changed files with 268 additions and 71 deletions
|
@ -3,15 +3,10 @@ ACLOCAL_AMFLAGS = -I acinclude -I build-scripts
|
||||||
SUBDIRS = testdummy testrect testplatform
|
SUBDIRS = testdummy testrect testplatform
|
||||||
|
|
||||||
bin_PROGRAMS = runner
|
bin_PROGRAMS = runner
|
||||||
runner_SOURCES = runner.c SDL_test.c
|
runner_SOURCES = runner.c SDL_test.c logger.c xml_logger.c plain_logger.c xml.c
|
||||||
runner_CLAGS = -W -Wall -Wextra -g `sdl-config --cflags` -DSDL_NO_COMPAT
|
runner_CLAGS = -W -Wall -Wextra -g `sdl-config --cflags` -DSDL_NO_COMPAT
|
||||||
runner_LDFLAGS = `sdl-config --libs`
|
runner_LDFLAGS = `sdl-config --libs`
|
||||||
|
|
||||||
bin_PROGRAMS = logger
|
|
||||||
logger_SOURCES = xml_logger.c xml.c plain_logger.c logger.c
|
|
||||||
logger_CLAGS = -W -Wall -Wextra -g `sdl-config --cflags` -DSDL_NO_COMPAT
|
|
||||||
logger_LDFLAGS = `sdl-config --libs`
|
|
||||||
|
|
||||||
install: install-tests
|
install: install-tests
|
||||||
install-tests:
|
install-tests:
|
||||||
-mkdir tests
|
-mkdir tests
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
#include <stdio.h> /* printf/fprintf */
|
#include <stdio.h> /* printf/fprintf */
|
||||||
#include <stdarg.h> /* va_list */
|
#include <stdarg.h> /* va_list */
|
||||||
|
|
||||||
|
#include "logger.h"
|
||||||
|
|
||||||
#include "SDL_test.h"
|
#include "SDL_test.h"
|
||||||
|
|
||||||
/*! \brief return value of test case. Non-zero value means that the test failed */
|
/*! \brief return value of test case. Non-zero value means that the test failed */
|
||||||
|
@ -36,8 +38,16 @@ int _testAssertsFailed;
|
||||||
int _testAssertsPassed;
|
int _testAssertsPassed;
|
||||||
|
|
||||||
void
|
void
|
||||||
_TestCaseInit()
|
_TestCaseInit(const int enable_xml_logging)
|
||||||
{
|
{
|
||||||
|
// setup logging functions
|
||||||
|
// rather afwul way to do it, but function pointers didn't work
|
||||||
|
if(enable_xml_logging) {
|
||||||
|
SetupXMLLogger();
|
||||||
|
} else {
|
||||||
|
SetupPlainLogger();
|
||||||
|
}
|
||||||
|
|
||||||
_testReturnValue = 0;
|
_testReturnValue = 0;
|
||||||
_testAssertsFailed = 0;
|
_testAssertsFailed = 0;
|
||||||
_testAssertsPassed = 0;
|
_testAssertsPassed = 0;
|
||||||
|
@ -46,8 +56,9 @@ _TestCaseInit()
|
||||||
int
|
int
|
||||||
_TestCaseQuit()
|
_TestCaseQuit()
|
||||||
{
|
{
|
||||||
//! \todo make the test fail, if it does not contain any asserts
|
//printf("Asserts: passed %d, failed %d\n", _testAssertsPassed, _testAssertsFailed);
|
||||||
printf("Asserts: passed %d, failed %d\n", _testAssertsPassed, _testAssertsFailed);
|
AssertSummary(_testAssertsFailed + _testAssertsPassed,
|
||||||
|
_testAssertsFailed, _testAssertsPassed);
|
||||||
|
|
||||||
if(_testAssertsFailed == 0 && _testAssertsPassed == 0) {
|
if(_testAssertsFailed == 0 && _testAssertsPassed == 0) {
|
||||||
_testReturnValue = 2;
|
_testReturnValue = 2;
|
||||||
|
@ -66,11 +77,15 @@ AssertEquals(Uint32 expected, Uint32 actual, char* message, ...)
|
||||||
va_start( args, message );
|
va_start( args, message );
|
||||||
SDL_vsnprintf( buf, sizeof(buf), message, args );
|
SDL_vsnprintf( buf, sizeof(buf), message, args );
|
||||||
va_end( args );
|
va_end( args );
|
||||||
printf("AssertEquals failed: expected %d, got %d; %s\n", expected, actual, buf);
|
//printf("AssertEquals failed: expected %d, got %d; %s\n", expected, actual, buf);
|
||||||
|
Assert("AssertEquals", 0, buf, 0);
|
||||||
|
|
||||||
_testReturnValue = 1;
|
_testReturnValue = 1;
|
||||||
_testAssertsFailed++;
|
_testAssertsFailed++;
|
||||||
} else {
|
} else {
|
||||||
printf("AssertEquals passed\n");
|
//printf("AssertEquals passed\n");
|
||||||
|
Assert("AssertEquals", 1, "AssertEquals passed", 0);
|
||||||
|
|
||||||
_testAssertsPassed++;
|
_testAssertsPassed++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -86,11 +101,14 @@ AssertTrue(int condition, char *message, ...)
|
||||||
SDL_vsnprintf( buf, sizeof(buf), message, args );
|
SDL_vsnprintf( buf, sizeof(buf), message, args );
|
||||||
va_end( args );
|
va_end( args );
|
||||||
|
|
||||||
printf("AssertTrue failed: %s\n", buf);
|
//printf("AssertTrue failed: %s\n", buf);
|
||||||
|
Assert("AssertTrue", 0, buf, 0);
|
||||||
|
|
||||||
_testReturnValue = 1;
|
_testReturnValue = 1;
|
||||||
_testAssertsFailed++;
|
_testAssertsFailed++;
|
||||||
} else {
|
} else {
|
||||||
printf("AssertTrue passed\n");
|
//printf("AssertTrue passed\n");
|
||||||
|
Assert("AssertTrue", 1, "AssertTrue passed", 0);
|
||||||
_testAssertsPassed++;
|
_testAssertsPassed++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,7 +123,8 @@ AssertPass(char *message, ...)
|
||||||
SDL_vsnprintf( buf, sizeof(buf), message, args );
|
SDL_vsnprintf( buf, sizeof(buf), message, args );
|
||||||
va_end( args );
|
va_end( args );
|
||||||
|
|
||||||
printf("AssertPass: %s\n", buf);
|
//printf("AssertPass: %s\n", buf);
|
||||||
|
Assert("AssertPass", 1, buf, 0);
|
||||||
|
|
||||||
_testAssertsPassed++;
|
_testAssertsPassed++;
|
||||||
}
|
}
|
||||||
|
@ -120,7 +139,8 @@ AssertFail(char *message, ...)
|
||||||
SDL_vsnprintf( buf, sizeof(buf), message, args );
|
SDL_vsnprintf( buf, sizeof(buf), message, args );
|
||||||
va_end( args );
|
va_end( args );
|
||||||
|
|
||||||
printf("AssertFail: %s\n", buf);
|
//printf("AssertFail: %s\n", buf);
|
||||||
|
Assert("AssertFail", 0, buf, 0);
|
||||||
|
|
||||||
_testAssertsFailed++;
|
_testAssertsFailed++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
|
|
||||||
#include <SDL/SDL.h>
|
#include <SDL/SDL.h>
|
||||||
|
|
||||||
|
#include "logger.h"
|
||||||
|
|
||||||
extern int _testReturnValue;
|
extern int _testReturnValue;
|
||||||
extern int _testAssertsFailed;
|
extern int _testAssertsFailed;
|
||||||
extern int _testAssertsPassed;
|
extern int _testAssertsPassed;
|
||||||
|
@ -52,7 +54,7 @@ typedef struct TestCaseReference {
|
||||||
* the beginning of every test case, before doing
|
* the beginning of every test case, before doing
|
||||||
* anything else.
|
* anything else.
|
||||||
*/
|
*/
|
||||||
void _TestCaseInit();
|
void _TestCaseInit(const int enable_xml_logging);
|
||||||
|
|
||||||
/*! \fn _TestCaseQuit
|
/*! \fn _TestCaseQuit
|
||||||
* Deinitializes and exits the test case
|
* Deinitializes and exits the test case
|
||||||
|
|
|
@ -18,8 +18,45 @@ SuiteEndedFp SuiteEnded = 0;
|
||||||
TestStartedFp TestStarted = 0;
|
TestStartedFp TestStarted = 0;
|
||||||
TestEndedFp TestEnded = 0;
|
TestEndedFp TestEnded = 0;
|
||||||
AssertFp Assert = 0;
|
AssertFp Assert = 0;
|
||||||
|
AssertSummaryFp AssertSummary = 0;
|
||||||
LogFp Log = 0;
|
LogFp Log = 0;
|
||||||
|
|
||||||
|
int
|
||||||
|
SetupXMLLogger()
|
||||||
|
{
|
||||||
|
RunStarted = XMLRunStarted;
|
||||||
|
RunEnded = XMLRunEnded;
|
||||||
|
|
||||||
|
SuiteStarted = XMLSuiteStarted;
|
||||||
|
SuiteEnded = XMLSuiteEnded;
|
||||||
|
|
||||||
|
TestStarted = XMLTestStarted;
|
||||||
|
TestEnded = XMLTestEnded;
|
||||||
|
|
||||||
|
Assert = XMLAssert;
|
||||||
|
AssertSummary = XMLAssertSummary;
|
||||||
|
|
||||||
|
Log = XMLLog;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
SetupPlainLogger()
|
||||||
|
{
|
||||||
|
RunStarted = PlainRunStarted;
|
||||||
|
RunEnded = PlainRunEnded;
|
||||||
|
|
||||||
|
SuiteStarted = PlainSuiteStarted;
|
||||||
|
SuiteEnded = PlainSuiteEnded;
|
||||||
|
|
||||||
|
TestStarted = PlainTestStarted;
|
||||||
|
TestEnded = PlainTestEnded;
|
||||||
|
|
||||||
|
Assert = PlainAssert;
|
||||||
|
AssertSummary = PlainAssertSummary;
|
||||||
|
|
||||||
|
Log = PlainLog;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Prints the given message to stderr. Function adds nesting
|
* Prints the given message to stderr. Function adds nesting
|
||||||
* to the output.
|
* to the output.
|
||||||
|
@ -39,6 +76,7 @@ LogGenericOutput(const char *message, ...)
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
/*!
|
/*!
|
||||||
* Test app for logging functionality
|
* Test app for logging functionality
|
||||||
*/
|
*/
|
||||||
|
@ -48,29 +86,9 @@ main(int argc, char *argv[])
|
||||||
int xml_enabled = 1;
|
int xml_enabled = 1;
|
||||||
|
|
||||||
if(xml_enabled) {
|
if(xml_enabled) {
|
||||||
RunStarted = XMLRunStarted;
|
SetupXMLLogger();
|
||||||
RunEnded = XMLRunEnded;
|
|
||||||
|
|
||||||
SuiteStarted = XMLSuiteStarted;
|
|
||||||
SuiteEnded = XMLSuiteEnded;
|
|
||||||
|
|
||||||
TestStarted = XMLTestStarted;
|
|
||||||
TestEnded = XMLTestEnded;
|
|
||||||
|
|
||||||
Assert = XMLAssert;
|
|
||||||
Log = XMLLog;
|
|
||||||
} else {
|
} else {
|
||||||
RunStarted = PlainRunStarted;
|
SetupPlainLogger();
|
||||||
RunEnded = PlainRunEnded;
|
|
||||||
|
|
||||||
SuiteStarted = PlainSuiteStarted;
|
|
||||||
SuiteEnded = PlainSuiteEnded;
|
|
||||||
|
|
||||||
TestStarted = PlainTestStarted;
|
|
||||||
TestEnded = PlainTestEnded;
|
|
||||||
|
|
||||||
Assert = PlainAssert;
|
|
||||||
Log = PlainLog;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RunStarted(LogGenericOutput, "some_<data_>here&here", 0);
|
RunStarted(LogGenericOutput, "some_<data_>here&here", 0);
|
||||||
|
@ -84,3 +102,4 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
// Function pointer to function which handles to output
|
// Function pointer to function which handles to output
|
||||||
typedef int (*LogOutputFp)(const char *, ...);
|
typedef int (*LogOutputFp)(const char *, ...);
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Generic logger interface
|
* Generic logger interface
|
||||||
*
|
*
|
||||||
|
@ -42,12 +41,29 @@ typedef void (*SuiteEndedFp)(int testsPassed, int testsFailed, int testsSkipped,
|
||||||
typedef void (*TestStartedFp)(const char *testName, const char *suiteName,
|
typedef void (*TestStartedFp)(const char *testName, const char *suiteName,
|
||||||
const char *testDescription, time_t startTime);
|
const char *testDescription, time_t startTime);
|
||||||
typedef void (*TestEndedFp)(const char *testName, const char *suiteName, int testResult,
|
typedef void (*TestEndedFp)(const char *testName, const char *suiteName, int testResult,
|
||||||
int numAsserts, time_t endTime, time_t totalRuntime);
|
time_t endTime, time_t totalRuntime);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Note: for assertResult, non-zero == pass, zero == failure
|
||||||
|
*
|
||||||
|
*/
|
||||||
typedef void (*AssertFp)(const char *assertName, int assertResult, const char *assertMessage,
|
typedef void (*AssertFp)(const char *assertName, int assertResult, const char *assertMessage,
|
||||||
time_t eventTime);
|
time_t eventTime);
|
||||||
|
typedef void (*AssertSummaryFp)(int numAsserts, int numAssertsFailed, int numAssertsPass);
|
||||||
|
|
||||||
|
|
||||||
typedef void (*LogFp)(const char *logMessage, time_t eventTime);
|
typedef void (*LogFp)(const char *logMessage, time_t eventTime);
|
||||||
|
|
||||||
|
int LogGenericOutput(const char *message, ...);
|
||||||
|
|
||||||
|
extern RunStartedFp RunStarted;
|
||||||
|
extern RunEndedFp RunEnded;
|
||||||
|
extern SuiteStartedFp SuiteStarted;
|
||||||
|
extern SuiteEndedFp SuiteEnded;
|
||||||
|
extern TestStartedFp TestStarted;
|
||||||
|
extern TestEndedFp TestEnded;
|
||||||
|
extern AssertFp Assert;
|
||||||
|
extern AssertSummaryFp AssertSummary;
|
||||||
|
extern LogFp Log;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,39 +13,44 @@ void
|
||||||
PlainRunStarted(LogOutputFp outputFn, const char *runnerParameters, time_t eventTime)
|
PlainRunStarted(LogOutputFp outputFn, const char *runnerParameters, time_t eventTime)
|
||||||
{
|
{
|
||||||
logger = outputFn;
|
logger = outputFn;
|
||||||
|
logger("Test run started");
|
||||||
|
logger("Given command line options: %s", "add options");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PlainRunEnded(int testCount, int suiteCount, int testPassCount, int testFailCount,
|
PlainRunEnded(int testCount, int suiteCount, int testPassCount, int testFailCount,
|
||||||
time_t endTime, time_t totalRuntime)
|
time_t endTime, time_t totalRuntime)
|
||||||
{
|
{
|
||||||
// \todo add total number of tests, suites, pass/failure test count
|
logger("Ran %d tests in %0.5f seconds.", testCount, totalRuntime);
|
||||||
|
|
||||||
|
logger("%d tests passed", testPassCount);
|
||||||
|
logger("%d tests failed", testFailCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PlainSuiteStarted(const char *suiteName, time_t eventTime)
|
PlainSuiteStarted(const char *suiteName, time_t eventTime)
|
||||||
{
|
{
|
||||||
logger("Executing tests in %s\n", suiteName);
|
logger("Executing tests in %s", suiteName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PlainSuiteEnded(int testsPassed, int testsFailed, int testsSkipped,
|
PlainSuiteEnded(int testsPassed, int testsFailed, int testsSkipped,
|
||||||
double endTime, time_t totalRuntime)
|
double endTime, time_t totalRuntime)
|
||||||
{
|
{
|
||||||
logger("Suite executed. %d passed, %d failed and %d skipped\n", testsPassed, testsFailed, testsSkipped);
|
logger("Suite executed. %d passed, %d failed and %d skipped", testsPassed, testsFailed, testsSkipped);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PlainTestStarted(const char *testName, const char *suiteName, const char *testDescription, time_t startTime)
|
PlainTestStarted(const char *testName, const char *suiteName, const char *testDescription, time_t startTime)
|
||||||
{
|
{
|
||||||
|
logger("test %s (in %s) started", testName, suiteName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PlainTestEnded(const char *testName, const char *suiteName,
|
PlainTestEnded(const char *testName, const char *suiteName,
|
||||||
int testResult, int numAsserts, time_t endTime, time_t totalRuntime)
|
int testResult, time_t endTime, time_t totalRuntime)
|
||||||
{
|
{
|
||||||
logger("Asserts:%d\n", numAsserts);
|
logger("%s: ok", testName);
|
||||||
logger("%s: ok\n", testName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -53,12 +58,19 @@ PlainAssert(const char *assertName, int assertResult, const char *assertMessage,
|
||||||
time_t eventTime)
|
time_t eventTime)
|
||||||
{
|
{
|
||||||
const char *result = (assertResult) ? "passed" : "failed";
|
const char *result = (assertResult) ? "passed" : "failed";
|
||||||
logger("%s %d: %s\n", assertName, assertResult, assertMessage);
|
logger("%s %d: %s", assertName, assertResult, assertMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PlainAssertSummary(int numAsserts, int numAssertsFailed, int numAssertsPass)
|
||||||
|
{
|
||||||
|
logger("Asserts:%d", numAsserts);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PlainLog(const char *logMessage, time_t eventTime)
|
PlainLog(const char *logMessage, time_t eventTime)
|
||||||
{
|
{
|
||||||
|
logger("%s %d", logMessage, eventTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -17,11 +17,15 @@ void PlainTestStarted(const char *testName, const char *suiteName,
|
||||||
const char *testDescription, time_t startTime);
|
const char *testDescription, time_t startTime);
|
||||||
|
|
||||||
void PlainTestEnded(const char *testName, const char *suiteName,
|
void PlainTestEnded(const char *testName, const char *suiteName,
|
||||||
int testResult, int numAsserts, time_t endTime, time_t totalRuntime);
|
int testResult, time_t endTime, time_t totalRuntime);
|
||||||
|
|
||||||
|
|
||||||
void PlainAssert(const char *assertName, int assertResult, const char *assertMessage,
|
void PlainAssert(const char *assertName, int assertResult, const char *assertMessage,
|
||||||
time_t eventTime);
|
time_t eventTime);
|
||||||
|
|
||||||
|
void PlainAssertSummary(int numAsserts, int numAssertsFailed, int numAssertsPass);
|
||||||
|
|
||||||
|
|
||||||
void PlainLog(const char *logMessage, time_t eventTime);
|
void PlainLog(const char *logMessage, time_t eventTime);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -29,12 +29,12 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include "SDL_test.h"
|
#include "SDL_test.h"
|
||||||
|
#include "logger.h"
|
||||||
|
|
||||||
//!< Function pointer to a test case function
|
//!< Function pointer to a test case function
|
||||||
typedef void (*TestCaseFp)(void *arg);
|
typedef void (*TestCaseFp)(void *arg);
|
||||||
//!< Function pointer to a test case init function
|
//!< Function pointer to a test case init function
|
||||||
typedef void (*TestCaseInitFp)(void);
|
typedef void (*TestCaseInitFp)(const int);
|
||||||
//!< Function pointer to a test case quit function
|
//!< Function pointer to a test case quit function
|
||||||
typedef int (*TestCaseQuitFp)(void);
|
typedef int (*TestCaseQuitFp)(void);
|
||||||
|
|
||||||
|
@ -49,6 +49,8 @@ static int only_selected_test = 0;
|
||||||
static int only_selected_suite = 0;
|
static int only_selected_suite = 0;
|
||||||
//!< Flag for executing only tests that contain certain string in their name
|
//!< Flag for executing only tests that contain certain string in their name
|
||||||
static int only_tests_with_string = 0;
|
static int only_tests_with_string = 0;
|
||||||
|
//!< Flag for enabling XML logging
|
||||||
|
static int xml_enabled = 0;
|
||||||
|
|
||||||
|
|
||||||
//!< Size of the test and suite name buffers
|
//!< Size of the test and suite name buffers
|
||||||
|
@ -86,6 +88,10 @@ typedef struct TestCaseItem {
|
||||||
char *testName;
|
char *testName;
|
||||||
char *suiteName;
|
char *suiteName;
|
||||||
|
|
||||||
|
char *description;
|
||||||
|
long requirements;
|
||||||
|
long timeout;
|
||||||
|
|
||||||
TestCaseInitFp testCaseInit;
|
TestCaseInitFp testCaseInit;
|
||||||
TestCaseFp testCase;
|
TestCaseFp testCase;
|
||||||
TestCaseQuitFp testCaseQuit;
|
TestCaseQuitFp testCaseQuit;
|
||||||
|
@ -213,14 +219,24 @@ LoadTestCases(TestSuiteReference *suites)
|
||||||
item->testCase = testCase;
|
item->testCase = testCase;
|
||||||
item->testCaseQuit = testCaseQuit;
|
item->testCaseQuit = testCaseQuit;
|
||||||
|
|
||||||
|
// copy suite name
|
||||||
int length = strlen(suiteReference->name) + 1;
|
int length = strlen(suiteReference->name) + 1;
|
||||||
item->suiteName = SDL_malloc(length);
|
item->suiteName = SDL_malloc(length);
|
||||||
strcpy(item->suiteName, suiteReference->name);
|
strcpy(item->suiteName, suiteReference->name);
|
||||||
|
|
||||||
|
// copy test name
|
||||||
length = strlen(testReference->name) + 1;
|
length = strlen(testReference->name) + 1;
|
||||||
item->testName = SDL_malloc(length);
|
item->testName = SDL_malloc(length);
|
||||||
strcpy(item->testName, testReference->name);
|
strcpy(item->testName, testReference->name);
|
||||||
|
|
||||||
|
// copy test description
|
||||||
|
length = strlen(testReference->description) + 1;
|
||||||
|
item->description = SDL_malloc(length);
|
||||||
|
strcpy(item->testName, testReference->name);
|
||||||
|
|
||||||
|
item->requirements = testReference->requirements;
|
||||||
|
item->timeout = testReference->timeout;
|
||||||
|
|
||||||
// prepend the list
|
// prepend the list
|
||||||
item->next = testCases;
|
item->next = testCases;
|
||||||
testCases = item;
|
testCases = item;
|
||||||
|
@ -247,6 +263,7 @@ UnloadTestCases(TestCase *testCases)
|
||||||
while(ref) {
|
while(ref) {
|
||||||
SDL_free(ref->testName);
|
SDL_free(ref->testName);
|
||||||
SDL_free(ref->suiteName);
|
SDL_free(ref->suiteName);
|
||||||
|
SDL_free(ref->description);
|
||||||
|
|
||||||
TestCase *temp = ref->next;
|
TestCase *temp = ref->next;
|
||||||
SDL_free(ref);
|
SDL_free(ref);
|
||||||
|
@ -482,7 +499,7 @@ int
|
||||||
ExecuteTest(TestCase *testItem) {
|
ExecuteTest(TestCase *testItem) {
|
||||||
int retVal = 1;
|
int retVal = 1;
|
||||||
if(execute_inproc) {
|
if(execute_inproc) {
|
||||||
testItem->testCaseInit();
|
testItem->testCaseInit(xml_enabled);
|
||||||
|
|
||||||
testItem->testCase(0x0);
|
testItem->testCase(0x0);
|
||||||
|
|
||||||
|
@ -490,7 +507,7 @@ ExecuteTest(TestCase *testItem) {
|
||||||
} else {
|
} else {
|
||||||
int childpid = fork();
|
int childpid = fork();
|
||||||
if(childpid == 0) {
|
if(childpid == 0) {
|
||||||
testItem->testCaseInit();
|
testItem->testCaseInit(xml_enabled);
|
||||||
|
|
||||||
testItem->testCase(0x0);
|
testItem->testCase(0x0);
|
||||||
|
|
||||||
|
@ -517,6 +534,7 @@ printUsage() {
|
||||||
printf("Options:\n");
|
printf("Options:\n");
|
||||||
printf(" --in-proc Executes tests in-process\n");
|
printf(" --in-proc Executes tests in-process\n");
|
||||||
printf(" --show-tests Prints out all the executable tests\n");
|
printf(" --show-tests Prints out all the executable tests\n");
|
||||||
|
printf(" --xml Enables XML logger\n");
|
||||||
printf(" -t --test TEST Executes only tests with given name\n");
|
printf(" -t --test TEST Executes only tests with given name\n");
|
||||||
printf(" -ts --name-contains SUBSTR Executes only tests that have given\n");
|
printf(" -ts --name-contains SUBSTR Executes only tests that have given\n");
|
||||||
printf(" substring in test name\n");
|
printf(" substring in test name\n");
|
||||||
|
@ -545,6 +563,9 @@ ParseOptions(int argc, char *argv[])
|
||||||
else if(SDL_strcmp(arg, "--show-tests") == 0) {
|
else if(SDL_strcmp(arg, "--show-tests") == 0) {
|
||||||
only_print_tests = 1;
|
only_print_tests = 1;
|
||||||
}
|
}
|
||||||
|
else if(SDL_strcmp(arg, "--xml") == 0) {
|
||||||
|
xml_enabled = 1;
|
||||||
|
}
|
||||||
else if(SDL_strcmp(arg, "--test") == 0 || SDL_strcmp(arg, "-t") == 0) {
|
else if(SDL_strcmp(arg, "--test") == 0 || SDL_strcmp(arg, "-t") == 0) {
|
||||||
only_selected_test = 1;
|
only_selected_test = 1;
|
||||||
char *testName = NULL;
|
char *testName = NULL;
|
||||||
|
@ -625,6 +646,11 @@ main(int argc, char *argv[])
|
||||||
#else
|
#else
|
||||||
char *extension = "dylib";
|
char *extension = "dylib";
|
||||||
#endif
|
#endif
|
||||||
|
if(xml_enabled) {
|
||||||
|
SetupXMLLogger();
|
||||||
|
} else {
|
||||||
|
SetupPlainLogger();
|
||||||
|
}
|
||||||
|
|
||||||
const Uint32 startTicks = SDL_GetTicks();
|
const Uint32 startTicks = SDL_GetTicks();
|
||||||
|
|
||||||
|
@ -637,29 +663,49 @@ main(int argc, char *argv[])
|
||||||
if(only_print_tests) {
|
if(only_print_tests) {
|
||||||
TestCase *testItem = NULL;
|
TestCase *testItem = NULL;
|
||||||
for(testItem = testCases; testItem; testItem = testItem->next) {
|
for(testItem = testCases; testItem; testItem = testItem->next) {
|
||||||
|
//! \todo This should be handled by the logging system?
|
||||||
printf("%s (in %s)\n", testItem->testName, testItem->suiteName);
|
printf("%s (in %s)\n", testItem->testName, testItem->suiteName);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RunStarted(LogGenericOutput, NULL, 0);
|
||||||
|
|
||||||
|
char *currentSuiteName = NULL;
|
||||||
|
|
||||||
TestCase *testItem = NULL;
|
TestCase *testItem = NULL;
|
||||||
for(testItem = testCases; testItem; testItem = testItem->next) {
|
for(testItem = testCases; testItem; testItem = testItem->next) {
|
||||||
|
if(currentSuiteName == NULL) {
|
||||||
|
currentSuiteName = testItem->suiteName;
|
||||||
|
SuiteStarted(currentSuiteName, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
TestStarted(testItem->testName, testItem->suiteName,
|
||||||
|
testItem->description, 0);
|
||||||
|
|
||||||
int retVal = ExecuteTest(testItem);
|
int retVal = ExecuteTest(testItem);
|
||||||
|
|
||||||
if(retVal) {
|
if(retVal) {
|
||||||
failureCount++;
|
failureCount++;
|
||||||
if(retVal == 2) {
|
if(retVal == 2) {
|
||||||
printf("%s (in %s): FAILED -> No asserts\n", testItem->testName, testItem->suiteName);
|
//printf("%s (in %s): FAILED -> No asserts\n", testItem->testName, testItem->suiteName);
|
||||||
} else {
|
} else {
|
||||||
printf("%s (in %s): FAILED\n", testItem->testName, testItem->suiteName);
|
//printf("%s (in %s): FAILED\n", testItem->testName, testItem->suiteName);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
passCount++;
|
passCount++;
|
||||||
printf("%s (in %s): ok\n", testItem->testName, testItem->suiteName);
|
//printf("%s (in %s): ok\n", testItem->testName, testItem->suiteName);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n");
|
TestEnded(testItem->testName, testItem->suiteName, retVal, 0, 0);
|
||||||
|
|
||||||
|
if(strncmp(currentSuiteName, testItem->suiteName, 100) != 0) {
|
||||||
|
SuiteEnded(0, 0, 0, 0.0f, 0);
|
||||||
|
|
||||||
|
currentSuiteName = testItem->suiteName;
|
||||||
|
SuiteStarted(currentSuiteName, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UnloadTestCases(testCases);
|
UnloadTestCases(testCases);
|
||||||
|
@ -667,10 +713,14 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
const Uint32 endTicks = SDL_GetTicks();
|
const Uint32 endTicks = SDL_GetTicks();
|
||||||
|
|
||||||
|
RunEnded(passCount + failureCount, 1 /*add suiteCount */,
|
||||||
|
passCount, failureCount, 0, 0);
|
||||||
|
/*
|
||||||
printf("Ran %d tests in %0.5f seconds.\n", (passCount + failureCount), (endTicks-startTicks)/1000.0f);
|
printf("Ran %d tests in %0.5f seconds.\n", (passCount + failureCount), (endTicks-startTicks)/1000.0f);
|
||||||
|
|
||||||
printf("%d tests passed\n", passCount);
|
printf("%d tests passed\n", passCount);
|
||||||
printf("%d tests failed\n", failureCount);
|
printf("%d tests failed\n", failureCount);
|
||||||
|
*/
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ AddOpenTag(const char *tag)
|
||||||
|
|
||||||
const int tagSize = SDL_strlen(tag) + 1;
|
const int tagSize = SDL_strlen(tag) + 1;
|
||||||
openTag->tag = SDL_malloc(tagSize);
|
openTag->tag = SDL_malloc(tagSize);
|
||||||
strncpy(openTag->tag, tag, tagSize);
|
strncpy((char *)openTag->tag, (char *)tag, tagSize);
|
||||||
|
|
||||||
openTag->next = openTags;
|
openTag->next = openTags;
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ RemoveOpenTag(const char *tag)
|
||||||
// It prevents opening and ending tag mismatch
|
// It prevents opening and ending tag mismatch
|
||||||
if(SDL_strcmp(tempTag, tag) == 0) {
|
if(SDL_strcmp(tempTag, tag) == 0) {
|
||||||
TagList *openTag = openTags;
|
TagList *openTag = openTags;
|
||||||
SDL_free(openTag->tag);
|
SDL_free((char *)openTag->tag);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
|
@ -175,7 +175,7 @@ const char *EscapeString(const char *string) {
|
||||||
* \return Lower-case version of the given string
|
* \return Lower-case version of the given string
|
||||||
*/
|
*/
|
||||||
char *
|
char *
|
||||||
ToLowerCase(char *string)
|
ToLowerCase(const char *string)
|
||||||
{
|
{
|
||||||
const int size = SDL_strlen(string);
|
const int size = SDL_strlen(string);
|
||||||
char *ret = SDL_malloc(size + 1);
|
char *ret = SDL_malloc(size + 1);
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <SDL/SDL.h>
|
#include <SDL/SDL.h>
|
||||||
|
|
||||||
#include "xml.h"
|
#include "xml.h"
|
||||||
|
@ -32,19 +35,19 @@ XMLRunStarted(LogOutputFp outputFn, const char *runnerParameters, time_t eventTi
|
||||||
{
|
{
|
||||||
logger = outputFn;
|
logger = outputFn;
|
||||||
|
|
||||||
char *output = XMLOpenDocument("teSTtlog");
|
char *output = XMLOpenDocument("testlog");
|
||||||
logger(output);
|
logger(output);
|
||||||
SDL_free(output);
|
SDL_free(output);
|
||||||
|
|
||||||
output = XMLOpenElement("paRameters");
|
output = XMLOpenElement("parameters");
|
||||||
logger(output);
|
logger(output);
|
||||||
SDL_free(output);
|
SDL_free(output);
|
||||||
|
|
||||||
output = XMLAddContent(runnerParameters);
|
output = XMLAddContent("Add: runner parameter");
|
||||||
logger(output);
|
logger(output);
|
||||||
SDL_free(output);
|
SDL_free(output);
|
||||||
|
|
||||||
output = XMLCloseElement("Parameters");
|
output = XMLCloseElement("parameters");
|
||||||
logger(output);
|
logger(output);
|
||||||
SDL_free(output);
|
SDL_free(output);
|
||||||
}
|
}
|
||||||
|
@ -53,7 +56,7 @@ void
|
||||||
XMLRunEnded(int testCount, int suiteCount, int testPassCount, int testFailCount,
|
XMLRunEnded(int testCount, int suiteCount, int testPassCount, int testFailCount,
|
||||||
time_t endTime, time_t totalRuntime)
|
time_t endTime, time_t totalRuntime)
|
||||||
{
|
{
|
||||||
char *output = XMLCloseDocument("testlOg");
|
char *output = XMLCloseDocument("testlog");
|
||||||
logger(output);
|
logger(output);
|
||||||
SDL_free(output);
|
SDL_free(output);
|
||||||
}
|
}
|
||||||
|
@ -65,12 +68,12 @@ XMLSuiteStarted(const char *suiteName, time_t eventTime)
|
||||||
logger(output);
|
logger(output);
|
||||||
SDL_free(output);
|
SDL_free(output);
|
||||||
|
|
||||||
output = XMLOpenElement("EVENTTime");
|
output = XMLOpenElement("eventtime");
|
||||||
logger(output);
|
logger(output);
|
||||||
SDL_free(output);
|
SDL_free(output);
|
||||||
|
|
||||||
//XMLAddContent(evenTime);
|
//XMLAddContent(evenTime);
|
||||||
output = XMLCloseElement("eventTIME");
|
output = XMLCloseElement("eventtime");
|
||||||
logger(output);
|
logger(output);
|
||||||
SDL_free(output);
|
SDL_free(output);
|
||||||
}
|
}
|
||||||
|
@ -130,9 +133,31 @@ XMLTestStarted(const char *testName, const char *suiteName, const char *testDesc
|
||||||
|
|
||||||
void
|
void
|
||||||
XMLTestEnded(const char *testName, const char *suiteName,
|
XMLTestEnded(const char *testName, const char *suiteName,
|
||||||
int testResult, int numAsserts, time_t endTime, time_t totalRuntime)
|
int testResult, time_t endTime, time_t totalRuntime)
|
||||||
{
|
{
|
||||||
char *output = XMLCloseElement("test");
|
char *output = XMLOpenElement("result");
|
||||||
|
logger(output);
|
||||||
|
SDL_free(output);
|
||||||
|
|
||||||
|
if(testResult) {
|
||||||
|
if(testResult == 2) {
|
||||||
|
output = XMLAddContent("failed -> no assert");
|
||||||
|
} else {
|
||||||
|
output = XMLAddContent("failed");
|
||||||
|
}
|
||||||
|
logger(output);
|
||||||
|
SDL_free(output);
|
||||||
|
} else {
|
||||||
|
output = XMLAddContent("passed");
|
||||||
|
logger(output);
|
||||||
|
SDL_free(output);
|
||||||
|
|
||||||
|
}
|
||||||
|
output = XMLCloseElement("result");
|
||||||
|
logger(output);
|
||||||
|
SDL_free(output);
|
||||||
|
|
||||||
|
output = XMLCloseElement("test");
|
||||||
logger(output);
|
logger(output);
|
||||||
SDL_free(output);
|
SDL_free(output);
|
||||||
}
|
}
|
||||||
|
@ -153,7 +178,7 @@ XMLAssert(const char *assertName, int assertResult, const char *assertMessage,
|
||||||
logger(output);
|
logger(output);
|
||||||
SDL_free(output);
|
SDL_free(output);
|
||||||
|
|
||||||
output = XMLOpenElement("result");
|
output = XMLCloseElement("result");
|
||||||
logger(output);
|
logger(output);
|
||||||
SDL_free(output);
|
SDL_free(output);
|
||||||
|
|
||||||
|
@ -162,6 +187,57 @@ XMLAssert(const char *assertName, int assertResult, const char *assertMessage,
|
||||||
SDL_free(output);
|
SDL_free(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
XMLAssertSummary(int numAsserts, int numAssertsFailed, int numAssertsPass)
|
||||||
|
{
|
||||||
|
char *output = XMLOpenElement("assertSummary");
|
||||||
|
logger(output);
|
||||||
|
SDL_free(output);
|
||||||
|
|
||||||
|
output = XMLOpenElement("assertCount");
|
||||||
|
logger(output);
|
||||||
|
SDL_free(output);
|
||||||
|
|
||||||
|
//XMLAddContent() \todo add string conversion
|
||||||
|
|
||||||
|
output = XMLCloseElement("assertCount");
|
||||||
|
logger(output);
|
||||||
|
SDL_free(output);
|
||||||
|
|
||||||
|
output = XMLOpenElement("assertsPassed");
|
||||||
|
logger(output);
|
||||||
|
SDL_free(output);
|
||||||
|
|
||||||
|
const int bufferSize = sizeof(int) * 8 + 1;
|
||||||
|
//char buffer[bufferSize];
|
||||||
|
char *buffer = SDL_malloc(bufferSize);
|
||||||
|
memset(buffer, 'a', bufferSize);
|
||||||
|
|
||||||
|
//SDL_vsnprintf(buffer, bufferSize, "%d", numAssertsPass);
|
||||||
|
snprintf(buffer, sizeof(buffer), "%d", numAssertsPass);
|
||||||
|
buffer[3] = 'a';
|
||||||
|
//printf("DEBUG |Ê%s == %d of size %d", buffer, numAssertsPass, bufferSize);
|
||||||
|
XMLAddContent(buffer);
|
||||||
|
|
||||||
|
output = XMLCloseElement("assertsPassed");
|
||||||
|
logger(output);
|
||||||
|
SDL_free(output);
|
||||||
|
|
||||||
|
output = XMLOpenElement("assertsFailed");
|
||||||
|
logger(output);
|
||||||
|
SDL_free(output);
|
||||||
|
|
||||||
|
//XMLAddContent() \todo add string conversion
|
||||||
|
|
||||||
|
output = XMLCloseElement("assertsFailed");
|
||||||
|
logger(output);
|
||||||
|
SDL_free(output);
|
||||||
|
|
||||||
|
output = XMLCloseElement("assertSummary");
|
||||||
|
logger(output);
|
||||||
|
SDL_free(output);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
XMLLog(const char *logMessage, time_t eventTime)
|
XMLLog(const char *logMessage, time_t eventTime)
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,11 +16,14 @@ void XMLSuiteEnded(int testsPassed, int testsFailed, int testsSkipped,
|
||||||
void XMLTestStarted(const char *testName, const char *suiteName, const char *testDescription, time_t startTime);
|
void XMLTestStarted(const char *testName, const char *suiteName, const char *testDescription, time_t startTime);
|
||||||
|
|
||||||
void XMLTestEnded(const char *testName, const char *suiteName,
|
void XMLTestEnded(const char *testName, const char *suiteName,
|
||||||
int testResult, int numAsserts, time_t endTime, time_t totalRuntime);
|
int testResult, time_t endTime, time_t totalRuntime);
|
||||||
|
|
||||||
void XMLAssert(const char *assertName, int assertResult, const char *assertMessage,
|
void XMLAssert(const char *assertName, int assertResult, const char *assertMessage,
|
||||||
time_t eventTime);
|
time_t eventTime);
|
||||||
|
|
||||||
|
void XMLAssertSummary(int numAsserts, int numAssertsFailed, int numAssertsPass);
|
||||||
|
|
||||||
|
|
||||||
void XMLLog(const char *logMessage, time_t eventTime);
|
void XMLLog(const char *logMessage, time_t eventTime);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue