Hello community,
here is the log from the commit of package python-unittest-xml-reporting for
openSUSE:Leap:15.2 checked in at 2020-05-19 14:09:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/python-unittest-xml-reporting (Old)
and /work/SRC/openSUSE:Leap:15.2/.python-unittest-xml-reporting.new.2738
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-unittest-xml-reporting"
Tue May 19 14:09:08 2020 rev:13 rq:807106 version:2.5.2
Changes:
--------
---
/work/SRC/openSUSE:Leap:15.2/python-unittest-xml-reporting/python-unittest-xml-reporting.changes
2020-03-21 16:47:25.849662215 +0100
+++
/work/SRC/openSUSE:Leap:15.2/.python-unittest-xml-reporting.new.2738/python-unittest-xml-reporting.changes
2020-05-19 14:09:10.295079174 +0200
@@ -2,6 +1,0 @@
-Tue Mar 10 12:56:35 UTC 2020 - [email protected]
-
-- version update to 3.0.2
- * no upstream changelog found
-
--------------------------------------------------------------------
Old:
----
3.0.2.tar.gz
New:
----
2.5.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-unittest-xml-reporting.spec ++++++
--- /var/tmp/diff_new_pack.Cusri4/_old 2020-05-19 14:09:10.595079756 +0200
+++ /var/tmp/diff_new_pack.Cusri4/_new 2020-05-19 14:09:10.599079764 +0200
@@ -17,9 +17,8 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
-%define skip_python2 1
Name: python-unittest-xml-reporting
-Version: 3.0.2
+Version: 2.5.2
Release: 0
Summary: PyUnit-based test runner with JUnit like XML reporting
License: LGPL-3.0-or-later
@@ -34,6 +33,9 @@
Requires: python-six >= 1.4.0
Provides: python-xmlrunner = %{version}
BuildArch: noarch
+%ifpython2
+BuildRequires: python2-mock
+%endif
%python_subpackages
%description
++++++ 3.0.2.tar.gz -> 2.5.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-3.0.2/.travis.yml
new/unittest-xml-reporting-2.5.2/.travis.yml
--- old/unittest-xml-reporting-3.0.2/.travis.yml 2020-02-20
03:44:01.000000000 +0100
+++ new/unittest-xml-reporting-2.5.2/.travis.yml 2019-11-08
06:47:00.000000000 +0100
@@ -4,9 +4,14 @@
matrix:
include:
- - os: linux
- python: pypy3.5-6.0
- env: TOXENV=pypy3
+ - python: 2.7
+ env: TOXENV=py27
+ - python: 2.7
+ env: TOXENV=py27-djangolts
+ - python: 2.7
+ env: TOXENV=py27-djangocurr
+ - python: 2.7
+ env: TOXENV=quality
- python: 3.5
env: TOXENV=py35
- python: 3.6
@@ -15,14 +20,20 @@
env: TOXENV=py37
- python: 3.8
env: TOXENV=py38
- - python: 3.8
- env: TOXENV=py38-djangolts
- - python: 3.8
- env: TOXENV=py38-djangocurr
- - python: 3.8
- env: TOXENV=quality
- python: 3.8-dev
env: TOXENV=pytest
+ - os: linux
+ dist: xenial
+ python: pypy2.7-6.0
+ env: TOXENV=pypy
+ services:
+ - docker
+ - os: linux
+ dist: xenial
+ python: pypy3.5-6.0
+ env: TOXENV=pypy3
+ services:
+ - docker
before_install:
- python --version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-3.0.2/README.md
new/unittest-xml-reporting-2.5.2/README.md
--- old/unittest-xml-reporting-3.0.2/README.md 2020-02-20 03:44:01.000000000
+0100
+++ new/unittest-xml-reporting-2.5.2/README.md 2019-11-08 06:47:00.000000000
+0100
@@ -14,82 +14,33 @@
The files can be consumed by a wide range of tools, such as build systems, IDEs
and continuous integration servers.
+## Schema
-## Requirements
-
-* Python 3.5+
-* Please note Python 2.7 end-of-life was in Jan 2020, last version supporting
2.7 was 2.5.2
-* Please note Python 3.4 end-of-life was in Mar 2019, last version supporting
3.4 was 2.5.2
-* Please note Python 2.6 end-of-life was in Oct 2013, last version supporting
2.6 was 1.14.0
-
-
-## Limited support for `unittest.TestCase.subTest`
-
-https://docs.python.org/3/library/unittest.html#unittest.TestCase.subTest
-
-`unittest` has the concept of sub-tests for a `unittest.TestCase`; this
doesn't map well to an existing xUnit concept, so you won't find it in the
schema. What that means, is that you lose some granularity
-in the reports for sub-tests.
-
-`unittest` also does not report successful sub-tests, so the accounting won't
be exact.
-
-## Jenkins plugins
-
-- Jenkins JUnit plugin : https://plugins.jenkins.io/junit/
-- Jenkins xUnit plugin : https://plugins.jenkins.io/xunit/
-
-### Jenkins JUnit plugin
-
-This plugin does not perform XSD validation (at time of writing) and should
parse the XML file without issues.
-
-### Jenkins xUnit plugin version 1.100
-
-- [Jenkins (junit-10.xsd), xunit plugin
(2014-2018)](https://github.com/jenkinsci/xunit-plugin/blob/14c6e39c38408b9ed6280361484a13c6f5becca7/src/main/resources/org/jenkinsci/plugins/xunit/types/model/xsd/junit-10.xsd),
version `1.100`.
-
-This plugin does perfom XSD validation and uses the more lax XSD. This should
parse the XML file without issues.
-
-### Jenkins xUnit plugin version 1.104+
+There are many schemas with minor differences.
+We use one that is compatible with Jenkins xUnit plugin, a copy is
+available under `tests/vendor/jenkins/xunit-plugin/junit-10.xsd` (see attached
license).
-- [Jenkins (junit-10.xsd), xunit plugin
(2018-current)](https://github.com/jenkinsci/xunit-plugin/blob/ae25da5089d4f94ac6c4669bf736e4d416cc4665/src/main/resources/org/jenkinsci/plugins/xunit/types/model/xsd/junit-10.xsd),
version `1.104`+.
-
-This plugin does perfom XSD validation and uses the more strict XSD.
-
-See https://github.com/xmlrunner/unittest-xml-reporting/issues/209
-
-```
-import io
-import unittest
-import xmlrunner
-
-# run the tests storing results in memory
-out = io.BytesIO()
-unittest.main(
- testRunner=xmlrunner.XMLTestRunner(output=out),
- failfast=False, buffer=False, catchbreak=False, exit=False)
-```
-
-Transform the results removing extra attributes.
-```
-from xmlrunner.extra.xunit_plugin import transform
-
-with open('TEST-report.xml', 'wb') as report:
- report.write(transform(out.getvalue()))
-
-```
-
-## JUnit Schema ?
-
-There are many tools claiming to write JUnit reports, so you will find many
schemas with minor differences.
-
-We used the XSD that was available in the Jenkins xUnit plugin version
`1.100`; a copy is available under
`tests/vendor/jenkins/xunit-plugin/.../junit-10.xsd` (see attached license).
+- [Jenkins (junit-10.xsd), xunit plugin
(2014-2018)](https://github.com/jenkinsci/xunit-plugin/blob/14c6e39c38408b9ed6280361484a13c6f5becca7/src/main/resources/org/jenkinsci/plugins/xunit/types/model/xsd/junit-10.xsd),
please note the latest versions (2.2.4 and above are not backwards compatible)
You may also find these resources useful:
-
https://stackoverflow.com/questions/4922867/what-is-the-junit-xml-format-specification-that-hudson-supports
- https://stackoverflow.com/questions/11241781/python-unittests-in-jenkins
+- [Jenkins (junit-10.xsd), xunit plugin
2.2.4+](https://github.com/jenkinsci/xunit-plugin/blob/master/src/main/resources/org/jenkinsci/plugins/xunit/types/model/xsd/junit-10.xsd)
- [JUnit-Schema
(JUnit.xsd)](https://github.com/windyroad/JUnit-Schema/blob/master/JUnit.xsd)
- [Windyroad (JUnit.xsd)](http://windyroad.com.au/dl/Open%20Source/JUnit.xsd)
- [a gist (Jenkins xUnit test result
schema)](https://gist.github.com/erikd/4192748)
+## Things that are somewhat broken
+
+Python 3 has the concept of sub-tests for a `unittest.TestCase`; this doesn't
map well to an existing
+xUnit concept, so you won't find it in the schema. What that means, is that
you lose some granularity
+in the reports for sub-tests.
+
+## Requirements
+
+* Python 2.7 or 3.3+
+* Please note Python 2.6 end-of-life was in Oct 2013, last version supporting
2.6 was 1.14.0
## Installation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-3.0.2/setup.cfg
new/unittest-xml-reporting-2.5.2/setup.cfg
--- old/unittest-xml-reporting-3.0.2/setup.cfg 2020-02-20 03:44:01.000000000
+0100
+++ new/unittest-xml-reporting-2.5.2/setup.cfg 2019-11-08 06:47:00.000000000
+0100
@@ -1,3 +1,3 @@
[bdist_wheel]
universal = 1
-python-tag = py3
+python-tag = py2.py3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-3.0.2/setup.py
new/unittest-xml-reporting-2.5.2/setup.py
--- old/unittest-xml-reporting-3.0.2/setup.py 2020-02-20 03:44:01.000000000
+0100
+++ new/unittest-xml-reporting-2.5.2/setup.py 2019-11-08 06:47:00.000000000
+0100
@@ -15,10 +15,13 @@
with codecs.open(readme_path, 'rb', 'utf8') as readme_file:
long_description = readme_file.read()
+install_requires = ['six>=1.4.0']
+
# this is for sdist to work.
import sys
-if sys.version_info < (3, 5):
- raise RuntimeError('This version requires Python 3.5+') # pragma: no cover
+if sys.version_info < (2, 7):
+ # 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',
@@ -29,7 +32,6 @@
long_description_content_type = 'text/markdown',
license = 'BSD',
platforms = ['Any'],
- python_requires='>=3.5',
keywords = [
'pyunit', 'unittest', 'junit xml', 'xunit', 'report', 'testrunner',
'xmlrunner'
],
@@ -41,6 +43,8 @@
'Natural Language :: English',
'Operating System :: OS Independent',
'Programming Language :: Python',
+ 'Programming Language :: Python :: 2',
+ 'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
@@ -53,5 +57,6 @@
packages = ['xmlrunner', 'xmlrunner.extra'],
zip_safe = False,
include_package_data = True,
+ install_requires = install_requires,
test_suite = 'tests'
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-3.0.2/tests/builder_test.py
new/unittest-xml-reporting-2.5.2/tests/builder_test.py
--- old/unittest-xml-reporting-3.0.2/tests/builder_test.py 2020-02-20
03:44:01.000000000 +0100
+++ new/unittest-xml-reporting-2.5.2/tests/builder_test.py 2019-11-08
06:47:00.000000000 +0100
@@ -6,6 +6,7 @@
from xml.dom.minidom import Document
from xmlrunner import builder
+import six
class TestXMLContextTest(unittest.TestCase):
@@ -26,9 +27,9 @@
self.assertEqual(name, 'context-name')
def test_current_context_invalid_unicode_name(self):
- self.root.begin('tag', u'context-name\x01\x0B')
+ self.root.begin('tag', six.u('context-name\x01\x0B'))
name = self.root.element.getAttribute('name')
- self.assertEqual(name, u'context-name\uFFFD\uFFFD')
+ self.assertEqual(name, six.u('context-name\uFFFD\uFFFD'))
def test_increment_valid_testsuites_counters(self):
self.root.begin('testsuites', 'name')
@@ -98,10 +99,10 @@
self.doc = self.builder._xml_doc
self.builder.begin_context('testsuites', 'name')
- self.valid_chars = u'выбор'
+ self.valid_chars = six.u('выбор')
self.invalid_chars = '\x01'
- self.invalid_chars_replace = u'\ufffd'
+ self.invalid_chars_replace = six.u('\ufffd')
def test_root_has_no_parent(self):
self.assertIsNone(self.builder.current_context().parent)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/unittest-xml-reporting-3.0.2/tests/django_example/app/tests.py
new/unittest-xml-reporting-2.5.2/tests/django_example/app/tests.py
--- old/unittest-xml-reporting-3.0.2/tests/django_example/app/tests.py
2020-02-20 03:44:01.000000000 +0100
+++ new/unittest-xml-reporting-2.5.2/tests/django_example/app/tests.py
2019-11-08 06:47:00.000000000 +0100
@@ -4,13 +4,4 @@
# Create your tests here.
class DummyTestCase(TestCase):
def test_pass(self):
- """Test Pass"""
- pass
-
- def test_negative_comment1(self):
- """Use a close comment XML tag -->"""
- pass
-
- def test_negative_comment2(self):
- """Check XML tag </testsuites>"""
pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-3.0.2/tests/django_test.py
new/unittest-xml-reporting-2.5.2/tests/django_test.py
--- old/unittest-xml-reporting-3.0.2/tests/django_test.py 2020-02-20
03:44:01.000000000 +0100
+++ new/unittest-xml-reporting-2.5.2/tests/django_test.py 2019-11-08
06:47:00.000000000 +0100
@@ -4,7 +4,10 @@
import os
from os import path
import glob
-from unittest import mock
+try:
+ from unittest import mock
+except ImportError:
+ import mock
import tempfile
import shutil
@@ -16,7 +19,6 @@
from django.test.utils import get_runner
from django.conf import settings, UserSettingsHolder
from django.apps import apps
- settings.configure(DEBUG=True)
TESTS_DIR = path.dirname(__file__)
@@ -35,7 +37,6 @@
self.old_settings = settings._wrapped
os.environ['DJANGO_SETTINGS_MODULE'] = 'example.settings'
settings.INSTALLED_APPS # load settings on first access
- settings.DATABASES['default'] = {}
settings.DATABASES['default']['NAME'] = path.join(
self.tmpdir, 'db.sqlilte3')
# this goes around the "settings already loaded" issue.
@@ -57,16 +58,12 @@
test_ids = [test.id() for test in suite]
self.assertEqual(test_ids, [
'app2.tests.DummyTestCase.test_pass',
- 'app.tests.DummyTestCase.test_negative_comment1',
- 'app.tests.DummyTestCase.test_negative_comment2',
'app.tests.DummyTestCase.test_pass',
])
suite = runner.build_suite(test_labels=[])
test_ids = [test.id() for test in suite]
self.assertEqual(set(test_ids), set([
'app.tests.DummyTestCase.test_pass',
- 'app.tests.DummyTestCase.test_negative_comment1',
- 'app.tests.DummyTestCase.test_negative_comment2',
'app2.tests.DummyTestCase.test_pass',
]))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-3.0.2/tests/testsuite.py
new/unittest-xml-reporting-2.5.2/tests/testsuite.py
--- old/unittest-xml-reporting-3.0.2/tests/testsuite.py 2020-02-20
03:44:01.000000000 +0100
+++ new/unittest-xml-reporting-2.5.2/tests/testsuite.py 2019-11-08
06:47:00.000000000 +0100
@@ -15,7 +15,7 @@
from xmlrunner.result import _XMLTestResult
import doctest
import tests.doctest_example
-from io import StringIO, BytesIO
+from six import StringIO, BytesIO, exec_
from tempfile import mkdtemp
from tempfile import mkstemp
from shutil import rmtree
@@ -24,13 +24,17 @@
from lxml import etree
import os
import os.path
-from unittest import mock
+try:
+ from unittest import mock
+except ImportError:
+ import mock
-def _load_schema(version):
- path = os.path.join(
- os.path.dirname(__file__),
- 'vendor/jenkins/xunit-plugin', version, 'junit-10.xsd')
+
+def _load_schema():
+ path = os.path.join(os.path.dirname(__file__),
+ 'vendor/jenkins/xunit-plugin',
+ 'junit-10.xsd')
with open(path, 'r') as schema_file:
schema_doc = etree.parse(schema_file)
schema = etree.XMLSchema(schema_doc)
@@ -38,10 +42,12 @@
raise RuntimeError('Could not load JUnit schema') # pragma: no cover
-def validate_junit_report(version, text):
+JUnitSchema = _load_schema()
+
+
+def validate_junit_report(text):
document = etree.parse(BytesIO(text))
- schema = _load_schema(version)
- schema.assertValid(document)
+ JUnitSchema.assertValid(document)
class TestCaseSubclassWithNoSuper(unittest.TestCase):
@@ -108,7 +114,7 @@
return func(*args, **kwargs)
"""
evaldict = dict(func=f)
- exec(code, evaldict)
+ exec_(code, evaldict)
return evaldict['wrapper']
@@ -396,13 +402,21 @@
# allow output non-ascii letters to stdout
orig_stdout = sys.stdout
- sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
+ if getattr(sys.stdout, 'buffer', None):
+ # Python3
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
+ else:
+ # Python2
+ import codecs
+ sys.stdout = codecs.getwriter("utf-8")(sys.stdout)
try:
runner.run(suite)
finally:
- # Not to be closed when TextIOWrapper is disposed.
- sys.stdout.detach()
+ if getattr(sys.stdout, 'buffer', None):
+ # Python3
+ # Not to be closed when TextIOWrapper is disposed.
+ sys.stdout.detach()
sys.stdout = orig_stdout
outdir.seek(0)
output = outdir.read()
@@ -648,7 +662,7 @@
self.assertTrue(i_properties < i_testcase <
i_system_out < i_system_err)
# XSD validation - for good measure.
- validate_junit_report('14c6e39c38408b9ed6280361484a13c6f5becca7',
output)
+ validate_junit_report(output)
def test_junitxml_xsd_validation_empty_properties(self):
suite = unittest.TestSuite()
@@ -663,33 +677,7 @@
outdir.seek(0)
output = outdir.read()
self.assertNotIn('<properties>'.encode('utf8'), output)
- validate_junit_report('14c6e39c38408b9ed6280361484a13c6f5becca7',
output)
-
- @unittest.skipIf(hasattr(sys, 'pypy_version_info'),
- 'skip - PyPy + lxml seems to be hanging')
- def test_xunit_plugin_transform(self):
- suite = unittest.TestSuite()
- suite.addTest(self.DummyTest('test_fail'))
- suite.addTest(self.DummyTest('test_pass'))
- suite.properties = None
- 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()
-
- validate_junit_report('14c6e39c38408b9ed6280361484a13c6f5becca7',
output)
- with self.assertRaises(etree.DocumentInvalid):
- validate_junit_report('ae25da5089d4f94ac6c4669bf736e4d416cc4665',
output)
-
- from xmlrunner.extra.xunit_plugin import transform
- transformed = transform(output)
- validate_junit_report('14c6e39c38408b9ed6280361484a13c6f5becca7',
transformed)
- validate_junit_report('ae25da5089d4f94ac6c4669bf736e4d416cc4665',
transformed)
- self.assertIn('test_pass'.encode('utf8'), transformed)
- self.assertIn('test_fail'.encode('utf8'), transformed)
+ validate_junit_report(output)
def test_xmlrunner_elapsed_times(self):
self.runner_kwargs['elapsed_times'] = False
@@ -847,7 +835,10 @@
self.assertNotIn('should be printed', r[1].getvalue())
def test_partialmethod(self):
- from functools import partialmethod
+ try:
+ from functools import partialmethod
+ except ImportError:
+ raise unittest.SkipTest('functools.partialmethod is not
available.')
def test_partialmethod(test):
pass
class TestWithPartialmethod(unittest.TestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/unittest-xml-reporting-3.0.2/tests/vendor/jenkins/xunit-plugin/14c6e39c38408b9ed6280361484a13c6f5becca7/junit-10.xsd
new/unittest-xml-reporting-2.5.2/tests/vendor/jenkins/xunit-plugin/14c6e39c38408b9ed6280361484a13c6f5becca7/junit-10.xsd
---
old/unittest-xml-reporting-3.0.2/tests/vendor/jenkins/xunit-plugin/14c6e39c38408b9ed6280361484a13c6f5becca7/junit-10.xsd
2020-02-20 03:44:01.000000000 +0100
+++
new/unittest-xml-reporting-2.5.2/tests/vendor/jenkins/xunit-plugin/14c6e39c38408b9ed6280361484a13c6f5becca7/junit-10.xsd
1970-01-01 01:00:00.000000000 +0100
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-The MIT License (MIT)
-
-Copyright (c) 2014, Gregory Boissinot
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
- <xs:element name="failure">
- <xs:complexType mixed="true">
- <xs:attribute name="type" type="xs:string" use="optional"/>
- <xs:attribute name="message" type="xs:string" use="optional"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="error">
- <xs:complexType mixed="true">
- <xs:attribute name="type" type="xs:string" use="optional"/>
- <xs:attribute name="message" type="xs:string" use="optional"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="skipped">
- <xs:complexType mixed="true">
- <xs:attribute name="type" type="xs:string" use="optional"/>
- <xs:attribute name="message" type="xs:string" use="optional"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="properties">
- <xs:complexType>
- <xs:sequence>
- <xs:element ref="property" minOccurs="0"
maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="property">
- <xs:complexType>
- <xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="value" type="xs:string" use="required"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="system-err" type="xs:string"/>
- <xs:element name="system-out" type="xs:string"/>
-
- <xs:element name="testcase">
- <xs:complexType>
- <xs:sequence>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element ref="skipped"/>
- <xs:element ref="error"/>
- <xs:element ref="failure"/>
- <xs:element ref="system-out"/>
- <xs:element ref="system-err"/>
- </xs:choice>
- </xs:sequence>
- <xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="assertions" type="xs:string" use="optional"/>
- <xs:attribute name="time" type="xs:string" use="optional"/>
- <xs:attribute name="timestamp" type="xs:string" use="optional"/>
- <xs:attribute name="classname" type="xs:string" use="optional"/>
- <xs:attribute name="status" type="xs:string" use="optional"/>
- <xs:attribute name="class" type="xs:string" use="optional"/>
- <xs:attribute name="file" type="xs:string" use="optional"/>
- <xs:attribute name="line" type="xs:string" use="optional"/>
- <xs:attribute name="log" type="xs:string" use="optional"/>
- <xs:attribute name="group" type="xs:string" use="optional"/>
- <xs:attribute name="url" type="xs:string" use="optional"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="testsuite">
- <xs:complexType>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element ref="testsuite"/>
- <xs:element ref="properties"/>
- <xs:element ref="testcase"/>
- <xs:element ref="system-out"/>
- <xs:element ref="system-err"/>
- </xs:choice>
- <xs:attribute name="name" type="xs:string" use="optional"/>
- <xs:attribute name="tests" type="xs:string" use="required"/>
- <xs:attribute name="failures" type="xs:string" use="optional"/>
- <xs:attribute name="errors" type="xs:string" use="optional"/>
- <xs:attribute name="time" type="xs:string" use="optional"/>
- <xs:attribute name="disabled" type="xs:string" use="optional"/>
- <xs:attribute name="skipped" type="xs:string" use="optional"/>
- <xs:attribute name="skips" type="xs:string" use="optional"/>
- <xs:attribute name="timestamp" type="xs:string" use="optional"/>
- <xs:attribute name="hostname" type="xs:string" use="optional"/>
- <xs:attribute name="id" type="xs:string" use="optional"/>
- <xs:attribute name="package" type="xs:string" use="optional"/>
- <xs:attribute name="assertions" type="xs:string" use="optional"/>
- <xs:attribute name="file" type="xs:string" use="optional"/>
- <xs:attribute name="skip" type="xs:string" use="optional"/>
- <xs:attribute name="log" type="xs:string" use="optional"/>
- <xs:attribute name="url" type="xs:string" use="optional"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="testsuites">
- <xs:complexType>
- <xs:sequence>
- <xs:element ref="testsuite" minOccurs="0"
maxOccurs="unbounded"/>
- </xs:sequence>
- <xs:attribute name="name" type="xs:string" use="optional"/>
- <xs:attribute name="time" type="xs:string" use="optional"/>
- <xs:attribute name="tests" type="xs:string" use="optional"/>
- <xs:attribute name="failures" type="xs:string" use="optional"/>
- <xs:attribute name="disabled" type="xs:string" use="optional"/>
- <xs:attribute name="errors" type="xs:string" use="optional"/>
- </xs:complexType>
- </xs:element>
-
-</xs:schema>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/unittest-xml-reporting-3.0.2/tests/vendor/jenkins/xunit-plugin/ae25da5089d4f94ac6c4669bf736e4d416cc4665/junit-10.xsd
new/unittest-xml-reporting-2.5.2/tests/vendor/jenkins/xunit-plugin/ae25da5089d4f94ac6c4669bf736e4d416cc4665/junit-10.xsd
---
old/unittest-xml-reporting-3.0.2/tests/vendor/jenkins/xunit-plugin/ae25da5089d4f94ac6c4669bf736e4d416cc4665/junit-10.xsd
2020-02-20 03:44:01.000000000 +0100
+++
new/unittest-xml-reporting-2.5.2/tests/vendor/jenkins/xunit-plugin/ae25da5089d4f94ac6c4669bf736e4d416cc4665/junit-10.xsd
1970-01-01 01:00:00.000000000 +0100
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-The MIT License (MIT)
-
-Copyright (c) 2014, Gregory Boissinot
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
- <xs:simpleType name="SUREFIRE_TIME">
- <xs:restriction base="xs:string">
- <xs:pattern
value="(([0-9]{0,3},)*[0-9]{3}|[0-9]{0,3})*(\.[0-9]{0,3})?"/>
- </xs:restriction>
- </xs:simpleType>
-
- <xs:complexType name="rerunType" mixed="true"> <!-- mixed (XML contains
text) to be compatible with version previous than 2.22.1 -->
- <xs:sequence>
- <xs:element name="stackTrace" type="xs:string" minOccurs="0" />
<!-- optional to be compatible with version previous than 2.22.1 -->
- <xs:element name="system-out" type="xs:string" minOccurs="0" />
- <xs:element name="system-err" type="xs:string" minOccurs="0" />
- </xs:sequence>
- <xs:attribute name="message" type="xs:string" />
- <xs:attribute name="type" type="xs:string" use="required" />
- </xs:complexType>
-
- <xs:element name="failure">
- <xs:complexType mixed="true">
- <xs:attribute name="type" type="xs:string"/>
- <xs:attribute name="message" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="error">
- <xs:complexType mixed="true">
- <xs:attribute name="type" type="xs:string"/>
- <xs:attribute name="message" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="skipped">
- <xs:complexType mixed="true">
- <xs:attribute name="type" type="xs:string"/>
- <xs:attribute name="message" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="properties">
- <xs:complexType>
- <xs:sequence>
- <xs:element ref="property" minOccurs="0"
maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="property">
- <xs:complexType>
- <xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="value" type="xs:string" use="required"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="system-err" type="xs:string"/>
- <xs:element name="system-out" type="xs:string"/>
- <xs:element name="rerunFailure" type="rerunType"/>
- <xs:element name="rerunError" type="rerunType"/>
- <xs:element name="flakyFailure" type="rerunType"/>
- <xs:element name="flakyError" type="rerunType"/>
-
- <xs:element name="testcase">
- <xs:complexType>
- <xs:sequence>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element ref="skipped"/>
- <xs:element ref="error"/>
- <xs:element ref="failure"/>
- <xs:element ref="rerunFailure" minOccurs="0"
maxOccurs="unbounded"/>
- <xs:element ref="rerunError" minOccurs="0"
maxOccurs="unbounded"/>
- <xs:element ref="flakyFailure" minOccurs="0"
maxOccurs="unbounded"/>
- <xs:element ref="flakyError" minOccurs="0"
maxOccurs="unbounded"/>
- <xs:element ref="system-out"/>
- <xs:element ref="system-err"/>
- </xs:choice>
- </xs:sequence>
- <xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="time" type="xs:string"/>
- <xs:attribute name="classname" type="xs:string"/>
- <xs:attribute name="group" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="testsuite">
- <xs:complexType>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element ref="testsuite"/>
- <xs:element ref="properties"/>
- <xs:element ref="testcase"/>
- <xs:element ref="system-out"/>
- <xs:element ref="system-err"/>
- </xs:choice>
- <xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="tests" type="xs:string" use="required"/>
- <xs:attribute name="failures" type="xs:string" use="required"/>
- <xs:attribute name="errors" type="xs:string" use="required"/>
- <xs:attribute name="group" type="xs:string" />
- <xs:attribute name="time" type="SUREFIRE_TIME"/>
- <xs:attribute name="skipped" type="xs:string" />
- <xs:attribute name="timestamp" type="xs:string" />
- <xs:attribute name="hostname" type="xs:string" />
- <xs:attribute name="id" type="xs:string" />
- <xs:attribute name="package" type="xs:string" />
- <xs:attribute name="file" type="xs:string"/>
- <xs:attribute name="log" type="xs:string"/>
- <xs:attribute name="url" type="xs:string"/>
- <xs:attribute name="version" type="xs:string"/>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="testsuites">
- <xs:complexType>
- <xs:sequence>
- <xs:element ref="testsuite" minOccurs="0"
maxOccurs="unbounded" />
- </xs:sequence>
- <xs:attribute name="name" type="xs:string" />
- <xs:attribute name="time" type="SUREFIRE_TIME"/>
- <xs:attribute name="tests" type="xs:string" />
- <xs:attribute name="failures" type="xs:string" />
- <xs:attribute name="errors" type="xs:string" />
- </xs:complexType>
- </xs:element>
-
-</xs:schema>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/unittest-xml-reporting-3.0.2/tests/vendor/jenkins/xunit-plugin/junit-10.xsd
new/unittest-xml-reporting-2.5.2/tests/vendor/jenkins/xunit-plugin/junit-10.xsd
---
old/unittest-xml-reporting-3.0.2/tests/vendor/jenkins/xunit-plugin/junit-10.xsd
1970-01-01 01:00:00.000000000 +0100
+++
new/unittest-xml-reporting-2.5.2/tests/vendor/jenkins/xunit-plugin/junit-10.xsd
2019-11-08 06:47:00.000000000 +0100
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+The MIT License (MIT)
+
+Copyright (c) 2014, Gregory Boissinot
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="failure">
+ <xs:complexType mixed="true">
+ <xs:attribute name="type" type="xs:string" use="optional"/>
+ <xs:attribute name="message" type="xs:string" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="error">
+ <xs:complexType mixed="true">
+ <xs:attribute name="type" type="xs:string" use="optional"/>
+ <xs:attribute name="message" type="xs:string" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="skipped">
+ <xs:complexType mixed="true">
+ <xs:attribute name="type" type="xs:string" use="optional"/>
+ <xs:attribute name="message" type="xs:string" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="properties">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="property" minOccurs="0"
maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="property">
+ <xs:complexType>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ <xs:attribute name="value" type="xs:string" use="required"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="system-err" type="xs:string"/>
+ <xs:element name="system-out" type="xs:string"/>
+
+ <xs:element name="testcase">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="skipped"/>
+ <xs:element ref="error"/>
+ <xs:element ref="failure"/>
+ <xs:element ref="system-out"/>
+ <xs:element ref="system-err"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ <xs:attribute name="assertions" type="xs:string" use="optional"/>
+ <xs:attribute name="time" type="xs:string" use="optional"/>
+ <xs:attribute name="timestamp" type="xs:string" use="optional"/>
+ <xs:attribute name="classname" type="xs:string" use="optional"/>
+ <xs:attribute name="status" type="xs:string" use="optional"/>
+ <xs:attribute name="class" type="xs:string" use="optional"/>
+ <xs:attribute name="file" type="xs:string" use="optional"/>
+ <xs:attribute name="line" type="xs:string" use="optional"/>
+ <xs:attribute name="log" type="xs:string" use="optional"/>
+ <xs:attribute name="group" type="xs:string" use="optional"/>
+ <xs:attribute name="url" type="xs:string" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="testsuite">
+ <xs:complexType>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="testsuite"/>
+ <xs:element ref="properties"/>
+ <xs:element ref="testcase"/>
+ <xs:element ref="system-out"/>
+ <xs:element ref="system-err"/>
+ </xs:choice>
+ <xs:attribute name="name" type="xs:string" use="optional"/>
+ <xs:attribute name="tests" type="xs:string" use="required"/>
+ <xs:attribute name="failures" type="xs:string" use="optional"/>
+ <xs:attribute name="errors" type="xs:string" use="optional"/>
+ <xs:attribute name="time" type="xs:string" use="optional"/>
+ <xs:attribute name="disabled" type="xs:string" use="optional"/>
+ <xs:attribute name="skipped" type="xs:string" use="optional"/>
+ <xs:attribute name="skips" type="xs:string" use="optional"/>
+ <xs:attribute name="timestamp" type="xs:string" use="optional"/>
+ <xs:attribute name="hostname" type="xs:string" use="optional"/>
+ <xs:attribute name="id" type="xs:string" use="optional"/>
+ <xs:attribute name="package" type="xs:string" use="optional"/>
+ <xs:attribute name="assertions" type="xs:string" use="optional"/>
+ <xs:attribute name="file" type="xs:string" use="optional"/>
+ <xs:attribute name="skip" type="xs:string" use="optional"/>
+ <xs:attribute name="log" type="xs:string" use="optional"/>
+ <xs:attribute name="url" type="xs:string" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="testsuites">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="testsuite" minOccurs="0"
maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="optional"/>
+ <xs:attribute name="time" type="xs:string" use="optional"/>
+ <xs:attribute name="tests" type="xs:string" use="optional"/>
+ <xs:attribute name="failures" type="xs:string" use="optional"/>
+ <xs:attribute name="disabled" type="xs:string" use="optional"/>
+ <xs:attribute name="errors" type="xs:string" use="optional"/>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-3.0.2/tox.ini
new/unittest-xml-reporting-2.5.2/tox.ini
--- old/unittest-xml-reporting-3.0.2/tox.ini 2020-02-20 03:44:01.000000000
+0100
+++ new/unittest-xml-reporting-2.5.2/tox.ini 2019-11-08 06:47:00.000000000
+0100
@@ -4,23 +4,25 @@
norecursedirs = tests/django_example
[tox]
-envlist = begin,py{py3,35,36,37,38},pytest,py38-django{lts,curr},end,quality
+envlist = begin,py{27,py,py3,35,36,37},pytest,py27-django{lts,curr},end,quality
[tox:travis]
+2.7 = begin,py27,py27-django{lts,curr},end,quality
3.5 = py35
3.6 = py36
3.7 = py37,pytest
-3.8 = begin,py38,py38-django{lts,curr},end,quality
+3.8 = py38
[testenv]
deps =
coverage
codecov>=1.4.0
coveralls
- djangolts,pytest: django>=1.11.0,<1.12.0
- djangocurr: django>=2.2.0
+ djangolts,pytest: django>=1.8.8,<1.9.0
+ djangocurr: django>=1.9.1
pytest: pytest
lxml>=3.6.0
+ mock
commands =
coverage run --append setup.py test
coverage report --omit='.tox/*'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-3.0.2/xmlrunner/builder.py
new/unittest-xml-reporting-2.5.2/xmlrunner/builder.py
--- old/unittest-xml-reporting-3.0.2/xmlrunner/builder.py 2020-02-20
03:44:01.000000000 +0100
+++ new/unittest-xml-reporting-2.5.2/xmlrunner/builder.py 2019-11-08
06:47:00.000000000 +0100
@@ -2,6 +2,7 @@
import sys
import datetime
import time
+import six
from xml.dom.minidom import Document
@@ -19,18 +20,18 @@
_char_tail = ''
if sys.maxunicode > 0x10000:
- _char_tail = (u'%s-%s') % (
- chr(0x10000),
- chr(min(sys.maxunicode, 0x10FFFF))
+ _char_tail = six.u('%s-%s') % (
+ six.unichr(0x10000),
+ six.unichr(min(sys.maxunicode, 0x10FFFF))
)
_nontext_sub = re.compile(
- r'[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD%s]' % _char_tail,
+ six.u(r'[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD%s]') % _char_tail,
re.U
).sub
-def replace_nontext(text, replacement=u'\uFFFD'):
+def replace_nontext(text, replacement=six.u('\uFFFD')):
return _nontext_sub(replacement, text)
@@ -103,7 +104,7 @@
)
if valid_counter_for_element:
- value = str(
+ value = six.text_type(
self.counters.get(counter_name, 0)
)
self.element.setAttribute(counter_name, value)
@@ -191,7 +192,7 @@
element = self._xml_doc.createElement(tag)
for key, value in kwargs.items():
- filtered_value = replace_nontext(str(value))
+ filtered_value = replace_nontext(six.text_type(value))
element.setAttribute(key, filtered_value)
if content:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/unittest-xml-reporting-3.0.2/xmlrunner/extra/xunit_plugin.py
new/unittest-xml-reporting-2.5.2/xmlrunner/extra/xunit_plugin.py
--- old/unittest-xml-reporting-3.0.2/xmlrunner/extra/xunit_plugin.py
2020-02-20 03:44:01.000000000 +0100
+++ new/unittest-xml-reporting-2.5.2/xmlrunner/extra/xunit_plugin.py
1970-01-01 01:00:00.000000000 +0100
@@ -1,29 +0,0 @@
-import io
-import lxml.etree as etree
-
-
-TRANSFORM = etree.XSLT(etree.XML(b'''\
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
- <xsl:output method="xml" indent="yes" />
-
- <!-- /dev/null for these attributes -->
- <xsl:template match="//testcase/@file" />
- <xsl:template match="//testcase/@line" />
- <xsl:template match="//testcase/@timestamp" />
-
- <!-- copy the rest -->
- <xsl:template match="node()|@*">
- <xsl:copy>
- <xsl:apply-templates select="node()|@*" />
- </xsl:copy>
- </xsl:template>
-</xsl:stylesheet>'''))
-
-
-def transform(xml_data):
- out = io.BytesIO()
- xml_doc = etree.XML(xml_data)
- result = TRANSFORM(xml_doc)
- result.write(out)
- return out.getvalue()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-3.0.2/xmlrunner/result.py
new/unittest-xml-reporting-2.5.2/xmlrunner/result.py
--- old/unittest-xml-reporting-3.0.2/xmlrunner/result.py 2020-02-20
03:44:01.000000000 +0100
+++ new/unittest-xml-reporting-2.5.2/xmlrunner/result.py 2019-11-08
06:47:00.000000000 +0100
@@ -6,9 +6,10 @@
import datetime
import time
import traceback
+import six
import re
from os import path
-from io import StringIO
+from six.moves import StringIO
# use direct import to bypass freezegun
from time import time
@@ -38,7 +39,7 @@
])
_illegal_ranges = [
- "%s-%s" % (chr(low), chr(high))
+ "%s-%s" % (six.unichr(low), six.unichr(high))
for (low, high) in _illegal_unichrs
]
@@ -49,13 +50,27 @@
STDERR_LINE = '\nStderr:\n%s'
+def _to_unicode(data):
+ """Returns unicode in Python2 and str in Python3"""
+ if six.PY3:
+ return six.text_type(data)
+ try:
+ # Try utf8
+ return six.text_type(data)
+ except UnicodeDecodeError:
+ return repr(data).decode('utf8', 'replace')
+
+
def safe_unicode(data, encoding='utf8'):
"""Return a unicode string containing only valid XML characters.
encoding - if data is a byte string it is first decoded to unicode
using this encoding.
"""
- data = str(data)
+ data = _to_unicode(data)
+ if isinstance(data, six.binary_type):
+ # e.g. IronPython, see #182
+ data = data.decode(encoding)
return INVALID_XML_1_0_UNICODE_RE.sub('', data)
@@ -89,9 +104,6 @@
def writable(self):
return True
- def getvalue(self):
- return self._second.getvalue()
-
def writelines(self, lines):
self._first.writelines(lines)
self._second.writelines(lines)
@@ -106,7 +118,8 @@
return wrote
else:
- # file-like object that doesn't return wrote bytes.
+ # file-like object in Python2
+ # It doesn't return wrote bytes.
self._first.write(b)
self._second.write(b)
return len(b)
@@ -128,7 +141,7 @@
SKIP: 'skipped',
}
- def __init__(self, test_result, test_method, outcome=SUCCESS, err=None,
subTest=None, filename=None, lineno=None, doc=None):
+ def __init__(self, test_result, test_method, outcome=SUCCESS, err=None,
subTest=None, filename=None, lineno=None):
self.test_result = test_result
self.outcome = outcome
self.elapsed_time = 0
@@ -159,7 +172,6 @@
self.filename = filename
self.lineno = lineno
- self.doc = doc
def id(self):
return self.test_id
@@ -201,7 +213,6 @@
self.properties = properties # junit testsuite properties
self.filename = None
self.lineno = None
- self.doc = None
if infoclass is None:
self.infoclass = _TestInfo
else:
@@ -215,7 +226,6 @@
"""
test_info.filename = self.filename
test_info.lineno = self.lineno
- test_info.doc = self.doc
target_list.append(test_info)
def callback():
@@ -261,8 +271,6 @@
# Handle partial and partialmethod objects.
test_method = getattr(test_method, 'func', test_method)
_, self.lineno = inspect.getsourcelines(test_method)
-
- self.doc = test_method.__doc__
except (AttributeError, IOError, TypeError):
# issue #188, #189, #195
# some frameworks can make test method opaque.
@@ -560,12 +568,6 @@
if test_result.lineno is not None:
testcase.setAttribute('line', str(test_result.lineno))
- if test_result.doc is not None:
- comment = str(test_result.doc)
- # The use of '--' is forbidden in XML comments
- comment = comment.replace('--', '--')
- testcase.appendChild(xml_document.createComment(comment))
-
result_elem_name = test_result.OUTCOME_ELEMENTS[test_result.outcome]
if result_elem_name is not None:
@@ -607,7 +609,7 @@
all_results = self._get_info_by_testcase()
outputHandledAsString = \
- isinstance(test_runner.output, str)
+ isinstance(test_runner.output, six.string_types)
if (outputHandledAsString and not os.path.exists(test_runner.output)):
os.makedirs(test_runner.output)
@@ -657,4 +659,49 @@
def _exc_info_to_string(self, err, test):
"""Converts a sys.exc_info()-style tuple of values into a string."""
- return super(_XMLTestResult, self)._exc_info_to_string(err, test)
+ 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:
+ output = self._stdout_capture.getvalue()
+ error = self._stdout_capture.getvalue()
+ 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')
+ if encoding is None:
+ 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-3.0.2/xmlrunner/runner.py
new/unittest-xml-reporting-2.5.2/xmlrunner/runner.py
--- old/unittest-xml-reporting-3.0.2/xmlrunner/runner.py 2020-02-20
03:44:01.000000000 +0100
+++ new/unittest-xml-reporting-2.5.2/xmlrunner/runner.py 2019-11-08
06:47:00.000000000 +0100
@@ -3,6 +3,8 @@
import sys
import time
+import six
+
from .unittest import TextTestRunner, TestProgram
from .result import _XMLTestResult
@@ -17,8 +19,10 @@
"""
def __init__(self, output='.', outsuffix=None,
elapsed_times=True, encoding=UTF8,
- resultclass=None,
+ resultclass=None, warnings=None,
**kwargs):
+ if six.PY3:
+ kwargs['warnings'] = warnings
super(XMLTestRunner, self).__init__(**kwargs)
self.output = output
self.encoding = encoding
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-3.0.2/xmlrunner/unittest.py
new/unittest-xml-reporting-2.5.2/xmlrunner/unittest.py
--- old/unittest-xml-reporting-3.0.2/xmlrunner/unittest.py 2020-02-20
03:44:01.000000000 +0100
+++ new/unittest-xml-reporting-2.5.2/xmlrunner/unittest.py 2019-11-08
06:47:00.000000000 +0100
@@ -8,7 +8,11 @@
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',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/unittest-xml-reporting-3.0.2/xmlrunner/version.py
new/unittest-xml-reporting-2.5.2/xmlrunner/version.py
--- old/unittest-xml-reporting-3.0.2/xmlrunner/version.py 2020-02-20
03:44:01.000000000 +0100
+++ new/unittest-xml-reporting-2.5.2/xmlrunner/version.py 2019-11-08
06:47:00.000000000 +0100
@@ -1,2 +1,2 @@
-__version__ = '3.0.2'
+__version__ = '2.5.2'