Commit 7236f2ab authored by Markus Kauppila's avatar Markus Kauppila

Refining the output of XML logger.

parent 2a486b27
...@@ -23,14 +23,11 @@ ...@@ -23,14 +23,11 @@
#include <time.h> #include <time.h>
// Function pointer to function which handles to output
typedef int (*LogOutputFp)(const char *, ...);
/*! /*!
* Generic logger interface * Generic logger interface
* *
*/ */
typedef void (*RunStartedFp)(LogOutputFp outputFn, const char *runnerParameters, time_t eventTime); typedef void (*RunStartedFp)(int parameterCount, char *runnerParameters[], time_t eventTime);
typedef void (*RunEndedFp)(int testCount, int suiteCount, int testPassCount, int testFailCount, typedef void (*RunEndedFp)(int testCount, int suiteCount, int testPassCount, int testFailCount,
time_t endTime, time_t totalRuntime); time_t endTime, time_t totalRuntime);
...@@ -54,7 +51,6 @@ typedef void (*AssertSummaryFp)(int numAsserts, int numAssertsFailed, int numAss ...@@ -54,7 +51,6 @@ typedef void (*AssertSummaryFp)(int numAsserts, int numAssertsFailed, int numAss
typedef void (*LogFp)(const char *logMessage, time_t eventTime); typedef void (*LogFp)(const char *logMessage, time_t eventTime);
int Output(const char *message, ...);
extern RunStartedFp RunStarted; extern RunStartedFp RunStarted;
extern RunEndedFp RunEnded; extern RunEndedFp RunEnded;
......
...@@ -27,7 +27,7 @@ Output(const char *message, ...) ...@@ -27,7 +27,7 @@ Output(const char *message, ...)
} }
void void
PlainRunStarted(const char *runnerParameters, time_t eventTime) PlainRunStarted(int parameterCount, char *runnerParameters[], time_t eventTime)
{ {
Output("Test run started"); Output("Test run started");
Output("Given command line options: %s", "add options"); Output("Given command line options: %s", "add options");
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include "logger.h" #include "logger.h"
void PlainRunStarted(const char *runnerParameters, time_t eventTime); void PlainRunStarted(int parameterCount, char *runnerParameters[], time_t eventTime);
void PlainRunEnded(int testCount, int suiteCount, int testPassCount, int testFailCount, void PlainRunEnded(int testCount, int suiteCount, int testPassCount, int testFailCount,
time_t endTime, time_t totalRuntime); time_t endTime, time_t totalRuntime);
......
...@@ -220,19 +220,19 @@ LoadTestCases(TestSuiteReference *suites) ...@@ -220,19 +220,19 @@ LoadTestCases(TestSuiteReference *suites)
item->testCaseQuit = testCaseQuit; item->testCaseQuit = testCaseQuit;
// copy suite name // copy suite name
int length = strlen(suiteReference->name) + 1; int length = SDL_strlen(suiteReference->name) + 1;
item->suiteName = SDL_malloc(length); item->suiteName = SDL_malloc(length);
strcpy(item->suiteName, suiteReference->name); strncpy(item->suiteName, suiteReference->name, length);
// copy test name // copy test name
length = strlen(testReference->name) + 1; length = SDL_strlen(testReference->name) + 1;
item->testName = SDL_malloc(length); item->testName = SDL_malloc(length);
strcpy(item->testName, testReference->name); strncpy(item->testName, testReference->name, length);
// copy test description // copy test description
length = strlen(testReference->description) + 1; length = SDL_strlen(testReference->description) + 1;
item->description = SDL_malloc(length); item->description = SDL_malloc(length);
strcpy(item->testName, testReference->name); strncpy(item->description, testReference->description, length);
item->requirements = testReference->requirements; item->requirements = testReference->requirements;
item->timeout = testReference->timeout; item->timeout = testReference->timeout;
...@@ -637,7 +637,8 @@ main(int argc, char *argv[]) ...@@ -637,7 +637,8 @@ main(int argc, char *argv[])
// print: Testing against SDL version fuu (rev: bar) if verbose == true // print: Testing against SDL version fuu (rev: bar) if verbose == true
int failureCount = 0, passCount = 0; int totalTestfailureCount = 0, totalTestPassCount = 0;
int testFailureCount = 0, testPassCount = 0, testSkipCount = 0;
char *testSuiteName = NULL; char *testSuiteName = NULL;
int suiteCounter = 0; int suiteCounter = 0;
...@@ -670,7 +671,7 @@ main(int argc, char *argv[]) ...@@ -670,7 +671,7 @@ main(int argc, char *argv[])
return 0; return 0;
} }
RunStarted(Output, NULL, 0); RunStarted(argc, argv, 0);
char *currentSuiteName = NULL; char *currentSuiteName = NULL;
...@@ -679,50 +680,50 @@ main(int argc, char *argv[]) ...@@ -679,50 +680,50 @@ main(int argc, char *argv[])
if(currentSuiteName == NULL) { if(currentSuiteName == NULL) {
currentSuiteName = testItem->suiteName; currentSuiteName = testItem->suiteName;
SuiteStarted(currentSuiteName, 0); SuiteStarted(currentSuiteName, 0);
testFailureCount = testPassCount = 0;
suiteCounter++;
}
else if(strncmp(currentSuiteName, testItem->suiteName, NAME_BUFFER_SIZE) != 0) {
SuiteEnded(testPassCount, testFailureCount, testSkipCount, 0.0f, 0);
currentSuiteName = testItem->suiteName;
SuiteStarted(currentSuiteName, 0);
testFailureCount = testPassCount = 0;
suiteCounter++;
} }
TestStarted(testItem->testName, testItem->suiteName, TestStarted(testItem->testName, testItem->suiteName,
testItem->description, 0); testItem->description, 0);
int retVal = ExecuteTest(testItem); int retVal = ExecuteTest(testItem);
if(retVal) { if(retVal) {
failureCount++; totalTestfailureCount++;
if(retVal == 2) { testFailureCount++;
//printf("%s (in %s): FAILED -> No asserts\n", testItem->testName, testItem->suiteName);
} else {
//printf("%s (in %s): FAILED\n", testItem->testName, testItem->suiteName);
}
} else { } else {
passCount++; totalTestPassCount++;
//printf("%s (in %s): ok\n", testItem->testName, testItem->suiteName); testPassCount++;
} }
TestEnded(testItem->testName, testItem->suiteName, retVal, 0, 0); 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);
}
} }
SuiteEnded(0, 0, 0, 0.0f, 0); if(currentSuiteName) {
// \todo if no test are run, this will case incorrect nesting with
// xml output
SuiteEnded(testPassCount, testFailureCount, testSkipCount, 0.0f, 0);
}
UnloadTestCases(testCases); UnloadTestCases(testCases);
UnloadTestSuites(suites); UnloadTestSuites(suites);
const Uint32 endTicks = SDL_GetTicks(); const Uint32 endTicks = SDL_GetTicks();
RunEnded(passCount + failureCount, 1 /*add suiteCount */, RunEnded(totalTestPassCount + totalTestfailureCount, suiteCounter,
passCount, failureCount, 0, 0); totalTestPassCount, totalTestfailureCount, 0, 0);
/*
printf("Ran %d tests in %0.5f seconds.\n", (passCount + failureCount), (endTicks-startTicks)/1000.0f);
printf("%d tests passed\n", passCount);
printf("%d tests failed\n", failureCount);
*/
return 0; return 0;
} }
...@@ -26,9 +26,6 @@ ...@@ -26,9 +26,6 @@
#include "xml.h" #include "xml.h"
/*! Points the function which handles the output */
static LogOutputFp logger = 0;
/*! /*!
* Defines structure used for "counting" open XML-tags * Defines structure used for "counting" open XML-tags
*/ */
...@@ -88,13 +85,6 @@ RemoveOpenTag(const char *tag) ...@@ -88,13 +85,6 @@ RemoveOpenTag(const char *tag)
TagList *openTag = openTags; TagList *openTag = openTags;
SDL_free((char *)openTag->tag); SDL_free((char *)openTag->tag);
/*
int counter = 0;
for(; counter < strlen(buffer); ++counter) {
buffer[counter] = tolower(buffer[counter]);
}
*/
openTags = openTags->next; openTags = openTags->next;
SDL_free(openTag); SDL_free(openTag);
} else { } else {
...@@ -188,7 +178,6 @@ ToLowerCase(const char *string) ...@@ -188,7 +178,6 @@ ToLowerCase(const char *string)
strncpy(ret, string, size); strncpy(ret, string, size);
ret[size] = '\0'; ret[size] = '\0';
// turn the tag to lower case for case-insensitive comparation
int counter = 0; int counter = 0;
for(; counter < size; ++counter) { for(; counter < size; ++counter) {
ret[counter] = tolower(ret[counter]); ret[counter] = tolower(ret[counter]);
...@@ -283,6 +272,9 @@ XMLCloseElement(const char *tag) ...@@ -283,6 +272,9 @@ XMLCloseElement(const char *tag)
char *ret = SDL_malloc(bufferSize); char *ret = SDL_malloc(bufferSize);
memset(ret, 0, bufferSize); memset(ret, 0, bufferSize);
// \todo check that element we're trying is actually open,
// otherwise it'll case nesting problems
// Close the open tags with proper nesting. Closes tags until it finds // Close the open tags with proper nesting. Closes tags until it finds
// the given tag which is the last tag that will be closed // the given tag which is the last tag that will be closed
TagList *openTag = openTags; TagList *openTag = openTags;
......
...@@ -60,10 +60,10 @@ static int prevEOL = YES; ...@@ -60,10 +60,10 @@ static int prevEOL = YES;
* \param the XML element itself * \param the XML element itself
* *
*/ */
void XMLOutputter(const int il, int EOL, const char *message) { void XMLOutputter(const int currentIdentLevel, int EOL, const char *message) {
int ident = 0; int ident = 0;
for( ; ident < il && prevEOL; ++ident) { for( ; ident < currentIdentLevel && prevEOL; ++ident) {
printf(" "); printf("\t");
} }
prevEOL = EOL; prevEOL = EOL;
...@@ -73,24 +73,51 @@ void XMLOutputter(const int il, int EOL, const char *message) { ...@@ -73,24 +73,51 @@ void XMLOutputter(const int il, int EOL, const char *message) {
} else { } else {
printf("%s", message); printf("%s", message);
} }
fflush(stdout);
} }
void void
XMLRunStarted(const char *runnerParameters, time_t eventTime) XMLRunStarted(int parameterCount, char *runnerParameters[], time_t eventTime)
{ {
char *output = XMLOpenDocument("testlog"); char *output = XMLOpenDocument("testlog");
XMLOutputter(indentLevel++, YES, output); XMLOutputter(indentLevel++, YES, output);
SDL_free(output); SDL_free(output);
output = XMLOpenElement("parameters"); output = XMLOpenElement("parameters");
XMLOutputter(indentLevel++, YES, output);
SDL_free(output);
int counter = 0;
for(counter = 0; counter < parameterCount; counter++) {
char *parameter = runnerParameters[counter];
output = XMLOpenElement("parameter");
XMLOutputter(indentLevel++, NO, output);
SDL_free(output);
output = XMLAddContent(parameter);
XMLOutputter(indentLevel, NO, output);
SDL_free(output);
output = XMLCloseElement("parameter");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
}
output = XMLCloseElement("parameters");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
output = XMLOpenElement("eventTime");
XMLOutputter(indentLevel++, NO, output); XMLOutputter(indentLevel++, NO, output);
SDL_free(output); SDL_free(output);
output = XMLAddContent("Add: runner parameter"); output = XMLAddContent(IntToString(eventTime));
XMLOutputter(indentLevel, NO, output); XMLOutputter(indentLevel, NO, output);
SDL_free(output); SDL_free(output);
output = XMLCloseElement("parameters"); output = XMLCloseElement("eventTime");
XMLOutputter(--indentLevel, YES, output); XMLOutputter(--indentLevel, YES, output);
SDL_free(output); SDL_free(output);
} }
...@@ -99,7 +126,88 @@ void ...@@ -99,7 +126,88 @@ 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"); // log suite count
char *output = XMLOpenElement("numSuites");
XMLOutputter(indentLevel++, NO, output);
SDL_free(output);
output = XMLAddContent(IntToString(suiteCount));
XMLOutputter(indentLevel, NO, output);
SDL_free(output);
output = XMLCloseElement("numSuites");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
// log test count
output = XMLOpenElement("numTest");
XMLOutputter(indentLevel++, NO, output);
SDL_free(output);
output = XMLAddContent(IntToString(testCount));
XMLOutputter(indentLevel, NO, output);
SDL_free(output);
output = XMLCloseElement("numTest");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
// log passed test count
output = XMLOpenElement("numPassedTests");
XMLOutputter(indentLevel++, NO, output);
SDL_free(output);
output = XMLAddContent(IntToString(testPassCount));
XMLOutputter(indentLevel, NO, output);
SDL_free(output);
output = XMLCloseElement("numPassedTests");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
// log failed test count
output = XMLOpenElement("numFailedTests");
XMLOutputter(indentLevel++, NO, output);
SDL_free(output);
output = XMLAddContent(IntToString(testFailCount));
XMLOutputter(indentLevel, NO, output);
SDL_free(output);
output = XMLCloseElement("numFailedTests");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
// log end timte
output = XMLOpenElement("endTime");
XMLOutputter(indentLevel++, NO, output);
SDL_free(output);
output = XMLAddContent(IntToString(endTime));
XMLOutputter(indentLevel, NO, output);
SDL_free(output);
output = XMLCloseElement("endTime");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
// log total runtime
output = XMLOpenElement("totalRuntime");
XMLOutputter(indentLevel++, NO, output);
SDL_free(output);
output = XMLAddContent(IntToString(totalRuntime));
XMLOutputter(indentLevel, NO, output);
SDL_free(output);
output = XMLCloseElement("totalRuntime");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
output = XMLCloseDocument("testlog");
XMLOutputter(--indentLevel, YES, output); XMLOutputter(--indentLevel, YES, output);
SDL_free(output); SDL_free(output);
} }
...@@ -128,11 +236,75 @@ void ...@@ -128,11 +236,75 @@ void
XMLSuiteEnded(int testsPassed, int testsFailed, int testsSkipped, XMLSuiteEnded(int testsPassed, int testsFailed, int testsSkipped,
double endTime, time_t totalRuntime) double endTime, time_t totalRuntime)
{ {
char *output = XMLCloseElement("suite"); // log tests passed
char *output = XMLOpenElement("testsPassed");
XMLOutputter(indentLevel++, NO, output);
SDL_free(output);
output = XMLAddContent(IntToString(testsPassed));
XMLOutputter(indentLevel, NO, output);
SDL_free(output);
output = XMLCloseElement("testsPassed");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
// log tests failed
output = XMLOpenElement("testsFailed");
XMLOutputter(indentLevel++, NO, output);
SDL_free(output);
output = XMLAddContent(IntToString(testsFailed));
XMLOutputter(indentLevel, NO, output);
SDL_free(output);
output = XMLCloseElement("testsFailed");
XMLOutputter(--indentLevel, YES, output); XMLOutputter(--indentLevel, YES, output);
SDL_free(output); SDL_free(output);
//! \todo endTime and totalRuntiem // log tests skipped
output = XMLOpenElement("testsSkipped");
XMLOutputter(indentLevel++, NO, output);
SDL_free(output);
output = XMLAddContent(IntToString(testsSkipped));
XMLOutputter(indentLevel, NO, output);
SDL_free(output);
output = XMLCloseElement("testsSkipped");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
// log tests skipped
output = XMLOpenElement("endTime");
XMLOutputter(indentLevel++, NO, output);
SDL_free(output);
output = XMLAddContent(IntToString(endTime));
XMLOutputter(indentLevel, NO, output);
SDL_free(output);
output = XMLCloseElement("endTime");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
// log total runtime
output = XMLOpenElement("totalRuntime");
XMLOutputter(indentLevel++, NO, output);
SDL_free(output);
output = XMLAddContent(IntToString(totalRuntime));
XMLOutputter(indentLevel, NO, output);
SDL_free(output);
output = XMLCloseElement("totalRuntime");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
output = XMLCloseElement("suite");
XMLOutputter(--indentLevel, YES, output);
SDL_free(output);
} }
void void
...@@ -156,7 +328,6 @@ XMLTestStarted(const char *testName, const char *suiteName, const char *testDesc ...@@ -156,7 +328,6 @@ XMLTestStarted(const char *testName, const char *suiteName, const char *testDesc
XMLOutputter(--indentLevel, YES, output); XMLOutputter(--indentLevel, YES, output);
SDL_free(output); SDL_free(output);
output = XMLOpenElement("description"); output = XMLOpenElement("description");
XMLOutputter(indentLevel++, NO, output); XMLOutputter(indentLevel++, NO, output);
SDL_free(output); SDL_free(output);
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include "logger.h" #include "logger.h"
void XMLRunStarted(const char *runnerParameters, time_t eventTime); void XMLRunStarted(int parameterCount, char *runnerParameters[], time_t eventTime);
void XMLRunEnded(int testCount, int suiteCount, int testPassCount, int testFailCount, void XMLRunEnded(int testCount, int suiteCount, int testPassCount, int testFailCount,
time_t endTime, time_t totalRuntime); time_t endTime, time_t totalRuntime);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment