Commit 4fdb4d47 authored by Markus Kauppila's avatar Markus Kauppila

Redefined the usage of --xsl command option.

parent 06529787
...@@ -53,6 +53,8 @@ static int only_tests_with_string = 0; ...@@ -53,6 +53,8 @@ static int only_tests_with_string = 0;
static int xml_enabled = 0; static int xml_enabled = 0;
//! Flag for enabling user-supplied style sheet for XML test report //! Flag for enabling user-supplied style sheet for XML test report
static int custom_xsl_enabled = 0; static int custom_xsl_enabled = 0;
//! Flag for disabling xsl-style from xml report
static int xsl_enabled = 0;
//!< Size of the test and suite name buffers //!< Size of the test and suite name buffers
...@@ -548,12 +550,13 @@ void ...@@ -548,12 +550,13 @@ void
printUsage() { printUsage() {
printf("Usage: ./runner [--in-proc] [--suite SUITE] [--test TEST]\n"); printf("Usage: ./runner [--in-proc] [--suite SUITE] [--test TEST]\n");
printf(" [--name-contains SUBSTR] [--show-tests\n"); printf(" [--name-contains SUBSTR] [--show-tests\n");
printf(" [--xml] [--xsl STYLESHEET] [--help]\n"); printf(" [--xml] [--xsl] [--xsl STYLESHEET] [--help]\n");
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(" --xml Enables XML logger\n");
printf(" --xsl STYLESHEET Use the given file as XSL style sheet for XML\n"); printf(" --xsl Adds default XSL stylesheet to XML test reports\n");
printf(" --xsl STYLESHEET Use the given file as XSL style sheet for XML\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");
...@@ -601,19 +604,17 @@ ParseOptions(int argc, char *argv[]) ...@@ -601,19 +604,17 @@ ParseOptions(int argc, char *argv[])
strcpy(selected_test_name, testName); strcpy(selected_test_name, testName);
} }
else if(SDL_strcmp(arg, "--xsl") == 0) { else if(SDL_strcmp(arg, "--xsl") == 0) {
custom_xsl_enabled = 1; xsl_enabled = 1;
char *stylesheet = NULL;
if( (i + 1) < argc) { if( (i + 1) < argc) {
stylesheet = argv[++i]; char *stylesheet = argv[++i];
} else { if(stylesheet[0] != '-') {
printf("runner: filename of XSL stylesheet is missing\n"); custom_xsl_enabled = 1;
printUsage();
exit(1);
}
memset(xsl_stylesheet_name, 0, NAME_BUFFER_SIZE); memset(xsl_stylesheet_name, 0, NAME_BUFFER_SIZE);
strncpy(xsl_stylesheet_name, stylesheet, NAME_BUFFER_SIZE); strncpy(xsl_stylesheet_name, stylesheet, NAME_BUFFER_SIZE);
}
}
} }
else if(SDL_strcmp(arg, "--name-contains") == 0 || SDL_strcmp(arg, "-ts") == 0) { else if(SDL_strcmp(arg, "--name-contains") == 0 || SDL_strcmp(arg, "-ts") == 0) {
only_tests_with_string = 1; only_tests_with_string = 1;
...@@ -685,7 +686,16 @@ main(int argc, char *argv[]) ...@@ -685,7 +686,16 @@ main(int argc, char *argv[])
if(xml_enabled) { if(xml_enabled) {
SetupXMLLogger(); SetupXMLLogger();
RunStarted(argc, argv, time(0), xsl_stylesheet_name); char *sheet = NULL;
if(xsl_enabled) {
sheet = "style.xsl"; // default style sheet;
}
if(custom_xsl_enabled) {
sheet = xsl_stylesheet_name;
}
RunStarted(argc, argv, time(0), sheet);
} else { } else {
SetupPlainLogger(); SetupPlainLogger();
......
...@@ -197,18 +197,21 @@ XMLOpenDocument(const char *rootTag, const char *xslStyle) ...@@ -197,18 +197,21 @@ XMLOpenDocument(const char *rootTag, const char *xslStyle)
{ {
const char *doctype = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"; const char *doctype = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
//! \todo make this optional (and let the user supply the filename?) //! \todo refactor this mess
const char *styleStart = "<?xml-stylesheet type=\"text/xsl\" href=\""; char *style = NULL;
const char *styleEnd = "\"?>\n"; if(xslStyle) {
const char *styleStart = "<?xml-stylesheet type=\"text/xsl\" href=\"";
const int sizeStyleStart = SDL_strlen(styleStart); const char *styleEnd = "\"?>\n";
const int sizeStyleEnd = SDL_strlen(styleEnd);
const int sizeStyleSheetName = SDL_strlen(xslStyle); const int sizeStyleStart = SDL_strlen(styleStart);
const int sizeStyleEnd = SDL_strlen(styleEnd);
const int tempSize = sizeStyleStart + sizeStyleEnd + sizeStyleSheetName + 1; const int sizeStyleSheetName = SDL_strlen(xslStyle);
char *style = SDL_malloc(tempSize);
memset(style, 0, tempSize); const int tempSize = sizeStyleStart + sizeStyleEnd + sizeStyleSheetName + 1;
SDL_snprintf(style, tempSize, "%s%s%s", styleStart, xslStyle, styleEnd); style = SDL_malloc(tempSize);
memset(style, 0, tempSize);
SDL_snprintf(style, tempSize, "%s%s%s", styleStart, xslStyle, styleEnd);
}
memset(buffer, 0, bufferSize); memset(buffer, 0, bufferSize);
SDL_snprintf(buffer, bufferSize, "<%s>", rootTag); SDL_snprintf(buffer, bufferSize, "<%s>", rootTag);
...@@ -217,19 +220,27 @@ XMLOpenDocument(const char *rootTag, const char *xslStyle) ...@@ -217,19 +220,27 @@ XMLOpenDocument(const char *rootTag, const char *xslStyle)
root = rootTag; // it's fine, as long as rootTag points to static memory? root = rootTag; // it's fine, as long as rootTag points to static memory?
const int doctypeSize = SDL_strlen(doctype); char *retBuf = NULL;
const int styleSize = SDL_strlen(style); if(xslStyle) {
const int tagSize = SDL_strlen(buffer); const int doctypeSize = SDL_strlen(doctype);
const int styleSize = SDL_strlen(style);
const int tagSize = SDL_strlen(buffer);
const int size = doctypeSize + styleSize + tagSize + 1; // extra byte for '\0' const int size = doctypeSize + styleSize + tagSize + 1; // extra byte for '\0'
char *retBuf = SDL_malloc(size); retBuf = SDL_malloc(size);
// fill in the previous allocated retBuf SDL_snprintf(retBuf, size, "%s%s%s", doctype, style, buffer);
strcat(retBuf, doctype);
strcat(retBuf, style);
strcat(retBuf, buffer);
SDL_free(style); SDL_free(style);
} else {
const int doctypeSize = SDL_strlen(doctype);
const int tagSize = SDL_strlen(buffer);
const int size = doctypeSize + tagSize + 1; // extra byte for '\0'
retBuf = SDL_malloc(size);
SDL_snprintf(retBuf, size, "%s%s", doctype, buffer);
}
return retBuf; return retBuf;
} }
......
...@@ -37,6 +37,7 @@ typedef struct Attribute { ...@@ -37,6 +37,7 @@ typedef struct Attribute {
* Note: XML creation is not thread-safe! * Note: XML creation is not thread-safe!
* *
* \param rootTag Root tag for the XML document * \param rootTag Root tag for the XML document
* \param xslStyle Name of the style sheet file. (empty string if no style is used)
* \return The generated XML output * \return The generated XML output
*/ */
char *XMLOpenDocument(const char *rootTag, const char *xslStyle); char *XMLOpenDocument(const char *rootTag, const char *xslStyle);
......
...@@ -101,20 +101,14 @@ XMLOutputter(const int currentIdentLevel, ...@@ -101,20 +101,14 @@ XMLOutputter(const int currentIdentLevel,
fprintf(stdout, "Error: Tried to output invalid string!"); fprintf(stdout, "Error: Tried to output invalid string!");
} }
SDL_free(message); SDL_free((char *)message);
} }
void void
XMLRunStarted(int parameterCount, char *runnerParameters[], time_t eventTime, XMLRunStarted(int parameterCount, char *runnerParameters[], time_t eventTime,
void *data) void *data)
{ {
char *xslStylesheet = "style.xsl"; char *xslStylesheet = (char *)data;
if(data != NULL) {
char *tmp = (char *)data;
if(SDL_strlen(tmp) > 0) {
xslStylesheet = tmp;
}
}
char *output = XMLOpenDocument(documentRoot, xslStylesheet); char *output = XMLOpenDocument(documentRoot, xslStylesheet);
XMLOutputter(indentLevel++, YES, output); XMLOutputter(indentLevel++, YES, output);
......
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