def run_tests(spider, output_file, settings): """ Helper for running test contractors for a spider and output an XUnit file (for CI) For using offline input the HTTP cache is enabled """ settings.overrides.update({ "HTTPCACHE_ENABLED": True, "HTTPCACHE_EXPIRATION_SECS": 0, }) crawler = CrawlerProcess(settings) contracts = build_component_list( crawler.settings['SPIDER_CONTRACTS_BASE'], crawler.settings['SPIDER_CONTRACTS'], ) xunit = Xunit() xunit.enabled = True xunit.configure(AttributeDict(xunit_file=output_file), Config()) xunit.stopTest = lambda *x: None check = CheckCommand() check.set_crawler(crawler) check.settings = settings check.conman = ContractsManager([load_object(c) for c in contracts]) check.results = xunit # this are specially crafted requests that run tests as callbacks requests = check.get_requests(spider) crawler.install() crawler.configure() crawler.crawl(spider, requests) log.start(loglevel='DEBUG') # report is called when the crawler finishes, it creates the XUnit file report = lambda: check.results.report(check.results.error_report_file) dispatcher.connect(report, signals.engine_stopped) crawler.start()
class TestXMLOutputWithXML(unittest.TestCase): def setUp(self): self.xmlfile = os.path.abspath( os.path.join(os.path.dirname(__file__), 'support', 'xunit.xml')) parser = optparse.OptionParser() self.x = Xunit() self.x.add_options(parser, env={}) (options, args) = parser.parse_args( ["--with-xunit", "--xunit-file=%s" % self.xmlfile]) self.x.configure(options, Config()) try: import xml.etree.ElementTree except ImportError: self.ET = False else: self.ET = xml.etree.ElementTree def tearDown(self): os.unlink(self.xmlfile) def get_xml_report(self): class DummyStream: pass self.x.report(DummyStream()) f = open(self.xmlfile, 'rb') data = f.read() f.close() return data def test_addFailure(self): test = mktest() self.x.beforeTest(test) try: raise AssertionError("one is not 'equal' to two") except AssertionError: some_err = sys.exc_info() self.x.addFailure(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) eq_(tree.attrib['name'], "nosetests") eq_(tree.attrib['tests'], "1") eq_(tree.attrib['errors'], "0") eq_(tree.attrib['failures'], "1") eq_(tree.attrib['skip'], "0") tc = tree.find("testcase") eq_(tc.attrib['classname'], "test_xunit.TC") eq_(tc.attrib['name'], "runTest") assert time_taken.match( tc.attrib['time']), ('Expected decimal time: %s' % tc.attrib['time']) err = tc.find("failure") eq_(err.attrib['type'], "%s.AssertionError" % (AssertionError.__module__, )) err_lines = err.text.strip().split("\n") eq_(err_lines[0], 'Traceback (most recent call last):') eq_(err_lines[-1], 'AssertionError: one is not \'equal\' to two') eq_(err_lines[-2], ' raise AssertionError("one is not \'equal\' to two")') else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert '<testsuite name="nosetests" tests="1" errors="0" failures="1" skip="0">' in result assert '<testcase classname="test_xunit.TC" name="runTest"' in result assert '<failure type="exceptions.AssertionError"' in result assert "AssertionError: one is not 'equal' to two" in result assert "AssertionError(\"one is not 'equal' to two\")" in result assert '</failure></testcase></testsuite>' in result def test_addFailure_early(self): test = mktest() try: raise AssertionError("one is not equal to two") except AssertionError: some_err = sys.exc_info() # add failure without startTest, due to custom TestResult munging? self.x.addFailure(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") assert time_taken.match( tc.attrib['time']), ('Expected decimal time: %s' % tc.attrib['time']) else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert ('<testcase classname="test_xunit.TC" ' 'name="runTest" time="0') in result def test_addError(self): test = mktest() self.x.beforeTest(test) try: raise RuntimeError("some error happened") except RuntimeError: some_err = sys.exc_info() self.x.addError(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) eq_(tree.attrib['name'], "nosetests") eq_(tree.attrib['tests'], "1") eq_(tree.attrib['errors'], "1") eq_(tree.attrib['failures'], "0") eq_(tree.attrib['skip'], "0") tc = tree.find("testcase") eq_(tc.attrib['classname'], "test_xunit.TC") eq_(tc.attrib['name'], "runTest") assert time_taken.match( tc.attrib['time']), ('Expected decimal time: %s' % tc.attrib['time']) err = tc.find("error") eq_(err.attrib['type'], "%s.RuntimeError" % (RuntimeError.__module__, )) err_lines = err.text.strip().split("\n") eq_(err_lines[0], 'Traceback (most recent call last):') eq_(err_lines[-1], 'RuntimeError: some error happened') eq_(err_lines[-2], ' raise RuntimeError("some error happened")') else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert '<testsuite name="nosetests" tests="1" errors="1" failures="0" skip="0">' in result assert '<testcase classname="test_xunit.TC" name="runTest"' in result assert '<error type="exceptions.RuntimeError"' in result assert 'RuntimeError: some error happened' in result assert '</error></testcase></testsuite>' in result def test_non_utf8_error(self): # See http://code.google.com/p/python-nose/issues/detail?id=395 test = mktest() self.x.beforeTest(test) try: raise RuntimeError(chr(128)) # cannot encode as utf8 except RuntimeError: some_err = sys.exc_info() self.x.addError(test, some_err) result = self.get_xml_report() print repr(result) if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") err = tc.find("error") if UNICODE_STRINGS: eq_(err.attrib['message'], '\x80') else: eq_(err.attrib['message'], u'\ufffd') else: # this is a dumb test for 2.4- assert 'RuntimeError: \xef\xbf\xbd' in result def test_addError_early(self): test = mktest() try: raise RuntimeError("some error happened") except RuntimeError: some_err = sys.exc_info() self.x.startContext(None) # call addError without startTest # which can happen if setup() raises an error self.x.addError(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") assert time_taken.match( tc.attrib['time']), ('Expected decimal time: %s' % tc.attrib['time']) else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert ('<testcase classname="test_xunit.TC" ' 'name="runTest" time="0') in result def test_addSuccess(self): test = mktest() self.x.beforeTest(test) self.x.addSuccess(test, (None, None, None)) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) eq_(tree.attrib['name'], "nosetests") eq_(tree.attrib['tests'], "1") eq_(tree.attrib['errors'], "0") eq_(tree.attrib['failures'], "0") eq_(tree.attrib['skip'], "0") tc = tree.find("testcase") eq_(tc.attrib['classname'], "test_xunit.TC") eq_(tc.attrib['name'], "runTest") assert time_taken.match( tc.attrib['time']), ('Expected decimal time: %s' % tc.attrib['time']) else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert '<testsuite name="nosetests" tests="1" errors="0" failures="0" skip="0">' in result assert '<testcase classname="test_xunit.TC" name="runTest"' in result assert '</testsuite>' in result def test_addSuccess_early(self): test = mktest() # call addSuccess without startTest # which can happen (?) -- did happen with JsLint plugin self.x.addSuccess(test, (None, None, None)) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") assert time_taken.match( tc.attrib['time']), ('Expected decimal time: %s' % tc.attrib['time']) else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert ('<testcase classname="test_xunit.TC" ' 'name="runTest" time="0') in result
if options.pdb: pdb_plugin.enabled = True pdb_plugin.enabled_for_failures = True # Get information about the current repository, set it as the version in # the answer testing plugin. options.repository = os.path.expanduser(options.repository) hg_current = _get_hg_version(options.repository) rev_hash = hg_current.split()[0] if options.run_suffix: rev_hash += options.run_suffix answer_plugin._my_version = rev_hash xunit_plugin.configure(options, DummyConfiguration()) answer_plugin.configure(options, None) reporting_plugin.configure(options, None) # Break out if no valid strict set if options.strict not in all_strict: sys.exit("Error: %s is not a valid strict, try --strict=[%s]" % (options.strict, ", ".join(all_strict))) # Break out if output directory not specified. if options.output_dir is None: print('Please enter an output directory with -o option') sys.exit(1) if options.changeset is not None: status = version_swap(options.repository, options.changeset,
class TestXMLOutputWithXML(unittest.TestCase): def setUp(self): self.xmlfile = os.path.abspath( os.path.join(os.path.dirname(__file__), 'support', 'xunit.xml')) parser = optparse.OptionParser() self.x = Xunit() self.x.add_options(parser, env={}) (options, args) = parser.parse_args([ "--with-xunit", "--xunit-file=%s" % self.xmlfile ]) self.x.configure(options, Config()) try: import xml.etree.ElementTree except ImportError: self.ET = False else: self.ET = xml.etree.ElementTree def tearDown(self): os.unlink(self.xmlfile) def get_xml_report(self): class DummyStream: pass self.x.report(DummyStream()) f = open(self.xmlfile, 'r') return f.read() f.close() def test_addFailure(self): test = mktest() self.x.startTest(test) try: raise AssertionError("one is not 'equal' to two") except AssertionError: some_err = sys.exc_info() self.x.addFailure(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) eq_(tree.attrib['name'], "nosetests") eq_(tree.attrib['tests'], "1") eq_(tree.attrib['errors'], "0") eq_(tree.attrib['failures'], "1") eq_(tree.attrib['skip'], "0") tc = tree.find("testcase") eq_(tc.attrib['classname'], "test_xunit.TC") eq_(tc.attrib['name'], "test_xunit.TC.runTest") assert int(tc.attrib['time']) >= 0 err = tc.find("failure") eq_(err.attrib['type'], "exceptions.AssertionError") err_lines = err.text.strip().split("\n") eq_(err_lines[0], 'Traceback (most recent call last):') eq_(err_lines[-1], 'AssertionError: one is not \'equal\' to two') eq_(err_lines[-2], ' raise AssertionError("one is not \'equal\' to two")') else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert '<testsuite name="nosetests" tests="1" errors="0" failures="1" skip="0">' in result assert '<testcase classname="test_xunit.TC" name="test_xunit.TC.runTest"' in result assert '<failure type="exceptions.AssertionError">' in result assert 'AssertionError: one is not 'equal' to two' in result assert 'AssertionError("one is not 'equal' to two")' in result assert '</failure></testcase></testsuite>' in result def test_addFailure_early(self): test = mktest() try: raise AssertionError("one is not equal to two") except AssertionError: some_err = sys.exc_info() # add failure without startTest, due to custom TestResult munging? self.x.addFailure(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") eq_(tc.attrib['time'], "0") else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert ('<testcase classname="test_xunit.TC" ' 'name="test_xunit.TC.runTest" time="0">') in result def test_addError(self): test = mktest() self.x.startTest(test) try: raise RuntimeError("some error happened") except RuntimeError: some_err = sys.exc_info() self.x.addError(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) eq_(tree.attrib['name'], "nosetests") eq_(tree.attrib['tests'], "1") eq_(tree.attrib['errors'], "1") eq_(tree.attrib['failures'], "0") eq_(tree.attrib['skip'], "0") tc = tree.find("testcase") eq_(tc.attrib['classname'], "test_xunit.TC") eq_(tc.attrib['name'], "test_xunit.TC.runTest") assert int(tc.attrib['time']) >= 0 err = tc.find("error") eq_(err.attrib['type'], "exceptions.RuntimeError") err_lines = err.text.strip().split("\n") eq_(err_lines[0], 'Traceback (most recent call last):') eq_(err_lines[-1], 'RuntimeError: some error happened') eq_(err_lines[-2], ' raise RuntimeError("some error happened")') else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert '<testsuite name="nosetests" tests="1" errors="1" failures="0" skip="0">' in result assert '<testcase classname="test_xunit.TC" name="test_xunit.TC.runTest"' in result assert '<error type="exceptions.RuntimeError">' in result assert 'RuntimeError: some error happened' in result assert '</error></testcase></testsuite>' in result def test_addError_early(self): test = mktest() try: raise RuntimeError("some error happened") except RuntimeError: some_err = sys.exc_info() # call addError without startTest # which can happen if setup() raises an error self.x.addError(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") eq_(tc.attrib['time'], "0") else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert ('<testcase classname="test_xunit.TC" ' 'name="test_xunit.TC.runTest" time="0">') in result def test_addSuccess(self): test = mktest() self.x.startTest(test) self.x.addSuccess(test, (None,None,None)) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) eq_(tree.attrib['name'], "nosetests") eq_(tree.attrib['tests'], "1") eq_(tree.attrib['errors'], "0") eq_(tree.attrib['failures'], "0") eq_(tree.attrib['skip'], "0") tc = tree.find("testcase") eq_(tc.attrib['classname'], "test_xunit.TC") eq_(tc.attrib['name'], "test_xunit.TC.runTest") assert int(tc.attrib['time']) >= 0 else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert '<testsuite name="nosetests" tests="1" errors="0" failures="0" skip="0">' in result assert '<testcase classname="test_xunit.TC" name="test_xunit.TC.runTest"' in result assert '</testsuite>' in result def test_addSuccess_early(self): test = mktest() # call addSuccess without startTest # which can happen (?) -- did happen with JsLint plugin self.x.addSuccess(test, (None,None,None)) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") eq_(tc.attrib['time'], "0") else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert ('<testcase classname="test_xunit.TC" ' 'name="test_xunit.TC.runTest" time="0" />') in result
class TestXMLOutputWithXML(unittest.TestCase): def setUp(self): self.xmlfile = os.path.abspath( os.path.join(os.path.dirname(__file__), 'support', 'xunit.xml')) parser = optparse.OptionParser() self.x = Xunit() self.x.add_options(parser, env={}) (options, args) = parser.parse_args([ "--with-xunit", "--xunit-file=%s" % self.xmlfile ]) self.x.configure(options, Config()) try: import xml.etree.ElementTree except ImportError: self.ET = False else: self.ET = xml.etree.ElementTree def tearDown(self): os.unlink(self.xmlfile) def get_xml_report(self): class DummyStream: pass self.x.report(DummyStream()) f = open(self.xmlfile, 'rb') return f.read() f.close() def test_addFailure(self): test = mktest() self.x.beforeTest(test) try: raise AssertionError("one is not 'equal' to two") except AssertionError: some_err = sys.exc_info() self.x.addFailure(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) eq_(tree.attrib['name'], "nosetests") eq_(tree.attrib['tests'], "1") eq_(tree.attrib['errors'], "0") eq_(tree.attrib['failures'], "1") eq_(tree.attrib['skip'], "0") tc = tree.find("testcase") eq_(tc.attrib['classname'], "test_xunit.TC") eq_(tc.attrib['name'], "runTest") assert time_taken.match(tc.attrib['time']), ( 'Expected decimal time: %s' % tc.attrib['time']) err = tc.find("failure") eq_(err.attrib['type'], "%s.AssertionError" % (AssertionError.__module__,)) err_lines = err.text.strip().split("\n") eq_(err_lines[0], 'Traceback (most recent call last):') eq_(err_lines[-1], 'AssertionError: one is not \'equal\' to two') eq_(err_lines[-2], ' raise AssertionError("one is not \'equal\' to two")') else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert '<testsuite name="nosetests" tests="1" errors="0" failures="1" skip="0">' in result assert '<testcase classname="test_xunit.TC" name="runTest"' in result assert '<failure type="exceptions.AssertionError"' in result assert "AssertionError: one is not 'equal' to two" in result assert "AssertionError(\"one is not 'equal' to two\")" in result assert '</failure></testcase></testsuite>' in result def test_addFailure_early(self): test = mktest() try: raise AssertionError("one is not equal to two") except AssertionError: some_err = sys.exc_info() # add failure without startTest, due to custom TestResult munging? self.x.addFailure(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") assert time_taken.match(tc.attrib['time']), ( 'Expected decimal time: %s' % tc.attrib['time']) else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert ('<testcase classname="test_xunit.TC" ' 'name="runTest" time="0') in result def test_addError(self): test = mktest() self.x.beforeTest(test) try: raise RuntimeError("some error happened") except RuntimeError: some_err = sys.exc_info() self.x.addError(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) eq_(tree.attrib['name'], "nosetests") eq_(tree.attrib['tests'], "1") eq_(tree.attrib['errors'], "1") eq_(tree.attrib['failures'], "0") eq_(tree.attrib['skip'], "0") tc = tree.find("testcase") eq_(tc.attrib['classname'], "test_xunit.TC") eq_(tc.attrib['name'], "runTest") assert time_taken.match(tc.attrib['time']), ( 'Expected decimal time: %s' % tc.attrib['time']) err = tc.find("error") eq_(err.attrib['type'], "%s.RuntimeError" % (RuntimeError.__module__,)) err_lines = err.text.strip().split("\n") eq_(err_lines[0], 'Traceback (most recent call last):') eq_(err_lines[-1], 'RuntimeError: some error happened') eq_(err_lines[-2], ' raise RuntimeError("some error happened")') else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert '<testsuite name="nosetests" tests="1" errors="1" failures="0" skip="0">' in result assert '<testcase classname="test_xunit.TC" name="runTest"' in result assert '<error type="exceptions.RuntimeError"' in result assert 'RuntimeError: some error happened' in result assert '</error></testcase></testsuite>' in result def test_non_utf8_error(self): # See http://code.google.com/p/python-nose/issues/detail?id=395 test = mktest() self.x.beforeTest(test) try: raise RuntimeError(chr(128)) # cannot encode as utf8 except RuntimeError: some_err = sys.exc_info() self.x.addError(test, some_err) result = self.get_xml_report() print repr(result) if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") err = tc.find("error") if UNICODE_STRINGS: eq_(err.attrib['message'], '\x80') else: eq_(err.attrib['message'], u'\ufffd') else: # this is a dumb test for 2.4- assert 'RuntimeError: \xef\xbf\xbd' in result def test_addError_early(self): test = mktest() try: raise RuntimeError("some error happened") except RuntimeError: some_err = sys.exc_info() self.x.startContext(None) # call addError without startTest # which can happen if setup() raises an error self.x.addError(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") assert time_taken.match(tc.attrib['time']), ( 'Expected decimal time: %s' % tc.attrib['time']) else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert ('<testcase classname="test_xunit.TC" ' 'name="runTest" time="0') in result def test_addSuccess(self): test = mktest() self.x.beforeTest(test) self.x.addSuccess(test, (None,None,None)) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) eq_(tree.attrib['name'], "nosetests") eq_(tree.attrib['tests'], "1") eq_(tree.attrib['errors'], "0") eq_(tree.attrib['failures'], "0") eq_(tree.attrib['skip'], "0") tc = tree.find("testcase") eq_(tc.attrib['classname'], "test_xunit.TC") eq_(tc.attrib['name'], "runTest") assert time_taken.match(tc.attrib['time']), ( 'Expected decimal time: %s' % tc.attrib['time']) else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert '<testsuite name="nosetests" tests="1" errors="0" failures="0" skip="0">' in result assert '<testcase classname="test_xunit.TC" name="runTest"' in result assert '</testsuite>' in result def test_addSuccess_early(self): test = mktest() # call addSuccess without startTest # which can happen (?) -- did happen with JsLint plugin self.x.addSuccess(test, (None,None,None)) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") assert time_taken.match(tc.attrib['time']), ( 'Expected decimal time: %s' % tc.attrib['time']) else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert ('<testcase classname="test_xunit.TC" ' 'name="runTest" time="0') in result
class TestXMLOutputWithXML(unittest.TestCase): def setUp(self): self.xmlfile = os.path.abspath( os.path.join(os.path.dirname(__file__), 'support', 'xunit.xml')) parser = optparse.OptionParser() self.x = Xunit() self.x.add_options(parser, env={}) (options, args) = parser.parse_args( ["--with-xunit", "--xunit-file=%s" % self.xmlfile]) self.x.configure(options, Config()) try: import xml.etree.ElementTree except ImportError: self.ET = False else: self.ET = xml.etree.ElementTree def tearDown(self): os.unlink(self.xmlfile) def get_xml_report(self): class DummyStream: pass self.x.report(DummyStream()) f = open(self.xmlfile, 'r') return f.read() f.close() def test_addFailure(self): test = mktest() self.x.startTest(test) try: raise AssertionError("one is not 'equal' to two") except AssertionError: some_err = sys.exc_info() self.x.addFailure(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) eq_(tree.attrib['name'], "nosetests") eq_(tree.attrib['tests'], "1") eq_(tree.attrib['errors'], "0") eq_(tree.attrib['failures'], "1") eq_(tree.attrib['skip'], "0") tc = tree.find("testcase") eq_(tc.attrib['classname'], "test_xunit.TC") eq_(tc.attrib['name'], "test_xunit.TC.runTest") assert int(tc.attrib['time']) >= 0 err = tc.find("failure") eq_(err.attrib['type'], "exceptions.AssertionError") err_lines = err.text.strip().split("\n") eq_(err_lines[0], 'Traceback (most recent call last):') eq_(err_lines[-1], 'AssertionError: one is not \'equal\' to two') eq_(err_lines[-2], ' raise AssertionError("one is not \'equal\' to two")') else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert '<testsuite name="nosetests" tests="1" errors="0" failures="1" skip="0">' in result assert '<testcase classname="test_xunit.TC" name="test_xunit.TC.runTest"' in result assert '<failure type="exceptions.AssertionError">' in result assert 'AssertionError: one is not 'equal' to two' in result assert 'AssertionError("one is not 'equal' to two")' in result assert '</failure></testcase></testsuite>' in result def test_addFailure_early(self): test = mktest() try: raise AssertionError("one is not equal to two") except AssertionError: some_err = sys.exc_info() # add failure without startTest, due to custom TestResult munging? self.x.addFailure(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") eq_(tc.attrib['time'], "0") else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert ('<testcase classname="test_xunit.TC" ' 'name="test_xunit.TC.runTest" time="0">') in result def test_addError(self): test = mktest() self.x.startTest(test) try: raise RuntimeError("some error happened") except RuntimeError: some_err = sys.exc_info() self.x.addError(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) eq_(tree.attrib['name'], "nosetests") eq_(tree.attrib['tests'], "1") eq_(tree.attrib['errors'], "1") eq_(tree.attrib['failures'], "0") eq_(tree.attrib['skip'], "0") tc = tree.find("testcase") eq_(tc.attrib['classname'], "test_xunit.TC") eq_(tc.attrib['name'], "test_xunit.TC.runTest") assert int(tc.attrib['time']) >= 0 err = tc.find("error") eq_(err.attrib['type'], "exceptions.RuntimeError") err_lines = err.text.strip().split("\n") eq_(err_lines[0], 'Traceback (most recent call last):') eq_(err_lines[-1], 'RuntimeError: some error happened') eq_(err_lines[-2], ' raise RuntimeError("some error happened")') else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert '<testsuite name="nosetests" tests="1" errors="1" failures="0" skip="0">' in result assert '<testcase classname="test_xunit.TC" name="test_xunit.TC.runTest"' in result assert '<error type="exceptions.RuntimeError">' in result assert 'RuntimeError: some error happened' in result assert '</error></testcase></testsuite>' in result def test_addError_early(self): test = mktest() try: raise RuntimeError("some error happened") except RuntimeError: some_err = sys.exc_info() # call addError without startTest # which can happen if setup() raises an error self.x.addError(test, some_err) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") eq_(tc.attrib['time'], "0") else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert ('<testcase classname="test_xunit.TC" ' 'name="test_xunit.TC.runTest" time="0">') in result def test_addSuccess(self): test = mktest() self.x.startTest(test) self.x.addSuccess(test, (None, None, None)) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) eq_(tree.attrib['name'], "nosetests") eq_(tree.attrib['tests'], "1") eq_(tree.attrib['errors'], "0") eq_(tree.attrib['failures'], "0") eq_(tree.attrib['skip'], "0") tc = tree.find("testcase") eq_(tc.attrib['classname'], "test_xunit.TC") eq_(tc.attrib['name'], "test_xunit.TC.runTest") assert int(tc.attrib['time']) >= 0 else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert '<testsuite name="nosetests" tests="1" errors="0" failures="0" skip="0">' in result assert '<testcase classname="test_xunit.TC" name="test_xunit.TC.runTest"' in result assert '</testsuite>' in result def test_addSuccess_early(self): test = mktest() # call addSuccess without startTest # which can happen (?) -- did happen with JsLint plugin self.x.addSuccess(test, (None, None, None)) result = self.get_xml_report() print result if self.ET: tree = self.ET.fromstring(result) tc = tree.find("testcase") eq_(tc.attrib['time'], "0") else: # this is a dumb test for 2.4- assert '<?xml version="1.0" encoding="UTF-8"?>' in result assert ('<testcase classname="test_xunit.TC" ' 'name="test_xunit.TC.runTest" time="0" />') in result