Redefined the usage of --xsl command option.
authorMarkus Kauppila <markus.kauppila@gmail.com>
Fri, 01 Jul 2011 12:36:57 +0300
changeset 5731 507fffef86ad
parent 5730 5c094958a62f
child 5732 1da5af48b964
Redefined the usage of --xsl command option.
test/test-automation/runner.c
test/test-automation/xml.c
test/test-automation/xml.h
test/test-automation/xml_logger.c
--- a/test/test-automation/runner.c	Fri Jul 01 11:12:35 2011 +0300
+++ b/test/test-automation/runner.c	Fri Jul 01 12:36:57 2011 +0300
@@ -53,6 +53,8 @@
 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 @@
 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 @@
     	  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 @@
 	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();
 
--- a/test/test-automation/xml.c	Fri Jul 01 11:12:35 2011 +0300
+++ b/test/test-automation/xml.c	Fri Jul 01 12:36:57 2011 +0300
@@ -197,18 +197,21 @@
 {
 	const char *doctype = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
 
-	//! \todo make this optional (and let the user supply the filename?)
-	const char *styleStart = "<?xml-stylesheet type=\"text/xsl\" href=\"";
-	const char *styleEnd = "\"?>\n";
+	//! \todo refactor this mess
+	char *style = NULL;
+	if(xslStyle) {
+		const char *styleStart = "<?xml-stylesheet type=\"text/xsl\" href=\"";
+		const char *styleEnd = "\"?>\n";
 
-	const int sizeStyleStart = SDL_strlen(styleStart);
-	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 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);
+		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 @@
 
 	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);
+
+		SDL_snprintf(retBuf, size, "%s%s%s", doctype, style, buffer);
 
-	// fill in the previous allocated retBuf
-	strcat(retBuf, doctype);
-	strcat(retBuf, style);
-	strcat(retBuf, buffer);
+		SDL_free(style);
+	} else {
+		const int doctypeSize = SDL_strlen(doctype);
+		const int tagSize = SDL_strlen(buffer);
 
-	SDL_free(style);
+		const int size = doctypeSize + tagSize + 1; // extra byte for '\0'
+		retBuf = SDL_malloc(size);
+
+		SDL_snprintf(retBuf, size, "%s%s", doctype, buffer);
+	}
 
 	return retBuf;
 }
--- a/test/test-automation/xml.h	Fri Jul 01 11:12:35 2011 +0300
+++ b/test/test-automation/xml.h	Fri Jul 01 12:36:57 2011 +0300
@@ -37,6 +37,7 @@
  * 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);
--- a/test/test-automation/xml_logger.c	Fri Jul 01 11:12:35 2011 +0300
+++ b/test/test-automation/xml_logger.c	Fri Jul 01 12:36:57 2011 +0300
@@ -101,20 +101,14 @@
 		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);