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'


Reply via email to