Hello community,
here is the log from the commit of package python3-unittest-xml-reporting for
openSUSE:Factory checked in at 2015-11-16 18:52:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python3-unittest-xml-reporting (Old)
and /work/SRC/openSUSE:Factory/.python3-unittest-xml-reporting.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-unittest-xml-reporting"
Changes:
--------
---
/work/SRC/openSUSE:Factory/python3-unittest-xml-reporting/python3-unittest-xml-reporting.changes
2015-04-15 16:25:00.000000000 +0200
+++
/work/SRC/openSUSE:Factory/.python3-unittest-xml-reporting.new/python3-unittest-xml-reporting.changes
2015-11-16 18:52:13.000000000 +0100
@@ -1,0 +2,23 @@
+Mon Nov 16 16:11:28 UTC 2015 - [email protected]
+
+- specfile:
+ * tar ball doesn't include test files, comment out sed command
+ during %setup
+
+- update to version 1.13.0:
+ * Fix 'getvalue' AttributeError when test fails during __call__
+ * Add a test case for error added during __call__()
+ * Move to Travis container-based infrastructure
+ * respect junit xsd, empty properties (issue #90)
+ * respect junit xsd (issue #90)
+ * snippet should use python highlighter
+ * add test for failfast
+ * Fix Readme and add doctest examples.
+ * Add docstrings processing example to README
+ * fix coverage bug with 4.0
+ * Fix crashes for on-ascii failures
+ * Bring Django versions current in tox.ini
+ * add failfast support
+ * Fix for issue #85
+
+-------------------------------------------------------------------
Old:
----
unittest-xml-reporting-1.12.0.tar.gz
New:
----
unittest-xml-reporting-1.13.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python3-unittest-xml-reporting.spec ++++++
--- /var/tmp/diff_new_pack.L440dh/_old 2015-11-16 18:52:14.000000000 +0100
+++ /var/tmp/diff_new_pack.L440dh/_new 2015-11-16 18:52:14.000000000 +0100
@@ -17,7 +17,7 @@
Name: python3-unittest-xml-reporting
-Version: 1.12.0
+Version: 1.13.0
Release: 0
Url: http://github.com/danielfm/unittest-xml-reporting/tree/master/
Summary: PyUnit-based test runner with JUnit like XML reporting
@@ -39,7 +39,7 @@
%prep
%setup -q -n unittest-xml-reporting-%{version}
-sed -i "1d" tests/testsuite.py
+#sed -i "1d" tests/testsuite.py
%build
python3 setup.py build
++++++ unittest-xml-reporting-1.12.0.tar.gz ->
unittest-xml-reporting-1.13.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-1.13.0/PKG-INFO
--- old/unittest-xml-reporting-1.12.0/PKG-INFO 2015-04-14 23:48:16.000000000
+0200
+++ new/unittest-xml-reporting-1.13.0/PKG-INFO 2015-11-15 18:35:43.000000000
+0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: unittest-xml-reporting
-Version: 1.12.0
+Version: 1.13.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/tests/builder_test.py
new/unittest-xml-reporting-1.13.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-1.13.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-1.13.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-1.13.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-1.13.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-1.13.0/unittest_xml_reporting.egg-info/PKG-INFO
2015-11-15 18:35:42.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: unittest-xml-reporting
-Version: 1.12.0
+Version: 1.13.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-1.13.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-1.13.0/unittest_xml_reporting.egg-info/SOURCES.txt
2015-11-15 18:35:43.000000000 +0100
@@ -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-1.13.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-1.13.0/unittest_xml_reporting.egg-info/requires.txt
2015-11-15 18:35:42.000000000 +0100
@@ -1,4 +1,4 @@
six>=1.4.0
[:python_version=="2.6"]
-unittest2
\ No newline at end of file
+unittest2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-1.12.0/xmlrunner/dirtyxml.py
new/unittest-xml-reporting-1.13.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-1.13.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/result.py
new/unittest-xml-reporting-1.13.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-1.13.0/xmlrunner/result.py 2015-11-15
18:35:16.000000000 +0100
@@ -2,13 +2,14 @@
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:
@@ -40,6 +41,9 @@
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.
@@ -186,8 +190,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):
"""
@@ -213,6 +222,7 @@
_TestInfo(self, test), self.successes, 'OK', '.'
)
+ @failfast
def addFailure(self, test, err):
"""
Called when a test method fails.
@@ -225,6 +235,7 @@
))
self._prepare_callback(testinfo, [], 'FAIL', 'F')
+ @failfast
def addError(self, test, err):
"""
Called when a test method raises an error.
@@ -241,13 +252,14 @@
"""
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 = _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')
def addSkip(self, test, reason):
"""
@@ -293,19 +305,18 @@
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)
- def _report_testsuite(suite_name, tests, xml_document, parentElement,
+ def _report_testsuite(suite_name, suite, tests, xml_document,
parentElement,
properties):
"""
Appends the testsuite section to the XML document.
@@ -328,13 +339,17 @@
_XMLTestResult._report_testsuite_properties(
testsuite, xml_document, properties)
+ for test in tests:
+ _XMLTestResult._report_testcase(suite, 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 +359,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())
@@ -440,10 +456,8 @@
# Build the XML file
testsuite = _XMLTestResult._report_testsuite(
- suite_name, tests, doc, parentElement, self.properties
+ suite_name, suite, 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 +473,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-1.13.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-1.13.0/xmlrunner/runner.py 2015-11-14
20:57:49.000000000 +0100
@@ -45,6 +45,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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-1.12.0/xmlrunner/unittest.py
new/unittest-xml-reporting-1.13.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-1.13.0/xmlrunner/unittest.py 2015-11-14
20:57:49.000000000 +0100
@@ -7,13 +7,14 @@
import unittest2 as unittest
from unittest2.runner import TextTestRunner
from unittest2.runner import TextTestResult as _TextTestResult
- from unittest2.result import TestResult
+ from unittest2.result import TestResult, failfast
from unittest2.main import TestProgram
else:
# 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
@@ -23,4 +24,4 @@
__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-1.13.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-1.13.0/xmlrunner/version.py 2015-11-15
18:35:16.000000000 +0100
@@ -1,2 +1,2 @@
-__version__ = '1.12.0'
+__version__ = '1.13.0'