Hello community, here is the log from the commit of package python-unittest-xml-reporting for openSUSE:Factory checked in at 2013-11-17 20:20:28 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-unittest-xml-reporting (Old) and /work/SRC/openSUSE:Factory/.python-unittest-xml-reporting.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-unittest-xml-reporting" Changes: -------- --- /work/SRC/openSUSE:Factory/python-unittest-xml-reporting/python-unittest-xml-reporting.changes 2013-10-25 11:34:25.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python-unittest-xml-reporting.new/python-unittest-xml-reporting.changes 2013-11-17 20:20:29.000000000 +0100 @@ -1,0 +2,6 @@ +Fri Nov 15 22:09:36 UTC 2013 - p.drou...@gmail.com + +- Update to version 1.7.0 + + No changelog available + +------------------------------------------------------------------- Old: ---- unittest-xml-reporting-1.4.3.tar.gz New: ---- unittest-xml-reporting-1.7.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-unittest-xml-reporting.spec ++++++ --- /var/tmp/diff_new_pack.WvNjVp/_old 2013-11-17 20:20:29.000000000 +0100 +++ /var/tmp/diff_new_pack.WvNjVp/_new 2013-11-17 20:20:29.000000000 +0100 @@ -17,7 +17,7 @@ Name: python-unittest-xml-reporting -Version: 1.4.3 +Version: 1.7.0 Release: 0 Url: http://github.com/danielfm/unittest-xml-reporting/tree/master/ Summary: PyUnit-based test runner with JUnit like XML reporting @@ -28,13 +28,11 @@ BuildRequires: python-devel BuildRequires: python-setuptools Requires: python-xml -%if 0%{?suse_version} -%py_requires -%if 0%{?suse_version} > 1110 +%if 0%{?suse_version} && 0%{?suse_version} <= 1110 +%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} +%else BuildArch: noarch %endif -%endif -%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} %description unittest-xml-reporting is a unittest test runner that can save test results ++++++ unittest-xml-reporting-1.4.3.tar.gz -> unittest-xml-reporting-1.7.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unittest-xml-reporting-1.4.3/PKG-INFO new/unittest-xml-reporting-1.7.0/PKG-INFO --- old/unittest-xml-reporting-1.4.3/PKG-INFO 2012-12-07 21:02:08.000000000 +0100 +++ new/unittest-xml-reporting-1.7.0/PKG-INFO 2013-09-12 00:10:12.000000000 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 1.0 +Metadata-Version: 1.1 Name: unittest-xml-reporting -Version: 1.4.3 +Version: 1.7.0 Summary: PyUnit-based test runner with JUnit like XML reporting. Home-page: http://github.com/danielfm/unittest-xml-reporting/tree/master/ Author: Daniel Fernandes Martins diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unittest-xml-reporting-1.4.3/setup.py new/unittest-xml-reporting-1.7.0/setup.py --- old/unittest-xml-reporting-1.4.3/setup.py 2012-12-07 21:00:46.000000000 +0100 +++ new/unittest-xml-reporting-1.7.0/setup.py 2013-09-11 23:27:19.000000000 +0200 @@ -1,10 +1,19 @@ #!/usr/bin/env python +import os from setuptools import setup, find_packages +# Load version information +xmlrunner_version = os.path.join( + os.path.abspath(os.path.dirname(__file__)), + 'src', 'xmlrunner', 'version.py' +) +exec(compile(open(xmlrunner_version).read(), xmlrunner_version, 'exec')) + + setup( name = 'unittest-xml-reporting', - version = '1.4.3', + version = __version__, author = 'Daniel Fernandes Martins', author_email = 'daniel.trit...@gmail.com', description = 'PyUnit-based test runner with JUnit like XML reporting.', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unittest-xml-reporting-1.4.3/src/unittest_xml_reporting.egg-info/PKG-INFO new/unittest-xml-reporting-1.7.0/src/unittest_xml_reporting.egg-info/PKG-INFO --- old/unittest-xml-reporting-1.4.3/src/unittest_xml_reporting.egg-info/PKG-INFO 2012-12-07 21:02:04.000000000 +0100 +++ new/unittest-xml-reporting-1.7.0/src/unittest_xml_reporting.egg-info/PKG-INFO 2013-09-12 00:10:07.000000000 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 1.0 +Metadata-Version: 1.1 Name: unittest-xml-reporting -Version: 1.4.3 +Version: 1.7.0 Summary: PyUnit-based test runner with JUnit like XML reporting. Home-page: http://github.com/danielfm/unittest-xml-reporting/tree/master/ Author: Daniel Fernandes Martins diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unittest-xml-reporting-1.4.3/src/unittest_xml_reporting.egg-info/SOURCES.txt new/unittest-xml-reporting-1.7.0/src/unittest_xml_reporting.egg-info/SOURCES.txt --- old/unittest-xml-reporting-1.4.3/src/unittest_xml_reporting.egg-info/SOURCES.txt 2012-12-07 21:02:04.000000000 +0100 +++ new/unittest-xml-reporting-1.7.0/src/unittest_xml_reporting.egg-info/SOURCES.txt 2013-09-12 00:10:07.000000000 +0200 @@ -8,6 +8,7 @@ src/unittest_xml_reporting.egg-info/not-zip-safe src/unittest_xml_reporting.egg-info/top_level.txt src/xmlrunner/__init__.py +src/xmlrunner/version.py src/xmlrunner/extra/__init__.py src/xmlrunner/extra/djangotestrunner.py src/xmlrunner/tests/__init__.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unittest-xml-reporting-1.4.3/src/xmlrunner/__init__.py new/unittest-xml-reporting-1.7.0/src/xmlrunner/__init__.py --- old/unittest-xml-reporting-1.4.3/src/xmlrunner/__init__.py 2012-12-07 21:00:46.000000000 +0100 +++ new/unittest-xml-reporting-1.7.0/src/xmlrunner/__init__.py 2013-09-11 23:50:21.000000000 +0200 @@ -8,7 +8,12 @@ import os import sys import time -from unittest import TestResult, _TextTestResult, TextTestRunner +try: + from unittest2.runner import TextTestRunner + from unittest2.runner import TextTestResult as _TextTestResult + from unittest2.result import TestResult +except ImportError: + from unittest import TestResult, _TextTestResult, TextTestRunner try: # Removed in Python 3 @@ -17,8 +22,13 @@ from io import StringIO +# Allow version to be detected at runtime. +from .version import __version__, __version_info__ + + class _DelegateIO(object): - """This class defines an object that captures whatever is written to + """ + This class defines an object that captures whatever is written to a stream or file. """ @@ -34,13 +44,25 @@ return getattr(self._captured, attr) +def testcase_name(test_method): + testcase = type(test_method) + + # Ignore module name if it is '__main__' + module = testcase.__module__ + '.' + if module == '__main__.': + module = '' + result = module + testcase.__name__ + return result + + class _TestInfo(object): - """This class keeps useful information about the execution of a + """ + This class keeps useful information about the execution of a test method. """ # Possible test outcomes - (SUCCESS, FAILURE, ERROR) = range(3) + (SUCCESS, FAILURE, ERROR, SKIP) = range(4) def __init__(self, test_result, test_method, outcome=SUCCESS, err=None): self.test_result = test_result @@ -49,6 +71,19 @@ self.elapsed_time = 0 self.err = err + self.test_description = self.test_result.getDescription(test_method) + self.test_exception_info = ( + '' if outcome in (self.SUCCESS, self.SKIP) + else self.test_result._exc_info_to_string( + self.err, test_method) + ) + + self.test_name = testcase_name(test_method) + self.test_id = test_method.id() + + def id(self): + return self.test_method.id() + def test_finished(self): """Save info that can only be calculated once a test has run. """ @@ -56,35 +91,36 @@ self.test_result.stop_time - self.test_result.start_time def get_description(self): - """Return a text representation of the test method. """ - return self.test_result.getDescription(self.test_method) + Return a text representation of the test method. + """ + return self.test_description def get_error_info(self): - """Return a text representation of an exception thrown by a test + """ + Return a text representation of an exception thrown by a test method. """ - if not self.err: - return '' - return self.test_result._exc_info_to_string(self.err, \ - self.test_method) + return self.test_exception_info class _XMLTestResult(_TextTestResult): - """A test result class that can express test results in a XML report. + """ + A test result class that can express test results in a XML report. Used by XMLTestRunner. """ - def __init__(self, stream=sys.stderr, descriptions=1, verbosity=1, \ - elapsed_times=True): + def __init__(self, stream=sys.stderr, descriptions=1, verbosity=1, + elapsed_times=True): _TextTestResult.__init__(self, stream, descriptions, verbosity) self.successes = [] self.callback = None self.elapsed_times = elapsed_times def _prepare_callback(self, test_info, target_list, verbose_str, - short_str): - """Appends a _TestInfo to the given target list and sets a callback + short_str): + """ + Appends a _TestInfo to the given target list and sets a callback method to be called by stopTest method. """ target_list.append(test_info) @@ -101,14 +137,16 @@ self.start_time = self.stop_time = 0 if self.showAll: - self.stream.writeln('%s (%.3fs)' % \ - (verbose_str, test_info.elapsed_time)) + self.stream.writeln( + '%s (%.3fs)' % (verbose_str, test_info.elapsed_time) + ) elif self.dots: self.stream.write(short_str) self.callback = callback def startTest(self, test): - """Called before execute each test method. + """ + Called before execute each test method. """ self.start_time = time.time() TestResult.startTest(self, test) @@ -118,7 +156,8 @@ self.stream.write(" ... ") def stopTest(self, test): - """Called after execute each test method. + """ + Called after execute each test method. """ _TextTestResult.stopTest(self, test) self.stop_time = time.time() @@ -128,51 +167,70 @@ self.callback = None def addSuccess(self, test): - """Called when a test executes successfully. """ - self._prepare_callback(_TestInfo(self, test), \ - self.successes, 'OK', '.') + Called when a test executes successfully. + """ + self._prepare_callback( + _TestInfo(self, test), self.successes, 'OK', '.' + ) def addFailure(self, test, err): - """Called when a test method fails. """ - self._prepare_callback(_TestInfo(self, test, _TestInfo.FAILURE, err), \ - self.failures, 'FAIL', 'F') + Called when a test method fails. + """ + testinfo = _TestInfo(self, test, _TestInfo.ERROR, err) + self.errors.append(( + testinfo, + self._exc_info_to_string(err, test) + )) + self._prepare_callback(testinfo, [], 'FAIL', 'F') def addError(self, test, err): - """Called when a test method raises an error. """ - self._prepare_callback(_TestInfo(self, test, _TestInfo.ERROR, err), \ - self.errors, 'ERROR', 'E') + Called when a test method raises an error. + """ + testinfo = _TestInfo(self, test, _TestInfo.ERROR, err) + self.errors.append(( + testinfo, + self._exc_info_to_string(err, test) + )) + self._prepare_callback(testinfo, [], 'ERROR', 'E') + + def addSkip(self, test, reason): + """ + Called when a test method was skipped. + """ + testinfo = _TestInfo(self, test, _TestInfo.SKIP, reason) + self.skipped.append((testinfo, reason)) + self._prepare_callback(testinfo, [], 'SKIP', 'S') def printErrorList(self, flavour, errors): - """Writes information about the FAIL or ERROR to the stream. """ - for test_info in errors: + Writes information about the FAIL or ERROR to the stream. + """ + for test_info, error in errors: self.stream.writeln(self.separator1) - self.stream.writeln('%s [%.3fs]: %s' % \ - (flavour, test_info.elapsed_time, \ - test_info.get_description())) + self.stream.writeln( + '%s [%.3fs]: %s' % (flavour, test_info.elapsed_time, + test_info.get_description()) + ) self.stream.writeln(self.separator2) self.stream.writeln('%s' % test_info.get_error_info()) def _get_info_by_testcase(self, outsuffix): - """Organizes test results by TestCase module. This information is + """ + Organizes test results by TestCase module. This information is used during the report generation, where a XML report will be created for each TestCase. """ tests_by_testcase = {} - for tests in (self.successes, self.failures, self.errors): + for tests in (self.successes, self.failures, self.errors, self.skipped): for test_info in tests: - testcase = type(test_info.test_method) - - # Ignore module name if it is '__main__' - module = testcase.__module__ + '.' - if module == '__main__.': - module = '' - testcase_name = module + testcase.__name__ - + if isinstance(test_info, tuple): + # This is a skipped, error or a failure test case + test_info = test_info[0] + testcase_name = test_info.test_name if not testcase_name in tests_by_testcase: tests_by_testcase[testcase_name] = [] tests_by_testcase[testcase_name].append(test_info) @@ -180,7 +238,8 @@ return tests_by_testcase def _report_testsuite(suite_name, outsuffix, tests, xml_document): - """Appends the testsuite section to the XML document. + """ + Appends the testsuite section to the XML document. """ testsuite = xml_document.createElement('testsuite') xml_document.appendChild(testsuite) @@ -188,54 +247,60 @@ testsuite.setAttribute('name', "%s-%s" % (suite_name, outsuffix)) testsuite.setAttribute('tests', str(len(tests))) - testsuite.setAttribute('time', '%.3f' % \ - sum(map(lambda e: e.elapsed_time, tests))) - - failures = filter(lambda e: e.outcome==_TestInfo.FAILURE, tests) + testsuite.setAttribute( + 'time', '%.3f' % sum(map(lambda e: e.elapsed_time, tests)) + ) + failures = filter(lambda e: e.outcome == _TestInfo.FAILURE, tests) testsuite.setAttribute('failures', str(len(list(failures)))) - errors = filter(lambda e: e.outcome==_TestInfo.ERROR, tests) + errors = filter(lambda e: e.outcome == _TestInfo.ERROR, tests) testsuite.setAttribute('errors', str(len(list(errors)))) return testsuite _report_testsuite = staticmethod(_report_testsuite) - def _test_method_name(test_method): - """Returns the test method name. + def _test_method_name(test_id): + """ + Returns the test method name. """ - test_id = test_method.id() return test_id.split('.')[-1] _test_method_name = staticmethod(_test_method_name) def _report_testcase(suite_name, test_result, xml_testsuite, xml_document): - """Appends a testcase section to the XML document. + """ + Appends a testcase section to the XML document. """ testcase = xml_document.createElement('testcase') xml_testsuite.appendChild(testcase) testcase.setAttribute('classname', suite_name) - testcase.setAttribute('name', \ - _XMLTestResult._test_method_name(test_result.test_method)) + testcase.setAttribute( + 'name', _XMLTestResult._test_method_name(test_result.test_id) + ) testcase.setAttribute('time', '%.3f' % test_result.elapsed_time) if (test_result.outcome != _TestInfo.SUCCESS): - elem_name = ('failure', 'error')[test_result.outcome-1] + elem_name = ('failure', 'error', 'skipped')[test_result.outcome - 1] failure = xml_document.createElement(elem_name) testcase.appendChild(failure) + if test_result.outcome != _TestInfo.SKIP: + failure.setAttribute('type', test_result.err[0].__name__) + failure.setAttribute('message', str(test_result.err[1])) + error_info = str(test_result.get_error_info()) + failureText = xml_document.createCDATASection(error_info) + failure.appendChild(failureText) + else: + failure.setAttribute('type', 'skip') + failure.setAttribute('message', test_result.err) - failure.setAttribute('type', test_result.err[0].__name__) - failure.setAttribute('message', str(test_result.err[1])) - - error_info = str(test_result.get_error_info()) - failureText = xml_document.createCDATASection(error_info) - failure.appendChild(failureText) _report_testcase = staticmethod(_report_testcase) def _report_output(test_runner, xml_testsuite, xml_document): - """Appends the system-out and system-err sections to the XML document. + """ + Appends the system-out and system-err sections to the XML document. """ systemout = xml_document.createElement('system-out') xml_testsuite.appendChild(systemout) @@ -252,30 +317,35 @@ _report_output = staticmethod(_report_output) def generate_reports(self, test_runner): - """Generates the XML reports to a given XMLTestRunner object. + """ + Generates the XML reports to a given XMLTestRunner object. """ from xml.dom.minidom import Document all_results = self._get_info_by_testcase(test_runner.outsuffix) - if isinstance(test_runner.output, str) and not \ - os.path.exists(test_runner.output): + if (isinstance(test_runner.output, str) and not + os.path.exists(test_runner.output)): os.makedirs(test_runner.output) for suite, tests in all_results.items(): doc = Document() # Build the XML file - testsuite = _XMLTestResult._report_testsuite(suite, \ - test_runner.outsuffix, tests, doc) + testsuite = _XMLTestResult._report_testsuite( + suite, test_runner.outsuffix, tests, doc + ) for test in tests: _XMLTestResult._report_testcase(suite, test, testsuite, doc) _XMLTestResult._report_output(test_runner, testsuite, doc) xml_content = doc.toprettyxml(indent='\t') if type(test_runner.output) is str: - report_file = open('%s%sTEST-%s-%s.xml' % \ - (test_runner.output, os.sep, suite, \ - test_runner.outsuffix), 'w') + report_file = open( + '%s%sTEST-%s-%s.xml' % ( + test_runner.output, os.sep, suite, + test_runner.outsuffix + ), 'w' + ) try: report_file.write(xml_content) finally: @@ -286,41 +356,47 @@ class XMLTestRunner(TextTestRunner): - """A test runner class that outputs the results in JUnit like XML files. """ - def __init__(self, output='.', outsuffix = None, stream=sys.stderr, \ - descriptions=True, verbosity=1, elapsed_times=True): + A test runner class that outputs the results in JUnit like XML files. + """ + def __init__(self, output='.', outsuffix=None, stream=sys.stderr, + descriptions=True, verbosity=1, elapsed_times=True): TextTestRunner.__init__(self, stream, descriptions, verbosity) self.verbosity = verbosity self.output = output if outsuffix: - self.outsuffix = outsuffix + self.outsuffix = outsuffix else: - self.outsuffix = time.strftime("%Y%m%d%H%M%S") + self.outsuffix = time.strftime("%Y%m%d%H%M%S") self.elapsed_times = elapsed_times def _make_result(self): - """Creates a TestResult object which will be used to store + """ + Creates a TestResult object which will be used to store information about the executed tests. """ - return _XMLTestResult(self.stream, self.descriptions, \ - self.verbosity, self.elapsed_times) + return _XMLTestResult( + self.stream, self.descriptions, self.verbosity, self.elapsed_times + ) def _patch_standard_output(self): - """Replaces stdout and stderr streams with string-based streams + """ + Replaces stdout and stderr streams with string-based streams in order to capture the tests' output. """ sys.stdout = _DelegateIO(sys.stdout) sys.stderr = _DelegateIO(sys.stderr) def _restore_standard_output(self): - """Restores stdout and stderr streams. + """ + Restores stdout and stderr streams. """ sys.stdout = sys.stdout.delegate sys.stderr = sys.stderr.delegate def run(self, test): - """Runs the given test case or test suite. + """ + Runs the given test case or test suite. """ try: # Prepare the test execution @@ -342,30 +418,50 @@ result.printErrors() self.stream.writeln(result.separator2) run = result.testsRun - self.stream.writeln("Ran %d test%s in %.3fs" % - (run, run != 1 and "s" or "", time_taken)) + self.stream.writeln("Ran %d test%s in %.3fs" % ( + run, run != 1 and "s" or "", time_taken) + ) self.stream.writeln() + expectedFails = unexpectedSuccesses = skipped = 0 + try: + results = map(len, (result.expectedFailures, + result.unexpectedSuccesses, + result.skipped)) + except AttributeError: + pass + else: + expectedFails, unexpectedSuccesses, skipped = results + # Error traces + infos = [] if not result.wasSuccessful(): - self.stream.write("FAILED (") - failed, errored = (len(result.failures), len(result.errors)) + self.stream.write("FAILED") + failed, errored = map(len, (result.failures, result.errors)) if failed: - self.stream.write("failures=%d" % failed) + infos.append("failures={0}".format(failed)) if errored: - if failed: - self.stream.write(", ") - self.stream.write("errors=%d" % errored) - self.stream.writeln(")") + infos.append("errors={0}".format(errored)) + else: + self.stream.write("OK") + + if skipped: + infos.append("skipped={0}".format(skipped)) + if expectedFails: + infos.append("expected failures={0}".format(expectedFails)) + if unexpectedSuccesses: + infos.append("unexpected successes={0}".fornat(unexpectedSuccesses)) + + if infos: + self.stream.writeln(" ({0})".format(", ".join(infos))) else: - self.stream.writeln("OK") + self.stream.write("\n") # Generate reports self.stream.writeln() self.stream.writeln('Generating XML reports...') result.generate_reports(self) finally: - pass self._restore_standard_output() return result diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unittest-xml-reporting-1.4.3/src/xmlrunner/extra/djangotestrunner.py new/unittest-xml-reporting-1.7.0/src/xmlrunner/extra/djangotestrunner.py --- old/unittest-xml-reporting-1.4.3/src/xmlrunner/extra/djangotestrunner.py 2012-12-07 20:55:37.000000000 +0100 +++ new/unittest-xml-reporting-1.7.0/src/xmlrunner/extra/djangotestrunner.py 2013-09-11 23:27:19.000000000 +0200 @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- -"""Custom Django test runner that runs the tests using the +""" +Custom Django test runner that runs the tests using the XMLTestRunner class. This script shows how to use the XMLTestRunner in a Django project. To learn diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unittest-xml-reporting-1.4.3/src/xmlrunner/version.py new/unittest-xml-reporting-1.7.0/src/xmlrunner/version.py --- old/unittest-xml-reporting-1.4.3/src/xmlrunner/version.py 1970-01-01 01:00:00.000000000 +0100 +++ new/unittest-xml-reporting-1.7.0/src/xmlrunner/version.py 2013-09-12 00:07:37.000000000 +0200 @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +""" + xmlrunner.version + ~~~~~~~~~~~~~~~~~ + + Runtime library version information. + + :codeauthor: :email:`Pedro Algarvio (pe...@algarvio.me)` + :copyright: © 2013 Pedro Algarvio. + :license: LGPL, see LICENSE for more details. +""" + +__version_info__ = (1, 7, 0) +__version__ = '.'.join(map(str, __version_info__)) -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org