From 2cd2cffa3f8c45dd3c2624f5fcdee173e740bdf9 Mon Sep 17 00:00:00 2001 From: Markus Kauppila Date: Fri, 1 Jul 2011 12:36:57 +0300 Subject: [PATCH] Redefined the usage of --xsl command option. --- test/test-automation/runner.c | 38 +++++++++++++-------- test/test-automation/xml.c | 55 ++++++++++++++++++------------- test/test-automation/xml.h | 1 + test/test-automation/xml_logger.c | 10 ++---- 4 files changed, 60 insertions(+), 44 deletions(-) diff --git a/test/test-automation/runner.c b/test/test-automation/runner.c index b1af61604..d39b19e9a 100644 --- a/test/test-automation/runner.c +++ b/test/test-automation/runner.c @@ -53,6 +53,8 @@ static int only_tests_with_string = 0; static int xml_enabled = 0; //! Flag for enabling user-supplied style sheet for XML test report 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 @@ -548,12 +550,13 @@ void printUsage() { printf("Usage: ./runner [--in-proc] [--suite SUITE] [--test TEST]\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(" --in-proc Executes tests in-process\n"); printf(" --show-tests Prints out all the executable tests\n"); - printf(" --xml Enables XML logger\n"); - printf(" --xsl STYLESHEET Use the given file as XSL style sheet for XML\n"); + printf(" --xml Enables XML logger\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(" -ts --name-contains SUBSTR Executes only tests that have given\n"); printf(" substring in test name\n"); @@ -601,19 +604,17 @@ ParseOptions(int argc, char *argv[]) strcpy(selected_test_name, testName); } else if(SDL_strcmp(arg, "--xsl") == 0) { - custom_xsl_enabled = 1; - char *stylesheet = NULL; + xsl_enabled = 1; if( (i + 1) < argc) { - stylesheet = argv[++i]; - } else { - printf("runner: filename of XSL stylesheet is missing\n"); - printUsage(); - exit(1); - } + char *stylesheet = argv[++i]; + if(stylesheet[0] != '-') { + custom_xsl_enabled = 1; - memset(xsl_stylesheet_name, 0, NAME_BUFFER_SIZE); - strncpy(xsl_stylesheet_name, stylesheet, NAME_BUFFER_SIZE); + memset(xsl_stylesheet_name, 0, NAME_BUFFER_SIZE); + strncpy(xsl_stylesheet_name, stylesheet, NAME_BUFFER_SIZE); + } + } } else if(SDL_strcmp(arg, "--name-contains") == 0 || SDL_strcmp(arg, "-ts") == 0) { only_tests_with_string = 1; @@ -685,7 +686,16 @@ main(int argc, char *argv[]) if(xml_enabled) { 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 { SetupPlainLogger(); diff --git a/test/test-automation/xml.c b/test/test-automation/xml.c index 85e6f293d..fc72f3e40 100644 --- a/test/test-automation/xml.c +++ b/test/test-automation/xml.c @@ -197,18 +197,21 @@ XMLOpenDocument(const char *rootTag, const char *xslStyle) { const char *doctype = "\n"; - //! \todo make this optional (and let the user supply the filename?) - const char *styleStart = "\n"; - - const int sizeStyleStart = SDL_strlen(styleStart); - const int sizeStyleEnd = SDL_strlen(styleEnd); - const int sizeStyleSheetName = SDL_strlen(xslStyle); - - const int tempSize = sizeStyleStart + sizeStyleEnd + sizeStyleSheetName + 1; - char *style = SDL_malloc(tempSize); - memset(style, 0, tempSize); - SDL_snprintf(style, tempSize, "%s%s%s", styleStart, xslStyle, styleEnd); + //! \todo refactor this mess + char *style = NULL; + if(xslStyle) { + const char *styleStart = "\n"; + + const int sizeStyleStart = SDL_strlen(styleStart); + const int sizeStyleEnd = SDL_strlen(styleEnd); + const int sizeStyleSheetName = SDL_strlen(xslStyle); + + const int tempSize = sizeStyleStart + sizeStyleEnd + sizeStyleSheetName + 1; + style = SDL_malloc(tempSize); + memset(style, 0, tempSize); + SDL_snprintf(style, tempSize, "%s%s%s", styleStart, xslStyle, styleEnd); + } memset(buffer, 0, bufferSize); SDL_snprintf(buffer, bufferSize, "<%s>", rootTag); @@ -217,19 +220,27 @@ XMLOpenDocument(const char *rootTag, const char *xslStyle) root = rootTag; // it's fine, as long as rootTag points to static memory? - const int doctypeSize = SDL_strlen(doctype); - const int styleSize = SDL_strlen(style); - const int tagSize = SDL_strlen(buffer); + char *retBuf = NULL; + if(xslStyle) { + 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' - char *retBuf = SDL_malloc(size); + const int size = doctypeSize + styleSize + tagSize + 1; // extra byte for '\0' + retBuf = SDL_malloc(size); - // fill in the previous allocated retBuf - strcat(retBuf, doctype); - strcat(retBuf, style); - strcat(retBuf, buffer); + SDL_snprintf(retBuf, size, "%s%s%s", doctype, style, 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; } diff --git a/test/test-automation/xml.h b/test/test-automation/xml.h index a174d7766..fbe4367b8 100644 --- a/test/test-automation/xml.h +++ b/test/test-automation/xml.h @@ -37,6 +37,7 @@ typedef struct Attribute { * Note: XML creation is not thread-safe! * * \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 */ char *XMLOpenDocument(const char *rootTag, const char *xslStyle); diff --git a/test/test-automation/xml_logger.c b/test/test-automation/xml_logger.c index 7e33c4010..3d1fa0e81 100644 --- a/test/test-automation/xml_logger.c +++ b/test/test-automation/xml_logger.c @@ -101,20 +101,14 @@ XMLOutputter(const int currentIdentLevel, fprintf(stdout, "Error: Tried to output invalid string!"); } - SDL_free(message); + SDL_free((char *)message); } void XMLRunStarted(int parameterCount, char *runnerParameters[], time_t eventTime, void *data) { - char *xslStylesheet = "style.xsl"; - if(data != NULL) { - char *tmp = (char *)data; - if(SDL_strlen(tmp) > 0) { - xslStylesheet = tmp; - } - } + char *xslStylesheet = (char *)data; char *output = XMLOpenDocument(documentRoot, xslStylesheet); XMLOutputter(indentLevel++, YES, output);