99import traceback
1010import unittest
1111
12- import xml .etree .ElementTree as ET
13-
1412from datetime import datetime
1513
1614class RegressionTestResult (unittest .TextTestResult ):
1715 separator1 = '=' * 70 + '\n '
1816 separator2 = '-' * 70 + '\n '
17+ USE_XML = False
1918
2019 def __init__ (self , stream , descriptions , verbosity ):
2120 super ().__init__ (stream = stream , descriptions = descriptions , verbosity = 0 )
2221 self .buffer = True
23- self .__suite = ET .Element ('testsuite' )
24- self .__suite .set ('start' , datetime .utcnow ().isoformat (' ' ))
25-
26- self .__e = None
22+ if self .USE_XML :
23+ from xml .etree import ElementTree as ET
24+ self .__ET = ET
25+ self .__suite = ET .Element ('testsuite' )
26+ self .__suite .set ('start' , datetime .utcnow ().isoformat (' ' ))
27+ self .__e = None
2728 self .__start_time = None
2829 self .__results = []
2930 self .__verbose = bool (verbosity )
@@ -42,17 +43,22 @@ def __getId(cls, test):
4243
4344 def startTest (self , test ):
4445 super ().startTest (test )
45- self .__e = e = ET .SubElement (self .__suite , 'testcase' )
46+ if self .USE_XML :
47+ self .__e = e = self .__ET .SubElement (self .__suite , 'testcase' )
4648 self .__start_time = time .perf_counter ()
4749 if self .__verbose :
4850 self .stream .write (f'{ self .getDescription (test )} ... ' )
4951 self .stream .flush ()
5052
5153 def _add_result (self , test , capture = False , ** args ):
54+ if not self .USE_XML :
55+ return
5256 e = self .__e
5357 self .__e = None
5458 if e is None :
5559 return
60+ ET = self .__ET
61+
5662 e .set ('name' , args .pop ('name' , self .__getId (test )))
5763 e .set ('status' , args .pop ('status' , 'run' ))
5864 e .set ('result' , args .pop ('result' , 'completed' ))
@@ -147,6 +153,8 @@ def printErrorList(self, flavor, errors):
147153 self .stream .write ('%s\n ' % err )
148154
149155 def get_xml_element (self ):
156+ if not self .USE_XML :
157+ raise ValueError ("USE_XML is false" )
150158 e = self .__suite
151159 e .set ('tests' , str (self .testsRun ))
152160 e .set ('errors' , str (len (self .errors )))
@@ -174,6 +182,9 @@ def get_test_runner(stream, verbosity, capture_output=False):
174182 return get_test_runner_class (verbosity , capture_output )(stream )
175183
176184if __name__ == '__main__' :
185+ import xml .etree .ElementTree as ET
186+ RegressionTestResult .USE_XML = True
187+
177188 class TestTests (unittest .TestCase ):
178189 def test_pass (self ):
179190 pass
0 commit comments