The failure message for few tests contain special characters, ex: prop_tests.py. As a result, it creates an invalid xml file and not being displayed in Hudson.
This commit fixes this issue, also tracked in issue 3541. With this fix, the test results are displayed in Hudson, especially the results specific to 1.6.x solaris build. http://subversion.tigris.org/issues/show_bug.cgi?id=3541 [[ Fix for issue 3541. When generating junit reports, remove special characters, if any, from test failure messages. * tools/dev/gen_junit_report.py (remove_special_characters): New method to remove special characters. (junit_testcase_fail, junit_testcase_xfail): Use remove_special_characters() method to remove special characters in test failure messages. ]] -- Bhuvaneswaran A CollabNet Software P Ltd. | www.collab.net
Index: tools/dev/gen_junit_report.py =================================================================== --- tools/dev/gen_junit_report.py (revision 886204) +++ tools/dev/gen_junit_report.py (working copy) @@ -46,6 +46,16 @@ data = data.replace(char, encode[char]) return data +def remove_special_characters(data): + """remove special characters in test failure reasons""" + if not data: + return data + chars_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 = chars_table[0:9] + chars_table[11:12] + chars_table[14:31] + return data.translate(chars_table, chars_to_remove) + def start_junit(): """define the beginning of xml document""" head = """<?xml version="1.0" encoding="UTF-8"?>""" @@ -72,6 +82,7 @@ """mark the test case as FAILED""" casename = xml_encode(casename) sub_test_name = test_name.replace('.', '-') + reason = remove_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 +92,7 @@ """mark the test case as XFAILED""" casename = xml_encode(casename) sub_test_name = test_name.replace('.', '-') + reason = remove_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)
signature.asc
Description: This is a digitally signed message part