Branko Čibej wrote: > Bhuvaneswaran A wrote: > > The failure message for few tests contain special characters, ex:
What do you mean by "special" characters? Unprintable characters? Non-UTF8 characters? Invalid XML characters? Characters that are XML syntax characters such as "<"? > > 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 > > > > 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] Isn't the indexing off by one? Should be [0:10] ... [11:13] ... [14:32]. > > + return data.translate(chars_table, chars_to_remove) > > You want to rebuild the table every single time? Be serious. /me translates that to, "Although this is only a test result logging application, it would please my aesthetic sensibilities if it were more efficient by building the table only once." :-) > Also, wouldn't it be more proper to find out why the tests put control > characters in the failure description than to just blindly throw them away? Or just escape the "special" characters. > > + > > 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) > > Oh yeah. I'm going to write a test that fails and the reason will be > "]]>", how would you like that? :) This page: <http://www.lshift.net/blog/2007/10/25/xml-cdata-and-escaping> gives a simple trick to "escape" a string before putting it in a CDATA section: replace every occurrence of "]]>" with "]]]]><![CDATA[>". But... this is only a test result logging application. If it works with what the Subversion test suite produces, then it works. - Julian