Hello community,
here is the log from the commit of package python-unittest-xml-reporting for
openSUSE:Factory checked in at 2017-09-05 15:15:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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"
Tue Sep 5 15:15:40 2017 rev:13 rq:520192 version:2.1.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-unittest-xml-reporting/python-unittest-xml-reporting.changes
2015-05-19 23:42:51.000000000 +0200
+++
/work/SRC/openSUSE:Factory/.python-unittest-xml-reporting.new/python-unittest-xml-reporting.changes
2017-09-05 15:15:43.213020033 +0200
@@ -1,0 +2,11 @@
+Thu Aug 31 21:26:38 UTC 2017 - [email protected]
+
+- Update to version 2.1.0:
+ * no changelog available
+
+-------------------------------------------------------------------
+Thu Aug 24 13:56:41 UTC 2017 - [email protected]
+
+- singlespec auto-conversion
+
+-------------------------------------------------------------------
@@ -50,0 +62 @@
+
Old:
----
unittest-xml-reporting-1.12.0.tar.gz
New:
----
unittest-xml-reporting-2.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-unittest-xml-reporting.spec ++++++
--- /var/tmp/diff_new_pack.fDSdix/_old 2017-09-05 15:15:44.152887922 +0200
+++ /var/tmp/diff_new_pack.fDSdix/_new 2017-09-05 15:15:44.152887922 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-unittest-xml-reporting
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,26 +16,23 @@
#
+%{?!python_module:%define python_module() python-%{**} python3-%{**}}
+%bcond_with test
Name: python-unittest-xml-reporting
-Version: 1.12.0
+Version: 2.1.0
Release: 0
-Url: http://github.com/danielfm/unittest-xml-reporting/tree/master/
Summary: PyUnit-based test runner with JUnit like XML reporting
License: LGPL-3.0+
Group: Development/Languages/Python
-Source:
http://pypi.python.org/packages/source/u/unittest-xml-reporting/unittest-xml-reporting-%{version}.tar.gz
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
-BuildRequires: python-devel
-BuildRequires: python-setuptools
-BuildRequires: python-six >= 1.4.0
+Url: http://github.com/danielfm/unittest-xml-reporting/tree/master/
+Source:
https://files.pythonhosted.org/packages/source/u/unittest-xml-reporting/unittest-xml-reporting-%{version}.tar.gz
+BuildRequires: %{python_module devel}
+BuildRequires: %{python_module setuptools}
+BuildRequires: %{python_module six >= 1.4.0}
+BuildRequires: python-rpm-macros
Requires: python-six >= 1.4.0
-%if 0%{?suse_version} && 0%{?suse_version} <= 1110
-BuildRequires: python-unittest2
-Requires: python-unittest2
-%{!?python_sitelib: %global python_sitelib %(python -c "from
distutils.sysconfig import get_python_lib; print get_python_lib()")}
-%else
BuildArch: noarch
-%endif
+%python_subpackages
%description
unittest-xml-reporting is a unittest test runner that can save test results
@@ -46,15 +43,17 @@
%setup -q -n unittest-xml-reporting-%{version}
%build
-python setup.py build
+%python_build
%install
-python setup.py install --prefix=%{_prefix} --root=%{buildroot}
+%python_install
+%if %{with test}
%check
-python setup.py -q test
+%python_exec setup.py test
+%endif
-%files
+%files %{python_files}
%defattr(-,root,root,-)
%{python_sitelib}/*
++++++ unittest-xml-reporting-1.12.0.tar.gz ->
unittest-xml-reporting-2.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-1.12.0/PKG-INFO
new/unittest-xml-reporting-2.1.0/PKG-INFO
--- old/unittest-xml-reporting-1.12.0/PKG-INFO 2015-04-14 23:48:16.000000000
+0200
+++ new/unittest-xml-reporting-2.1.0/PKG-INFO 2016-04-10 07:18:56.000000000
+0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: unittest-xml-reporting
-Version: 1.12.0
+Version: 2.1.0
Summary: unittest-based test runner with Ant/JUnit like XML reporting.
Home-page: http://github.com/xmlrunner/unittest-xml-reporting/tree/master/
Author: Daniel Fernandes Martins
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-1.12.0/setup.py
new/unittest-xml-reporting-2.1.0/setup.py
--- old/unittest-xml-reporting-1.12.0/setup.py 2015-04-14 23:43:46.000000000
+0200
+++ new/unittest-xml-reporting-2.1.0/setup.py 2016-04-10 07:18:19.000000000
+0200
@@ -15,7 +15,8 @@
# this is for sdist to work.
import sys
if sys.version_info < (2, 7):
- install_requires += ['unittest2']
+ # python 2.6 no longer supported, use last 1.x release instead.
+ raise RuntimeError('This version requires Python 2.7+') # pragma: no cover
setup(
name = 'unittest-xml-reporting',
@@ -45,9 +46,5 @@
zip_safe = False,
include_package_data = True,
install_requires = install_requires,
- extras_require={
- # this is for wheels to work
- ':python_version=="2.6"': ['unittest2'],
- },
test_suite = 'tests'
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-1.12.0/tests/builder_test.py
new/unittest-xml-reporting-2.1.0/tests/builder_test.py
--- old/unittest-xml-reporting-1.12.0/tests/builder_test.py 2015-02-13
09:04:27.000000000 +0100
+++ new/unittest-xml-reporting-2.1.0/tests/builder_test.py 1970-01-01
01:00:00.000000000 +0100
@@ -1,251 +0,0 @@
-# -*- coding: utf-8
-
-from xmlrunner.unittest import unittest
-
-import xml.etree.ElementTree as ET
-from xml.dom.minidom import Document
-
-from xmlrunner import builder
-import six
-
-
-class TestXMLContextTest(unittest.TestCase):
- """TestXMLContext test cases.
- """
-
- def setUp(self):
- self.doc = Document()
- self.root = builder.TestXMLContext(self.doc)
-
- def test_current_element_tag_name(self):
- self.root.begin('tag', 'context-name')
- self.assertEqual(self.root.element_tag(), 'tag')
-
- def test_current_context_name(self):
- self.root.begin('tag', 'context-name')
- name = self.root.element.getAttribute('name')
- self.assertEqual(name, 'context-name')
-
- def test_current_context_invalid_unicode_name(self):
- self.root.begin('tag', six.u('context-name\x01\x0B'))
- name = self.root.element.getAttribute('name')
- self.assertEqual(name, six.u('context-name\uFFFD\uFFFD'))
-
- def test_increment_valid_testsuites_counters(self):
- self.root.begin('testsuites', 'name')
-
- for c in ('tests', 'failures', 'errors', 'skipped'):
- self.root.increment_counter(c)
-
- element = self.root.end()
-
- with self.assertRaises(KeyError):
- element.attributes['skipped']
-
- for c in ('tests', 'failures', 'errors'):
- value = element.attributes[c].value
- self.assertEqual(value, '1')
-
- def test_increment_valid_testsuite_counters(self):
- self.root.begin('testsuite', 'name')
-
- for c in ('tests', 'failures', 'errors', 'skipped'):
- self.root.increment_counter(c)
-
- element = self.root.end()
-
- for c in ('tests', 'failures', 'errors', 'skipped'):
- value = element.attributes[c].value
- self.assertEqual(value, '1')
-
- def test_increment_counters_for_unknown_context(self):
- self.root.begin('unknown', 'name')
-
- for c in ('tests', 'failures', 'errors', 'skipped', 'invalid'):
- self.root.increment_counter(c)
-
- element = self.root.end()
-
- for c in ('tests', 'failures', 'errors', 'skipped', 'invalid'):
- with self.assertRaises(KeyError):
- element.attributes[c]
-
- def test_empty_counters_on_end_context(self):
- self.root.begin('testsuite', 'name')
- element = self.root.end()
-
- for c in ('tests', 'failures', 'errors', 'skipped'):
- self.assertEqual(element.attributes[c].value, '0')
-
- def test_add_time_attribute_on_end_context(self):
- self.root.begin('testsuite', 'name')
- element = self.root.end()
-
- element.attributes['time'].value
-
-
-class TestXMLBuilderTest(unittest.TestCase):
- """TestXMLBuilder test cases.
- """
-
- def setUp(self):
- self.builder = builder.TestXMLBuilder()
- self.doc = self.builder._xml_doc
- self.builder.begin_context('testsuites', 'name')
-
- self.valid_chars = six.u('выбор')
-
- self.invalid_chars = '\x01'
- self.invalid_chars_replace = six.u('\ufffd')
-
- def test_root_has_no_parent(self):
- self.assertIsNone(self.builder.current_context().parent)
-
- def test_current_context_tag(self):
- self.assertEqual(self.builder.context_tag(), 'testsuites')
-
- def test_begin_nested_context(self):
- root = self.builder.current_context()
-
- self.builder.begin_context('testsuite', 'name')
-
- self.assertEqual(self.builder.context_tag(), 'testsuite')
- self.assertIs(self.builder.current_context().parent, root)
-
- def test_end_inexistent_context(self):
- self.builder = builder.TestXMLBuilder()
-
- self.assertFalse(self.builder.end_context())
- self.assertEqual(len(self.doc.childNodes), 0)
-
- def test_end_root_context(self):
- root = self.builder.current_context()
-
- self.assertTrue(self.builder.end_context())
- self.assertIsNone(self.builder.current_context())
-
- # No contexts left
- self.assertFalse(self.builder.end_context())
-
- doc_children = self.doc.childNodes
-
- self.assertEqual(len(doc_children), 1)
- self.assertEqual(len(doc_children[0].childNodes), 0)
- self.assertEqual(doc_children[0].tagName, root.element_tag())
-
- def test_end_nested_context(self):
- self.builder.begin_context('testsuite', 'name')
- nested = self.builder.current_context()
-
- self.assertTrue(self.builder.end_context())
-
- # Only updates the document when all contexts end
- self.assertEqual(len(self.doc.childNodes), 0)
-
- def test_end_all_context_stack(self):
- root = self.builder.current_context()
-
- self.builder.begin_context('testsuite', 'name')
- nested = self.builder.current_context()
-
- self.assertTrue(self.builder.end_context())
- self.assertTrue(self.builder.end_context())
-
- # No contexts left
- self.assertFalse(self.builder.end_context())
-
- root_child = self.doc.childNodes
-
- self.assertEqual(len(root_child), 1)
- self.assertEqual(root_child[0].tagName, root.element_tag())
-
- nested_child = root_child[0].childNodes
-
- self.assertEqual(len(nested_child), 1)
- self.assertEqual(nested_child[0].tagName, nested.element_tag())
-
- def test_append_valid_unicode_cdata_section(self):
- self.builder.append_cdata_section('tag', self.valid_chars)
- self.builder.end_context()
-
- root_child = self.doc.childNodes[0]
-
- cdata_container = root_child.childNodes[0]
- self.assertEqual(cdata_container.tagName, 'tag')
-
- cdata = cdata_container.childNodes[0]
- self.assertEqual(cdata.data, self.valid_chars)
-
- def test_append_invalid_unicode_cdata_section(self):
- self.builder.append_cdata_section('tag', self.invalid_chars)
- self.builder.end_context()
-
- root_child = self.doc.childNodes[0]
- cdata_container = root_child.childNodes[0]
-
- cdata = cdata_container.childNodes[0]
- self.assertEqual(cdata.data, self.invalid_chars_replace)
-
- def test_append_cdata_closing_tags_into_cdata_section(self):
- self.builder.append_cdata_section('tag',']]>')
- self.builder.end_context()
- root_child = self.doc.childNodes[0]
- cdata_container = root_child.childNodes[0]
- self.assertEqual(len(cdata_container.childNodes), 2)
- self.assertEqual(cdata_container.childNodes[0].data, ']]')
- self.assertEqual(cdata_container.childNodes[1].data, '>')
-
- def test_append_tag_with_valid_unicode_values(self):
- self.builder.append('tag', self.valid_chars, attr=self.valid_chars)
- self.builder.end_context()
-
- root_child = self.doc.childNodes[0]
- tag = root_child.childNodes[0]
-
- self.assertEqual(tag.tagName, 'tag')
- self.assertEqual(tag.getAttribute('attr'), self.valid_chars)
- self.assertEqual(tag.childNodes[0].data, self.valid_chars)
-
- def test_append_tag_with_invalid_unicode_values(self):
- self.builder.append('tag', self.invalid_chars, attr=self.invalid_chars)
- self.builder.end_context()
-
- root_child = self.doc.childNodes[0]
- tag = root_child.childNodes[0]
-
- self.assertEqual(tag.tagName, 'tag')
- self.assertEqual(tag.getAttribute('attr'), self.invalid_chars_replace)
- self.assertEqual(tag.childNodes[0].data, self.invalid_chars_replace)
-
- def test_increment_root_context_counter(self):
- self.builder.increment_counter('tests')
- self.builder.end_context()
-
- root_child = self.doc.childNodes[0]
-
- self.assertEqual(root_child.tagName, 'testsuites')
- self.assertEqual(root_child.getAttribute('tests'), '1')
-
- def test_increment_nested_context_counter(self):
- self.builder.increment_counter('tests')
-
- self.builder.begin_context('testsuite', 'name')
- self.builder.increment_counter('tests')
-
- self.builder.end_context()
- self.builder.end_context()
-
- root_child = self.doc.childNodes[0]
- nested_child = root_child.childNodes[0]
-
- self.assertEqual(root_child.tagName, 'testsuites')
- self.assertEqual(nested_child.getAttribute('tests'), '1')
- self.assertEqual(root_child.getAttribute('tests'), '2')
-
- def test_finish_nested_context(self):
- self.builder.begin_context('testsuite', 'name')
-
- tree = ET.fromstring(self.builder.finish())
-
- self.assertEqual(tree.tag, 'testsuites')
- self.assertEqual(len(tree.findall("./testsuite")), 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-1.12.0/tests/testsuite.py
new/unittest-xml-reporting-2.1.0/tests/testsuite.py
--- old/unittest-xml-reporting-1.12.0/tests/testsuite.py 2015-04-14
23:43:46.000000000 +0200
+++ new/unittest-xml-reporting-2.1.0/tests/testsuite.py 1970-01-01
01:00:00.000000000 +0100
@@ -1,280 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-"""Executable module to test unittest-xml-reporting.
-"""
-import sys
-
-from xmlrunner.unittest import unittest
-import xmlrunner
-from six import StringIO, BytesIO
-from tempfile import mkdtemp
-from shutil import rmtree
-from glob import glob
-from xml.dom import minidom
-import os.path
-
-
-class XMLTestRunnerTestCase(unittest.TestCase):
- """
- XMLTestRunner test case.
- """
- class DummyTest(unittest.TestCase):
- @unittest.skip("demonstrating skipping")
- def test_skip(self):
- pass # pragma: no cover
- @unittest.skip(u"demonstrating non-ascii skipping: éçà")
- def test_non_ascii_skip(self):
- pass # pragma: no cover
- def test_pass(self):
- pass
- def test_fail(self):
- self.assertTrue(False)
- @unittest.expectedFailure
- def test_expected_failure(self):
- self.assertTrue(False)
- @unittest.expectedFailure
- def test_unexpected_success(self):
- pass
- def test_error(self):
- 1 / 0
- def test_cdata_section(self):
- print('<![CDATA[content]]>')
- def test_non_ascii_error(self):
- self.assertEqual(u"éçà", 42)
- def test_unsafe_unicode(self):
- print(u"A\x00B\x08C\x0BD\x0C")
- def test_runner_buffer_output_pass(self):
- print('should not be printed')
- def test_runner_buffer_output_fail(self):
- print('should be printed')
- self.fail('expected to fail')
-
- def setUp(self):
- self.stream = StringIO()
- self.outdir = mkdtemp()
- self.verbosity = 0
- self.runner_kwargs = {}
- self.addCleanup(rmtree, self.outdir)
-
- def _test_xmlrunner(self, suite, runner=None):
- outdir = self.outdir
- stream = self.stream
- verbosity = self.verbosity
- runner_kwargs = self.runner_kwargs
- if runner is None:
- runner = xmlrunner.XMLTestRunner(
- stream=stream, output=outdir, verbosity=verbosity,
- **self.runner_kwargs)
- self.assertEqual(0, len(glob(os.path.join(outdir, '*xml'))))
- runner.run(suite)
- self.assertEqual(1, len(glob(os.path.join(outdir, '*xml'))))
- return runner
-
- def test_basic_unittest_constructs(self):
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_pass'))
- suite.addTest(self.DummyTest('test_skip'))
- suite.addTest(self.DummyTest('test_fail'))
- suite.addTest(self.DummyTest('test_expected_failure'))
- suite.addTest(self.DummyTest('test_unexpected_success'))
- suite.addTest(self.DummyTest('test_error'))
- self._test_xmlrunner(suite)
-
- def test_xmlrunner_non_ascii(self):
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_non_ascii_skip'))
- suite.addTest(self.DummyTest('test_non_ascii_error'))
- outdir = BytesIO()
- runner = xmlrunner.XMLTestRunner(
- stream=self.stream, output=outdir, verbosity=self.verbosity,
- **self.runner_kwargs)
- runner.run(suite)
- outdir.seek(0)
- output = outdir.read()
- self.assertIn(
- u'<skipped message="demonstrating non-ascii skipping: éçà"
type="skip"/>'.encode('utf8'),
- output)
-
- def test_xmlrunner_safe_xml_encoding_name(self):
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_pass'))
- outdir = BytesIO()
- runner = xmlrunner.XMLTestRunner(
- stream=self.stream, output=outdir, verbosity=self.verbosity,
- **self.runner_kwargs)
- runner.run(suite)
- outdir.seek(0)
- output = outdir.read()
- firstline = output.splitlines()[0]
- # test for issue #74
- self.assertIn('encoding="UTF-8"'.encode('utf8'), firstline)
-
- def test_xmlrunner_check_for_valid_xml_streamout(self):
- """
- This test checks if the xml document is valid if there are more than
- one testsuite and the output of the report is a single stream.
- """
- class DummyTestA(unittest.TestCase):
- def test_pass(self):
- pass
- class DummyTestB(unittest.TestCase):
- def test_pass(self):
- pass
- suite = unittest.TestSuite()
- suite.addTest( unittest.TestLoader().loadTestsFromTestCase(DummyTestA)
);
- suite.addTest( unittest.TestLoader().loadTestsFromTestCase(DummyTestB)
);
- outdir = BytesIO()
- runner = xmlrunner.XMLTestRunner(
- stream=self.stream, output=outdir, verbosity=self.verbosity,
- **self.runner_kwargs)
- runner.run(suite)
- outdir.seek(0)
- output = outdir.read()
- # Finally check if we have a valid XML document or not.
- try:
- minidom.parseString(output)
- except Exception as e:
- self.fail(e)
-
- def test_xmlrunner_unsafe_unicode(self):
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_unsafe_unicode'))
- outdir = BytesIO()
- runner = xmlrunner.XMLTestRunner(
- stream=self.stream, output=outdir, verbosity=self.verbosity,
- **self.runner_kwargs)
- runner.run(suite)
- outdir.seek(0)
- output = outdir.read()
- self.assertIn(u"<![CDATA[ABCD\n]]>".encode('utf8'), output)
-
- @unittest.expectedFailure
- def test_xmlrunner_buffer_output_pass(self):
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_runner_buffer_output_pass'))
- self._test_xmlrunner(suite)
- testsuite_output = self.stream.getvalue()
- # Since we are always buffering stdout/stderr
- # it is currently troublesome to print anything at all
- # and be consistent with --buffer option (issue #59)
- self.assertIn('should not be printed', testsuite_output)
- # this will be fixed when using the composite approach
- # that was under development in the rewrite branch.
-
- def test_xmlrunner_buffer_output_fail(self):
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_runner_buffer_output_fail'))
- self._test_xmlrunner(suite)
- testsuite_output = self.stream.getvalue()
- self.assertIn('should be printed', testsuite_output)
-
- @unittest.skipIf(not hasattr(unittest.TestCase,'subTest'),
- 'unittest.TestCase.subTest not present.')
- def test_unittest_subTest(self):
- # test for issue #77
- class DummySubTest(unittest.TestCase):
- def test_subTest(self):
- for i in range(2):
- with self.subTest(i=i):
- self.fail('this is a subtest.')
- outdir = BytesIO()
- runner = xmlrunner.XMLTestRunner(
- stream=self.stream, output=outdir, verbosity=self.verbosity,
- **self.runner_kwargs)
- suite = unittest.TestSuite()
- suite.addTest(DummySubTest('test_subTest'))
- runner.run(suite)
- outdir.seek(0)
- output = outdir.read()
- self.assertIn(
- b'<testcase classname="tests.testsuite.DummySubTest" '
- b'name="test_subTest (i=0)"',
- output)
- self.assertIn(
- b'<testcase classname="tests.testsuite.DummySubTest" '
- b'name="test_subTest (i=1)"',
- output)
-
- def test_xmlrunner_pass(self):
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_pass'))
- self._test_xmlrunner(suite)
-
- def test_xmlrunner_verbose(self):
- self.verbosity = 1
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_pass'))
- self._test_xmlrunner(suite)
-
- def test_xmlrunner_showall(self):
- self.verbosity = 2
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_pass'))
- self._test_xmlrunner(suite)
-
- def test_xmlrunner_cdata_section(self):
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_cdata_section'))
- self._test_xmlrunner(suite)
-
- def test_xmlrunner_outsuffix(self):
- self.runner_kwargs['outsuffix'] = '.somesuffix'
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_pass'))
- self._test_xmlrunner(suite)
- xmlfile = glob(os.path.join(self.outdir, '*xml'))[0]
- assert xmlfile.endswith('.somesuffix.xml')
-
- def test_xmlrunner_nosuffix(self):
- self.runner_kwargs['outsuffix'] = ''
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_pass'))
- self._test_xmlrunner(suite)
- xmlfile = glob(os.path.join(self.outdir, '*xml'))[0]
- xmlfile = os.path.basename(xmlfile)
- assert xmlfile.endswith('DummyTest.xml')
-
- def test_junitxml_properties(self):
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_pass'))
- suite.properties = dict(key='value')
- self._test_xmlrunner(suite)
-
- def test_xmlrunner_elapsed_times(self):
- self.runner_kwargs['elapsed_times'] = False
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_pass'))
- self._test_xmlrunner(suite)
-
- def test_xmlrunner_stream(self):
- stream = self.stream
- output = BytesIO()
- runner = xmlrunner.XMLTestRunner(
- stream=stream, output=output, verbosity=self.verbosity,
- **self.runner_kwargs)
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_pass'))
- runner.run(suite)
-
- def test_xmlrunner_output_subdir(self):
- stream = self.stream
- output = os.path.join(self.outdir, 'subdir')
- runner = xmlrunner.XMLTestRunner(
- stream=stream, output=output, verbosity=self.verbosity,
- **self.runner_kwargs)
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_pass'))
- runner.run(suite)
-
- def test_xmlrunner_patched_stdout(self):
- old_stdout, old_stderr = sys.stdout, sys.stderr
- try:
- sys.stdout, sys.stderr = StringIO(), StringIO()
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_pass'))
- suite.properties = dict(key='value')
- self._test_xmlrunner(suite)
- finally:
- sys.stdout, sys.stderr = old_stdout, old_stderr
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/unittest-xml-reporting-1.12.0/unittest_xml_reporting.egg-info/PKG-INFO
new/unittest-xml-reporting-2.1.0/unittest_xml_reporting.egg-info/PKG-INFO
--- old/unittest-xml-reporting-1.12.0/unittest_xml_reporting.egg-info/PKG-INFO
2015-04-14 23:48:13.000000000 +0200
+++ new/unittest-xml-reporting-2.1.0/unittest_xml_reporting.egg-info/PKG-INFO
2016-04-10 07:18:56.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: unittest-xml-reporting
-Version: 1.12.0
+Version: 2.1.0
Summary: unittest-based test runner with Ant/JUnit like XML reporting.
Home-page: http://github.com/xmlrunner/unittest-xml-reporting/tree/master/
Author: Daniel Fernandes Martins
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/unittest-xml-reporting-1.12.0/unittest_xml_reporting.egg-info/SOURCES.txt
new/unittest-xml-reporting-2.1.0/unittest_xml_reporting.egg-info/SOURCES.txt
---
old/unittest-xml-reporting-1.12.0/unittest_xml_reporting.egg-info/SOURCES.txt
2015-04-14 23:48:16.000000000 +0200
+++
new/unittest-xml-reporting-2.1.0/unittest_xml_reporting.egg-info/SOURCES.txt
2016-04-10 07:18:56.000000000 +0200
@@ -1,8 +1,5 @@
setup.cfg
setup.py
-tests/__init__.py
-tests/builder_test.py
-tests/testsuite.py
unittest_xml_reporting.egg-info/PKG-INFO
unittest_xml_reporting.egg-info/SOURCES.txt
unittest_xml_reporting.egg-info/dependency_links.txt
@@ -12,7 +9,6 @@
xmlrunner/__init__.py
xmlrunner/__main__.py
xmlrunner/builder.py
-xmlrunner/dirtyxml.py
xmlrunner/result.py
xmlrunner/runner.py
xmlrunner/unittest.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/unittest-xml-reporting-1.12.0/unittest_xml_reporting.egg-info/requires.txt
new/unittest-xml-reporting-2.1.0/unittest_xml_reporting.egg-info/requires.txt
---
old/unittest-xml-reporting-1.12.0/unittest_xml_reporting.egg-info/requires.txt
2015-04-14 23:48:13.000000000 +0200
+++
new/unittest-xml-reporting-2.1.0/unittest_xml_reporting.egg-info/requires.txt
2016-04-10 07:18:56.000000000 +0200
@@ -1,4 +1 @@
six>=1.4.0
-
-[:python_version=="2.6"]
-unittest2
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-1.12.0/xmlrunner/builder.py
new/unittest-xml-reporting-2.1.0/xmlrunner/builder.py
--- old/unittest-xml-reporting-1.12.0/xmlrunner/builder.py 2015-02-13
09:04:26.000000000 +0100
+++ new/unittest-xml-reporting-2.1.0/xmlrunner/builder.py 2016-04-10
07:18:19.000000000 +0200
@@ -2,7 +2,6 @@
import sys
import time
import six
-from six import unichr
from xml.dom.minidom import Document
@@ -21,8 +20,8 @@
if sys.maxunicode > 0x10000:
_char_tail = six.u('%s-%s') % (
- unichr(0x10000),
- unichr(min(sys.maxunicode, 0x10FFFF))
+ six.unichr(0x10000),
+ six.unichr(min(sys.maxunicode, 0x10FFFF))
)
_nontext_sub = re.compile(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-1.12.0/xmlrunner/dirtyxml.py
new/unittest-xml-reporting-2.1.0/xmlrunner/dirtyxml.py
--- old/unittest-xml-reporting-1.12.0/xmlrunner/dirtyxml.py 2015-03-17
16:52:52.000000000 +0100
+++ new/unittest-xml-reporting-2.1.0/xmlrunner/dirtyxml.py 1970-01-01
01:00:00.000000000 +0100
@@ -1,38 +0,0 @@
-#
-# Matches invalid XML1.0 unicode characters, like control characters:
-# http://www.w3.org/TR/2006/REC-xml-20060816/#charsets
-# For Jython users, see http://bugs.jython.org/issue1836
-#
-
-# INVALID_XML_1_0_UNICODE_RE = re.compile(
-# u'[\u0000-\u0008\u000B\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE\uFFFF]',
-# re.UNICODE
-# )
-
-import sys
-import re
-from six import unichr
-
-_illegal_unichrs = [
- (0x00, 0x08), (0x0B, 0x0C), (0x0E, 0x1F),
- (0x7F, 0x84), (0x86, 0x9F),
- (0xFDD0, 0xFDDF), (0xFFFE, 0xFFFF),
-]
-if sys.maxunicode >= 0x10000: # not narrow build
- _illegal_unichrs.extend([
- (0x1FFFE, 0x1FFFF), (0x2FFFE, 0x2FFFF),
- (0x3FFFE, 0x3FFFF), (0x4FFFE, 0x4FFFF),
- (0x5FFFE, 0x5FFFF), (0x6FFFE, 0x6FFFF),
- (0x7FFFE, 0x7FFFF), (0x8FFFE, 0x8FFFF),
- (0x9FFFE, 0x9FFFF), (0xAFFFE, 0xAFFFF),
- (0xBFFFE, 0xBFFFF), (0xCFFFE, 0xCFFFF),
- (0xDFFFE, 0xDFFFF), (0xEFFFE, 0xEFFFF),
- (0xFFFFE, 0xFFFFF), (0x10FFFE, 0x10FFFF),
- ])
-
-_illegal_ranges = [
- "%s-%s" % (unichr(low), unichr(high))
- for (low, high) in _illegal_unichrs
-]
-
-INVALID_XML_1_0_UNICODE_RE = re.compile(u'[%s]' % u''.join(_illegal_ranges))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/unittest-xml-reporting-1.12.0/xmlrunner/extra/djangotestrunner.py
new/unittest-xml-reporting-2.1.0/xmlrunner/extra/djangotestrunner.py
--- old/unittest-xml-reporting-1.12.0/xmlrunner/extra/djangotestrunner.py
2015-02-13 08:47:20.000000000 +0100
+++ new/unittest-xml-reporting-2.1.0/xmlrunner/extra/djangotestrunner.py
2016-04-10 07:18:19.000000000 +0200
@@ -10,29 +10,31 @@
"""
import xmlrunner
-import django
+import os.path
from django.conf import settings
+from django.test.runner import DiscoverRunner
-# future compatibilty with django
-# in django 1.6 DiscoverRunner bacame default and
-# DjangoTestSuiteRunner became depecated, will be removed in 1.8
-if django.VERSION < (1, 6):
- from django.test.simple import DjangoTestSuiteRunner
- _DjangoRunner = DjangoTestSuiteRunner
-else:
- from django.test.runner import DiscoverRunner
- _DjangoRunner = DiscoverRunner
-
-class XMLTestRunner(_DjangoRunner):
+class XMLTestRunner(DiscoverRunner):
def run_suite(self, suite, **kwargs):
+ dummy = kwargs # unused
verbosity = getattr(settings, 'TEST_OUTPUT_VERBOSE', 1)
# XXX: verbosity = self.verbosity
if isinstance(verbosity, bool):
verbosity = (1, 2)[verbosity]
descriptions = getattr(settings, 'TEST_OUTPUT_DESCRIPTIONS', False)
- output = getattr(settings, 'TEST_OUTPUT_DIR', '.')
- return xmlrunner.XMLTestRunner(
+ output_dir = getattr(settings, 'TEST_OUTPUT_DIR', '.')
+ single_file = getattr(settings, 'TEST_OUTPUT_FILE_NAME', None)
+
+ kwargs = dict(
verbosity=verbosity, descriptions=descriptions,
- output=output, failfast=self.failfast).run(suite)
+ failfast=self.failfast)
+ if single_file is not None:
+ file_path = os.path.join(output_dir, single_file)
+ with open(file_path, 'wb') as xml:
+ return xmlrunner.XMLTestRunner(
+ output=xml, **kwargs).run(suite)
+ else:
+ return xmlrunner.XMLTestRunner(
+ output=output_dir, **kwargs).run(suite)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-1.12.0/xmlrunner/result.py
new/unittest-xml-reporting-2.1.0/xmlrunner/result.py
--- old/unittest-xml-reporting-1.12.0/xmlrunner/result.py 2015-04-14
23:43:46.000000000 +0200
+++ new/unittest-xml-reporting-2.1.0/xmlrunner/result.py 2016-04-10
07:18:19.000000000 +0200
@@ -2,13 +2,13 @@
import os
import sys
import time
+import traceback
import six
import re
from os import path
-from six import unichr
from six.moves import StringIO
-from .unittest import TestResult, _TextTestResult
+from .unittest import TestResult, _TextTestResult, failfast
# Matches invalid XML1.0 unicode characters, like control characters:
@@ -33,13 +33,16 @@
])
_illegal_ranges = [
- "%s-%s" % (unichr(low), unichr(high))
+ "%s-%s" % (six.unichr(low), six.unichr(high))
for (low, high) in _illegal_unichrs
]
INVALID_XML_1_0_UNICODE_RE = re.compile(u'[%s]' % u''.join(_illegal_ranges))
+STDOUT_LINE = '\nStdout:\n%s'
+STDERR_LINE = '\nStderr:\n%s'
+
def xml_safe_unicode(base, encoding='utf-8'):
"""Return a unicode string containing only valid XML characters.
@@ -137,7 +140,7 @@
Used by XMLTestRunner.
"""
def __init__(self, stream=sys.stderr, descriptions=1, verbosity=1,
- elapsed_times=True, properties=None):
+ elapsed_times=True, properties=None, infoclass=None):
_TextTestResult.__init__(self, stream, descriptions, verbosity)
self.buffer = True # we are capturing test output
self._stdout_data = None
@@ -145,12 +148,16 @@
self.successes = []
self.callback = None
self.elapsed_times = elapsed_times
- self.properties = None # junit testsuite properties
+ self.properties = properties # junit testsuite properties
+ if infoclass is None:
+ self.infoclass = _TestInfo
+ else:
+ self.infoclass = infoclass
def _prepare_callback(self, test_info, target_list, verbose_str,
short_str):
"""
- Appends a _TestInfo to the given target list and sets a callback
+ Appends a `infoclass` to the given target list and sets a callback
method to be called by stopTest method.
"""
target_list.append(test_info)
@@ -186,8 +193,13 @@
self.stream.write(" ... ")
def _save_output_data(self):
- self._stdout_data = sys.stdout.getvalue()
- self._stderr_data = sys.stderr.getvalue()
+ # Only try to get sys.stdout and sys.sterr as they not be
+ # StringIO yet, e.g. when test fails during __call__
+ try:
+ self._stdout_data = sys.stdout.getvalue()
+ self._stderr_data = sys.stderr.getvalue()
+ except AttributeError:
+ pass
def stopTest(self, test):
"""
@@ -210,27 +222,31 @@
"""
self._save_output_data()
self._prepare_callback(
- _TestInfo(self, test), self.successes, 'OK', '.'
+ self.infoclass(self, test), self.successes, 'OK', '.'
)
+ @failfast
def addFailure(self, test, err):
"""
Called when a test method fails.
"""
self._save_output_data()
- testinfo = _TestInfo(self, test, _TestInfo.FAILURE, err)
+ testinfo = self.infoclass(
+ self, test, self.infoclass.FAILURE, err)
self.failures.append((
testinfo,
self._exc_info_to_string(err, test)
))
self._prepare_callback(testinfo, [], 'FAIL', 'F')
+ @failfast
def addError(self, test, err):
"""
Called when a test method raises an error.
"""
self._save_output_data()
- testinfo = _TestInfo(self, test, _TestInfo.ERROR, err)
+ testinfo = self.infoclass(
+ self, test, self.infoclass.ERROR, err)
self.errors.append((
testinfo,
self._exc_info_to_string(err, test)
@@ -241,20 +257,23 @@
"""
Called when a subTest method raises an error.
"""
- self._save_output_data()
- testinfo = _TestInfo(self, testcase, _TestInfo.ERROR, err,
subTest=test)
- self.errors.append((
- testinfo,
- self._exc_info_to_string(err, testcase)
- ))
- self._prepare_callback(testinfo, [], 'ERROR', 'E')
+ if err is not None:
+ self._save_output_data()
+ testinfo = self.infoclass(
+ self, testcase, self.infoclass.ERROR, err, subTest=test)
+ self.errors.append((
+ testinfo,
+ self._exc_info_to_string(err, testcase)
+ ))
+ self._prepare_callback(testinfo, [], 'ERROR', 'E')
def addSkip(self, test, reason):
"""
Called when a test method was skipped.
"""
self._save_output_data()
- testinfo = _TestInfo(self, test, _TestInfo.SKIP, reason)
+ testinfo = self.infoclass(
+ self, test, self.infoclass.SKIP, reason)
self.skipped.append((testinfo, reason))
self._prepare_callback(testinfo, [], 'SKIP', 'S')
@@ -262,7 +281,7 @@
"""
Writes information about the FAIL or ERROR to the stream.
"""
- for test_info, error in errors:
+ for test_info, dummy in errors:
self.stream.writeln(self.separator1)
self.stream.writeln(
'%s [%.3fs]: %s' % (flavour, test_info.elapsed_time,
@@ -293,15 +312,14 @@
return tests_by_testcase
def _report_testsuite_properties(xml_testsuite, xml_document, properties):
- xml_properties = xml_document.createElement('properties')
- xml_testsuite.appendChild(xml_properties)
if properties:
+ xml_properties = xml_document.createElement('properties')
+ xml_testsuite.appendChild(xml_properties)
for key, value in properties.items():
prop = xml_document.createElement('property')
prop.setAttribute('name', str(key))
prop.setAttribute('value', str(value))
xml_properties.appendChild(prop)
- return xml_properties
_report_testsuite_properties = staticmethod(_report_testsuite_properties)
@@ -319,22 +337,29 @@
testsuite.setAttribute(
'time', '%.3f' % sum(map(lambda e: e.elapsed_time, tests))
)
- failures = filter(lambda e: e.outcome == _TestInfo.FAILURE, tests)
+ failures = filter(lambda e: e.outcome == e.FAILURE, tests)
testsuite.setAttribute('failures', str(len(list(failures))))
- errors = filter(lambda e: e.outcome == _TestInfo.ERROR, tests)
+ errors = filter(lambda e: e.outcome == e.ERROR, tests)
testsuite.setAttribute('errors', str(len(list(errors))))
+ skips = filter(lambda e: e.outcome == _TestInfo.SKIP, tests)
+ testsuite.setAttribute('skipped', str(len(list(skips))))
+
_XMLTestResult._report_testsuite_properties(
testsuite, xml_document, properties)
+ for test in tests:
+ _XMLTestResult._report_testcase(test, testsuite, xml_document)
+
systemout = xml_document.createElement('system-out')
testsuite.appendChild(systemout)
stdout = StringIO()
for test in tests:
# Merge the stdout from the tests in a class
- stdout.write(test.stdout)
+ if test.stdout is not None:
+ stdout.write(test.stdout)
_XMLTestResult._createCDATAsections(
xml_document, systemout, stdout.getvalue())
@@ -344,7 +369,8 @@
stderr = StringIO()
for test in tests:
# Merge the stderr from the tests in a class
- stderr.write(test.stderr)
+ if test.stderr is not None:
+ stderr.write(test.stderr)
_XMLTestResult._createCDATAsections(
xml_document, systemerr, stderr.getvalue())
@@ -374,24 +400,26 @@
_createCDATAsections = staticmethod(_createCDATAsections)
- def _report_testcase(suite_name, test_result, xml_testsuite, xml_document):
+ def _report_testcase(test_result, xml_testsuite, xml_document):
"""
Appends a testcase section to the XML document.
"""
testcase = xml_document.createElement('testcase')
xml_testsuite.appendChild(testcase)
- testcase.setAttribute('classname', suite_name)
+ class_name = re.sub(r'^__main__.', '', test_result.id())
+ class_name = class_name.rpartition('.')[0]
+ testcase.setAttribute('classname', class_name)
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):
+ if (test_result.outcome != test_result.SUCCESS):
elem_name = ('failure', 'error', 'skipped')[test_result.outcome-1]
failure = xml_document.createElement(elem_name)
testcase.appendChild(failure)
- if test_result.outcome != _TestInfo.SKIP:
+ if test_result.outcome != test_result.SKIP:
failure.setAttribute(
'type',
safe_unicode(test_result.err[0].__name__)
@@ -442,8 +470,6 @@
testsuite = _XMLTestResult._report_testsuite(
suite_name, tests, doc, parentElement, self.properties
)
- for test in tests:
- _XMLTestResult._report_testcase(suite, test, testsuite, doc)
xml_content = doc.toprettyxml(
indent='\t',
encoding=test_runner.encoding
@@ -459,3 +485,57 @@
if not outputHandledAsString:
# Assume that test_runner.output is a stream
test_runner.output.write(xml_content)
+
+ def _exc_info_to_string(self, err, test):
+ """Converts a sys.exc_info()-style tuple of values into a string."""
+ if six.PY3:
+ # It works fine in python 3
+ try:
+ return super(_XMLTestResult, self)._exc_info_to_string(
+ err, test)
+ except AttributeError:
+ # We keep going using the legacy python <= 2 way
+ pass
+
+ # This comes directly from python2 unittest
+ exctype, value, tb = err
+ # Skip test runner traceback levels
+ while tb and self._is_relevant_tb_level(tb):
+ tb = tb.tb_next
+
+ if exctype is test.failureException:
+ # Skip assert*() traceback levels
+ length = self._count_relevant_tb_levels(tb)
+ msgLines = traceback.format_exception(exctype, value, tb, length)
+ else:
+ msgLines = traceback.format_exception(exctype, value, tb)
+
+ if self.buffer:
+ # Only try to get sys.stdout and sys.sterr as they not be
+ # StringIO yet, e.g. when test fails during __call__
+ try:
+ output = sys.stdout.getvalue()
+ except AttributeError:
+ output = None
+ try:
+ error = sys.stderr.getvalue()
+ except AttributeError:
+ error = None
+ if output:
+ if not output.endswith('\n'):
+ output += '\n'
+ msgLines.append(STDOUT_LINE % output)
+ if error:
+ if not error.endswith('\n'):
+ error += '\n'
+ msgLines.append(STDERR_LINE % error)
+ # This is the extra magic to make sure all lines are str
+ encoding = getattr(sys.stdout, 'encoding', 'utf-8')
+ lines = []
+ for line in msgLines:
+ if not isinstance(line, str):
+ # utf8 shouldnt be hard-coded, but not sure f
+ line = line.encode(encoding)
+ lines.append(line)
+
+ return ''.join(lines)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-1.12.0/xmlrunner/runner.py
new/unittest-xml-reporting-2.1.0/xmlrunner/runner.py
--- old/unittest-xml-reporting-1.12.0/xmlrunner/runner.py 2015-02-13
08:47:45.000000000 +0100
+++ new/unittest-xml-reporting-2.1.0/xmlrunner/runner.py 2016-04-10
07:18:19.000000000 +0200
@@ -16,7 +16,8 @@
"""
def __init__(self, output='.', outsuffix=None, stream=sys.stderr,
descriptions=True, verbosity=1, elapsed_times=True,
- failfast=False, buffer=False, encoding=UTF8):
+ failfast=False, buffer=False, encoding=UTF8,
+ resultclass=None):
TextTestRunner.__init__(self, stream, descriptions, verbosity,
failfast=failfast, buffer=buffer)
self.verbosity = verbosity
@@ -28,13 +29,18 @@
outsuffix = time.strftime("%Y%m%d%H%M%S")
self.outsuffix = outsuffix
self.elapsed_times = elapsed_times
+ if resultclass is None:
+ self.resultclass = _XMLTestResult
+ else:
+ self.resultclass = resultclass
def _make_result(self):
"""
Creates a TestResult object which will be used to store
information about the executed tests.
"""
- return _XMLTestResult(
+ # override in subclasses if necessary.
+ return self.resultclass(
self.stream, self.descriptions, self.verbosity, self.elapsed_times
)
@@ -45,6 +51,7 @@
try:
# Prepare the test execution
result = self._make_result()
+ result.failfast = self.failfast
if hasattr(test, 'properties'):
# junit testsuite properties
result.properties = test.properties
@@ -69,15 +76,10 @@
)
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
+ # other metrics
+ expectedFails = len(result.expectedFailures)
+ unexpectedSuccesses = len(result.unexpectedSuccesses)
+ skipped = len(result.skipped)
# Error traces
infos = []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-1.12.0/xmlrunner/unittest.py
new/unittest-xml-reporting-2.1.0/xmlrunner/unittest.py
--- old/unittest-xml-reporting-1.12.0/xmlrunner/unittest.py 2015-02-13
08:46:07.000000000 +0100
+++ new/unittest-xml-reporting-2.1.0/xmlrunner/unittest.py 2016-04-10
07:18:19.000000000 +0200
@@ -2,25 +2,18 @@
from __future__ import absolute_import
import sys
-if sys.version_info < (2, 7):
- # pylint: disable-msg=W0611
- import unittest2 as unittest
- from unittest2.runner import TextTestRunner
- from unittest2.runner import TextTestResult as _TextTestResult
- from unittest2.result import TestResult
- from unittest2.main import TestProgram
-else:
- # pylint: disable-msg=W0611
- import unittest
- from unittest import TextTestRunner
- from unittest import TestResult, _TextTestResult
- from unittest.main import TestProgram
- try:
- from unittest.main import USAGE_AS_MAIN
- TestProgram.USAGE = USAGE_AS_MAIN
- except ImportError:
- pass
+# pylint: disable-msg=W0611
+import unittest
+from unittest import TextTestRunner
+from unittest import TestResult, _TextTestResult
+from unittest.result import failfast
+from unittest.main import TestProgram
+try:
+ from unittest.main import USAGE_AS_MAIN
+ TestProgram.USAGE = USAGE_AS_MAIN
+except ImportError:
+ pass
__all__ = (
'unittest', 'TextTestRunner', 'TestResult', '_TextTestResult',
- 'TestProgram')
+ 'TestProgram', 'failfast')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-1.12.0/xmlrunner/version.py
new/unittest-xml-reporting-2.1.0/xmlrunner/version.py
--- old/unittest-xml-reporting-1.12.0/xmlrunner/version.py 2015-04-14
23:45:24.000000000 +0200
+++ new/unittest-xml-reporting-2.1.0/xmlrunner/version.py 2016-04-10
07:18:19.000000000 +0200
@@ -1,2 +1,2 @@
-__version__ = '1.12.0'
+__version__ = '2.1.0'