You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by bh...@apache.org on 2009/12/04 13:50:46 UTC
svn commit: r887178 - /subversion/trunk/tools/dev/gen_junit_report.py
Author: bhuvan
Date: Fri Dec 4 12:50:45 2009
New Revision: 887178
URL: http://svn.apache.org/viewvc?rev=887178&view=rev
Log:
Fix for issue 3541. When generating junit reports, escape special
characters, if any, from test failure messages.
* tools/dev/gen_junit_report.py
ASCII_TABLE: Global variable to define list of ascii characters.
CHARS_TO_REMOVE: Global variable to define list of ascii values
to remove from failure messages.
(escape_special_characters): New method to escape special characters.
(junit_testcase_fail, junit_testcase_xfail): Use
escape_special_characters() method to escape special characters in
test failure messages.
Approved by: julianfoad
Reviewed by: julianfoad,
brane
Modified:
subversion/trunk/tools/dev/gen_junit_report.py
Modified: subversion/trunk/tools/dev/gen_junit_report.py
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dev/gen_junit_report.py?rev=887178&r1=887177&r2=887178&view=diff
==============================================================================
--- subversion/trunk/tools/dev/gen_junit_report.py (original)
+++ subversion/trunk/tools/dev/gen_junit_report.py Fri Dec 4 12:50:45 2009
@@ -33,6 +33,11 @@
import os
import getopt
+ASCII_TABLE = "".join([chr(n) for n in xrange(256)])
+# remove all special characters upto ascii value 31, except line feed (10)
+# and carriage return (13)
+CHARS_TO_REMOVE = ASCII_TABLE[0:10] + ASCII_TABLE[11:13] + ASCII_TABLE[14:32]
+
def xml_encode(data):
"""encode the xml characters in the data"""
encode = {
@@ -46,6 +51,15 @@
data = data.replace(char, encode[char])
return data
+def escape_special_characters(data):
+ """remove special characters in test failure reasons"""
+ if not data:
+ return data
+ for char in CHARS_TO_REMOVE:
+ data = data.replace(char, '%%%0x' % ord(char))
+ data = data.replace(']]>', ']]]]><![CDATA[>')
+ return data
+
def start_junit():
"""define the beginning of xml document"""
head = """<?xml version="1.0" encoding="UTF-8"?>"""
@@ -72,6 +86,7 @@
"""mark the test case as FAILED"""
casename = xml_encode(casename)
sub_test_name = test_name.replace('.', '-')
+ reason = escape_special_characters(reason)
case = """<testcase time="ELAPSED_CASE_%s" name="%s" classname="%s">
<failure type="Failed"><![CDATA[%s]]></failure>
</testcase>""" % (test_name, casename, sub_test_name, reason)
@@ -81,6 +96,7 @@
"""mark the test case as XFAILED"""
casename = xml_encode(casename)
sub_test_name = test_name.replace('.', '-')
+ reason = escape_special_characters(reason)
case = """<testcase time="ELAPSED_CASE_%s" name="%s" classname="%s">
<system-out><![CDATA[%s]]></system-out>
</testcase>""" % (test_name, casename, sub_test_name, reason)