Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-django-coverage-plugin for openSUSE:Factory checked in at 2023-02-10 14:36:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-django-coverage-plugin (Old) and /work/SRC/openSUSE:Factory/.python-django-coverage-plugin.new.1848 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-coverage-plugin" Fri Feb 10 14:36:16 2023 rev:5 rq:1064240 version:3.0.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-django-coverage-plugin/python-django-coverage-plugin.changes 2022-09-15 22:58:08.661038191 +0200 +++ /work/SRC/openSUSE:Factory/.python-django-coverage-plugin.new.1848/python-django-coverage-plugin.changes 2023-02-10 14:36:23.162302611 +0100 @@ -1,0 +2,7 @@ +Fri Feb 10 12:37:29 UTC 2023 - Dirk Müller <dmuel...@suse.com> + +- update to 3.0.0: + * Dropped support for Python 2.7, Python 3.6, and Django 1.8. + * Declare our support for Python 3.11 and Django 4.1. + +------------------------------------------------------------------- Old: ---- django_coverage_plugin-2.0.3.tar.gz New: ---- django_coverage_plugin-3.0.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-django-coverage-plugin.spec ++++++ --- /var/tmp/diff_new_pack.SaT220/_old 2023-02-10 14:36:23.590305168 +0100 +++ /var/tmp/diff_new_pack.SaT220/_new 2023-02-10 14:36:23.594305192 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-django-coverage-plugin # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-django-coverage-plugin -Version: 2.0.3 +Version: 3.0.0 Release: 0 Summary: Django template coveragepy plugin License: Apache-2.0 ++++++ django_coverage_plugin-2.0.3.tar.gz -> django_coverage_plugin-3.0.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/.github/workflows/tests.yml new/django_coverage_plugin-3.0.0/.github/workflows/tests.yml --- old/django_coverage_plugin-2.0.3/.github/workflows/tests.yml 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/.github/workflows/tests.yml 2022-12-06 10:56:26.000000000 +0100 @@ -12,11 +12,18 @@ # week, Sundays at 6:00 UTC. - cron: "0 6 * * 0" +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true defaults: run: shell: bash +env: + PIP_DISABLE_PIP_VERSION_CHECK: 1 + FORCE_COLOR: 1 # Get colored pytest output + jobs: tests: name: "Python ${{ matrix.python-version }} on ${{ matrix.os }}" @@ -31,16 +38,11 @@ python-version: # When changing this list, be sure to check the [gh-actions] list in # tox.ini so that tox will run properly. - - "2.7" - - "3.6" - "3.7" - "3.8" - "3.9" - "3.10" - exclude: - # Windows 2.7 doesn't work because Microsoft removed stuff we needed. - - os: windows-latest - python-version: "2.7" + - "3.11" fail-fast: false steps: @@ -84,7 +86,7 @@ - name: "Set up Python" uses: "actions/setup-python@v2" with: - python-version: "3.8" + python-version: "3.7" - name: "Install dependencies" run: | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/.isort.cfg new/django_coverage_plugin-3.0.0/.isort.cfg --- old/django_coverage_plugin-2.0.3/.isort.cfg 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/.isort.cfg 2022-12-06 10:56:26.000000000 +0100 @@ -4,4 +4,4 @@ include_trailing_comma=True line_length=79 multi_line_output=3 -known_third_party = coverage,django,setuptools,six,unittest_mixins +known_third_party = coverage,django,setuptools,unittest_mixins diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/Makefile new/django_coverage_plugin-3.0.0/Makefile --- old/django_coverage_plugin-2.0.3/Makefile 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/Makefile 2022-12-06 10:56:26.000000000 +0100 @@ -24,7 +24,6 @@ sterile: clean ## Remove all non-controlled content, even if expensive. -rm -rf .tox* - kit: ## Make the source distribution. python -m build python -m twine check dist/* @@ -32,6 +31,9 @@ kit_upload: ## Upload the built distributions to PyPI. python -m twine upload --verbose dist/* -tag: ## Make a git tag with the version number +tag: ## Make a git tag with the version number. git tag -a -m "Version v$$(python setup.py --version)" v$$(python setup.py --version) git push --all + +ghrelease: ## Make a GitHub release for the latest version. + python -m scriv github-release diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/README.rst new/django_coverage_plugin-3.0.0/README.rst --- old/django_coverage_plugin-2.0.3/README.rst 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/README.rst 2022-12-06 10:56:26.000000000 +0100 @@ -1,6 +1,13 @@ +================================== +Django Template Coverage.py Plugin +================================== + +A `coverage.py`_ plugin to measure test coverage of Django templates. + .. start-badges -|status| |kit| |license| |versions| |djversions| +| |status| |kit| |license| +| |versions| |djversions| .. |status| image:: https://img.shields.io/pypi/status/django_coverage_plugin.svg :target: https://pypi.python.org/pypi/django_coverage_plugin @@ -14,23 +21,21 @@ .. |versions| image:: https://img.shields.io/pypi/pyversions/django_coverage_plugin.svg :target: https://pypi.python.org/pypi/django_coverage_plugin :alt: Supported Python Versions -.. |djversions| image:: https://img.shields.io/badge/Django-1.8%20%7C%201.11%20%7C%202.0%20%7C%202.1%20%7C%202.2%20%7C%203.0-44b78b.svg +.. |djversions| image:: https://img.shields.io/badge/Django-1.8%20%7C%201.11%20%7C%202.2%20%7C%203.2%20%7C%204.1-44b78b.svg :target: https://pypi.python.org/pypi/django_coverage_plugin :alt: Supported Django Versions -.. end-badges +------------------ -================================== -Django Template Coverage.py Plugin -================================== +.. end-badges -A `coverage.py`_ plugin to measure test coverage of Django templates. +Supported on: -Supported Python versions: 2.7, and 3.6 through 3.10. +- Python: 3.7 through 3.11. -Supported Django versions: 1.8, 1.11, 2.x, 3.x and 4.x. +- Django: 1.11, 2.x, 3.x and 4.x. -Supported coverage.py versions: 4.x or higher. +- Coverage.py: 4.x or higher. The plugin is pip installable:: @@ -130,10 +135,23 @@ History ~~~~~~~ +.. scriv-insert-here + +v3.0.0 â 2022-12-06 +------------------- + +Dropped support for Python 2.7, Python 3.6, and Django 1.8. + + +v2.0.4 â 2022-10-31 +------------------- + +Declare our support for Python 3.11 and Django 4.1. + v2.0.3 â 2022-05-04 ------------------- -Add support for Django 4.0 +Add support for Django 4.0. v2.0.2 â 2021-11-11 @@ -222,6 +240,7 @@ Fixes another instance of `issue 32`_, which was the result of an initialization order problem. +.. _issue 32: https://github.com/nedbat/django_coverage_plugin/issues/32 v1.4.1 â 2017-01-25 @@ -230,9 +249,6 @@ Fixes `issue 32`_, which was the result of an initialization order problem. -.. _issue 32: https://github.com/nedbat/django_coverage_plugin/issues/32 - - v1.4 â 2017-01-16 ----------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/django_coverage_plugin/plugin.py new/django_coverage_plugin-3.0.0/django_coverage_plugin/plugin.py --- old/django_coverage_plugin-2.0.3/django_coverage_plugin/plugin.py 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/django_coverage_plugin/plugin.py 2022-12-06 10:56:26.000000000 +0100 @@ -3,8 +3,6 @@ """The Django template coverage plugin.""" -from __future__ import print_function - import os.path import re @@ -19,7 +17,6 @@ from django.template.base import Lexer, NodeList, Template, TextNode from django.template.defaulttags import VerbatimNode from django.templatetags.i18n import BlockTranslateNode -from six.moves import range try: from django.template.base import TokenType @@ -99,39 +96,28 @@ return True -if django.VERSION < (1, 8): - raise RuntimeError("Django Coverage Plugin requires Django 1.8 or higher") +if django.VERSION < (1, 11): + raise RuntimeError("Django Coverage Plugin requires Django 1.11 or higher") -if django.VERSION >= (1, 9): - # Since we are grabbing at internal details, we have to adapt as they - # change over versions. - def filename_for_frame(frame): - try: - return frame.f_locals["self"].origin.name - except (KeyError, AttributeError): - return None +# Since we are grabbing at internal details, we have to adapt as they +# change over versions. +def filename_for_frame(frame): + try: + return frame.f_locals["self"].origin.name + except (KeyError, AttributeError): + return None - def position_for_node(node): - try: - return node.token.position - except AttributeError: - return None - def position_for_token(token): - return token.position -else: - def filename_for_frame(frame): - try: - return frame.f_locals["self"].source[0].name - except (KeyError, AttributeError, IndexError): - return None +def position_for_node(node): + try: + return node.token.position + except AttributeError: + return None - def position_for_node(node): - return node.source[1] - def position_for_token(token): - return token.source[1] +def position_for_token(token): + return token.position def read_template_source(filename): @@ -178,7 +164,7 @@ return [ ("django_template_dir", self.django_template_dir), ("environment", sorted( - ("%s = %s" % (k, v)) + ("{} = {}".format(k, v)) for k, v in os.environ.items() if "DJANGO" in k )), @@ -252,7 +238,7 @@ return -1, -1 if SHOW_TRACING: - print("{!r}: {}".format(render_self, position)) + print(f"{render_self!r}: {position}") s_start, s_end = position if isinstance(render_self, TextNode): first_line = render_self.s.splitlines(True)[0] @@ -307,7 +293,7 @@ class FileReporter(coverage.plugin.FileReporter): def __init__(self, filename): - super(FileReporter, self).__init__(filename) + super().__init__(filename) # TODO: html filenames are absolute. self._source = None @@ -316,15 +302,15 @@ if self._source is None: try: self._source = read_template_source(self.filename) - except (IOError, UnicodeError) as exc: - raise NoSource("Couldn't read {}: {}".format(self.filename, exc)) + except (OSError, UnicodeError) as exc: + raise NoSource(f"Couldn't read {self.filename}: {exc}") return self._source def lines(self): source_lines = set() if SHOW_PARSING: - print("-------------- {}".format(self.filename)) + print(f"-------------- {self.filename}") if django.VERSION >= (1, 9): lexer = Lexer(self.source()) @@ -402,7 +388,7 @@ source_lines.update(range(lineno, lineno+num_lines)) if SHOW_PARSING: - print("\t\t\tNow source_lines is: {!r}".format(source_lines)) + print(f"\t\t\tNow source_lines is: {source_lines!r}") return source_lines diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/howto.txt new/django_coverage_plugin-3.0.0/howto.txt --- old/django_coverage_plugin-2.0.3/howto.txt 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/howto.txt 2022-12-06 10:56:26.000000000 +0100 @@ -12,4 +12,4 @@ $ make clean kit $ make kit_upload $ make tag -- make a new gh release: https://github.com/nedbat/django_coverage_plugin/releases/new + $ make ghrelease diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/requirements.txt new/django_coverage_plugin-3.0.0/requirements.txt --- old/django_coverage_plugin-2.0.3/requirements.txt 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/requirements.txt 2022-12-06 10:56:26.000000000 +0100 @@ -1,4 +1,5 @@ # To run tests, we just need tox. tox >= 1.8 build +scriv twine diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/setup.cfg new/django_coverage_plugin-3.0.0/setup.cfg --- old/django_coverage_plugin-2.0.3/setup.cfg 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/setup.cfg 2022-12-06 10:56:26.000000000 +0100 @@ -8,3 +8,8 @@ ignore::DeprecationWarning # ...but show them if they are from our code. default::DeprecationWarning:django_coverage_plugin + +[scriv] +fragment_directory = scriv.d +output_file = README.rst +rst_header_chars = -. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/setup.py new/django_coverage_plugin-3.0.0/setup.py --- old/django_coverage_plugin-2.0.3/setup.py 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/setup.py 2022-12-06 10:56:26.000000000 +0100 @@ -1,5 +1,4 @@ #!/usr/bin/env python -# -*- encoding: utf-8 -*- """Setup for Django Coverage Plugin Licensed under the Apache 2.0 License @@ -7,9 +6,7 @@ - https://github.com/nedbat/django_coverage_plugin/blob/master/NOTICE.txt """ -from __future__ import absolute_import, print_function -import io import re from os.path import dirname, join @@ -21,7 +18,7 @@ Parameter: encoding kwarg may be set """ - return io.open( + return open( join(dirname(__file__), *names), encoding=kwargs.get('encoding', 'utf8') ).read() @@ -32,34 +29,33 @@ Intended Audience :: Developers License :: OSI Approved :: Apache Software License Operating System :: OS Independent -Programming Language :: Python :: 2.7 -Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 +Programming Language :: Python :: 3.11 Programming Language :: Python :: Implementation :: CPython Programming Language :: Python :: Implementation :: PyPy Topic :: Software Development :: Quality Assurance Topic :: Software Development :: Testing Development Status :: 5 - Production/Stable Framework :: Django -Framework :: Django :: 1.8 Framework :: Django :: 1.11 Framework :: Django :: 2.2 Framework :: Django :: 3.2 -Framework :: Django :: 4.0 +Framework :: Django :: 4.1 """ setup( name='django_coverage_plugin', - version='2.0.3', + version='3.0.0', description='Django template coverage.py plugin', long_description=( - re.compile( - '^.. start-badges.*^.. end-badges', - re.M | re.S, - ).sub('', read('README.rst')) + re.sub( + '(?ms)^.. start-badges.*^.. end-badges', + '', + read('README.rst'), + ) ), long_description_content_type='text/x-rst', author='Ned Batchelder', @@ -68,8 +64,7 @@ packages=['django_coverage_plugin'], install_requires=[ 'coverage', - 'six >= 1.4.0', ], - license='Apache 2.0', + license='Apache-2.0', classifiers=classifiers.splitlines(), ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/tests/banner.py new/django_coverage_plugin-3.0.0/tests/banner.py --- old/django_coverage_plugin-2.0.3/tests/banner.py 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/tests/banner.py 2022-12-06 10:56:26.000000000 +0100 @@ -3,16 +3,16 @@ """For printing the versions from tox.ini.""" -from __future__ import print_function - import platform +import coverage import django print( - "{} {}; Django {}".format( + "{} {}; Django {}; Coverage {}".format( platform.python_implementation(), platform.python_version(), - django.get_version() + django.get_version(), + coverage.__version__, ) ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/tests/plugin_test.py new/django_coverage_plugin-3.0.0/tests/plugin_test.py --- old/django_coverage_plugin-2.0.3/tests/plugin_test.py 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/tests/plugin_test.py 2022-12-06 10:56:26.000000000 +0100 @@ -21,7 +21,7 @@ from django_coverage_plugin.plugin import DjangoTemplatePlugin -def test_settings(): +def get_test_settings(): """Create a dict full of default Django settings for the tests.""" the_settings = { 'CACHES': { @@ -53,14 +53,10 @@ ], }) - if django.VERSION < (1, 10): - # for {% ssi %} - the_settings['TEMPLATES'][0]['OPTIONS']['allowed_include_roots'] = [""] - return the_settings -settings.configure(**test_settings()) +settings.configure(**get_test_settings()) if hasattr(django, "setup"): django.setup() @@ -70,11 +66,11 @@ """A base class for all our tests.""" def setUp(self): - super(DjangoPluginTestCase, self).setUp() + super().setUp() self.template_directory = "templates" def _path(self, name=None): - return "{}/{}".format(self.template_directory, name or self.template_file) + return f"{self.template_directory}/{name or self.template_file}" def make_template(self, text, name=None): """Make a template with `text`. @@ -195,14 +191,14 @@ self.assertEqual( executable, actual_executable, - "Executable lines aren't as expected: %r != %r" % ( + "Executable lines aren't as expected: {!r} != {!r}".format( executable, actual_executable, ), ) self.assertEqual( missing or [], actual_missing, - "Missing lines aren't as expected: %r != %r" % ( + "Missing lines aren't as expected: {!r} != {!r}".format( missing, actual_missing, ), ) @@ -230,31 +226,52 @@ return xml_coverage @contextlib.contextmanager - def assert_plugin_disabled(self, msg): - """Assert that our plugin was disabled during an operation.""" - # self.run_django_coverage will raise PluginDisabled if the plugin - # was disabled. + def assert_coverage_warnings(self, *msgs, min_cov=None): + """Assert that coverage.py warnings are raised that contain all msgs. + + If coverage version isn't at least min_cov, then no warnings are expected. + + """ # Coverage.py 6.0 made the warnings real warnings, so we have to adapt # how we test the warnings based on the version. - if coverage.version.version_info >= (6, 0): + if min_cov is not None and coverage.version_info < min_cov: + # Don't check for warnings on lower versions of coverage + yield + return + elif coverage.version_info >= (6, 0): import coverage.exceptions as cov_exc ctxmgr = self.assertWarns(cov_exc.CoverageWarning) else: - ctxmgr = nullcontext() + ctxmgr = contextlib.nullcontext() with ctxmgr as cw: - with self.assertRaises(PluginDisabled): - yield + yield if cw is not None: warn_text = "\n".join(str(w.message) for w in cw.warnings) else: warn_text = self.stderr() - self.assertIn( - "Disabling plug-in 'django_coverage_plugin.DjangoTemplatePlugin' " - "due to an exception:", - warn_text - ) - self.assertIn("DjangoTemplatePluginException: " + msg, warn_text) + for msg in msgs: + self.assertIn(msg, warn_text) + + @contextlib.contextmanager + def assert_plugin_disabled(self, msg): + """Assert that our plugin was disabled during an operation.""" + # self.run_django_coverage will raise PluginDisabled if the plugin + # was disabled. + msgs = [ + "Disabling plug-in 'django_coverage_plugin.DjangoTemplatePlugin' due to an exception:", + "DjangoTemplatePluginException: " + msg, + ] + with self.assert_coverage_warnings(*msgs): + with self.assertRaises(PluginDisabled): + yield + + @contextlib.contextmanager + def assert_no_data(self, min_cov=None): + """Assert that coverage warns no data was collected.""" + warn_msg = "No data was collected. (no-data-collected)" + with self.assert_coverage_warnings(warn_msg, min_cov=min_cov): + yield def squashed(s): @@ -293,9 +310,3 @@ class PluginDisabled(Exception): """Raised if we find that our plugin has been disabled.""" pass - - -@contextlib.contextmanager -def nullcontext(): - """For when we need a context manager to do nothing.""" - yield None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/tests/test_engines.py new/django_coverage_plugin-3.0.0/tests/test_engines.py --- old/django_coverage_plugin-2.0.3/tests/test_engines.py 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/tests/test_engines.py 2022-12-06 10:56:26.000000000 +0100 @@ -10,7 +10,7 @@ class MultipleEngineTests(DjangoPluginTestCase): def setUp(self): - super(MultipleEngineTests, self).setUp() + super().setUp() engine = { 'NAME': 'other', @@ -33,7 +33,8 @@ self.assert_analysis([1]) def test_string_template(self): - text = self.run_django_coverage(text='Hello', using='other') + with self.assert_no_data(): + text = self.run_django_coverage(text='Hello', using='other') self.assertEqual(text, 'Hello') def test_third_engine_not_debug(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/tests/test_extends.py new/django_coverage_plugin-3.0.0/tests/test_extends.py --- old/django_coverage_plugin-2.0.3/tests/test_extends.py 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/tests/test_extends.py 2022-12-06 10:56:26.000000000 +0100 @@ -3,7 +3,7 @@ """Tests of template inheritance for django_coverage_plugin.""" -from .plugin_test import DjangoPluginTestCase, django_stop_before +from .plugin_test import DjangoPluginTestCase class BlockTest(DjangoPluginTestCase): @@ -146,43 +146,3 @@ self.assertEqual(text, "First\nInside\nJob\n\nLast\n") self.assert_analysis([1, 2, 3], name="outer.html") self.assert_analysis([1, 2], name="nested.html") - - -# {% ssi %} is in earlier Djangos than 1.9, but doesn't trace properly. -@django_stop_before(1, 10) -class SsiTest(DjangoPluginTestCase): - """Test {% ssi %}, which does not trace the included file.""" - - def test_ssi_unparsed(self): - nested = self.make_template(name="nested.html", text="""\ - Inside {{ a }} - Job - """) - - self.make_template(name="outer.html", text="""\ - First - {% ssi "NESTED" %} - Last - """.replace("NESTED", nested)) - - text = self.run_django_coverage(name="outer.html", context={'a': 17}) - self.assertEqual(text, "First\nInside {{ a }}\nJob\n\nLast\n") - self.assert_analysis([1, 2, 3], name="outer.html") - self.assert_measured_files("outer.html", "nested.html") - - def test_ssi_parsed(self): - nested = self.make_template(name="nested.html", text="""\ - Inside {{ a }} - Job - """) - - self.make_template(name="outer.html", text="""\ - First - {% ssi "NESTED" parsed %} - Last - """.replace("NESTED", nested)) - - text = self.run_django_coverage(name="outer.html", context={'a': 17}) - self.assertEqual(text, "First\nInside 17\nJob\n\nLast\n") - self.assert_analysis([1, 2, 3], name="outer.html") - self.assert_measured_files("outer.html", "nested.html") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/tests/test_html.py new/django_coverage_plugin-3.0.0/tests/test_html.py --- old/django_coverage_plugin-2.0.3/tests/test_html.py 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/tests/test_html.py 2022-12-06 10:56:26.000000000 +0100 @@ -1,4 +1,3 @@ -# coding: utf8 # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 # For details: https://github.com/nedbat/django_coverage_plugin/blob/master/NOTICE.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/tests/test_settings.py new/django_coverage_plugin-3.0.0/tests/test_settings.py --- old/django_coverage_plugin-2.0.3/tests/test_settings.py 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/tests/test_settings.py 2022-12-06 10:56:26.000000000 +0100 @@ -5,18 +5,18 @@ from django.test.utils import override_settings -from .plugin_test import DjangoPluginTestCase, test_settings +from .plugin_test import DjangoPluginTestCase, get_test_settings # Make settings overrides for tests below. NON_DJANGO_BACKEND = 'django.template.backends.dummy.TemplateStrings' -DEBUG_FALSE_OVERRIDES = test_settings() +DEBUG_FALSE_OVERRIDES = get_test_settings() DEBUG_FALSE_OVERRIDES['TEMPLATES'][0]['OPTIONS']['debug'] = False -NO_OPTIONS_OVERRIDES = test_settings() +NO_OPTIONS_OVERRIDES = get_test_settings() del NO_OPTIONS_OVERRIDES['TEMPLATES'][0]['OPTIONS'] -OTHER_ENGINE_OVERRIDES = test_settings() +OTHER_ENGINE_OVERRIDES = get_test_settings() OTHER_ENGINE_OVERRIDES['TEMPLATES'][0]['BACKEND'] = NON_DJANGO_BACKEND OTHER_ENGINE_OVERRIDES['TEMPLATES'][0]['OPTIONS'] = {} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/tests/test_simple.py new/django_coverage_plugin-3.0.0/tests/test_simple.py --- old/django_coverage_plugin-2.0.3/tests/test_simple.py 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/tests/test_simple.py 2022-12-06 10:56:26.000000000 +0100 @@ -1,4 +1,3 @@ -# coding: utf8 # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 # For details: https://github.com/nedbat/django_coverage_plugin/blob/master/NOTICE.txt @@ -7,7 +6,7 @@ from .plugin_test import DjangoPluginTestCase # 200 Unicode chars: snowman + poo. -UNIUNI = u"\u26C4\U0001F4A9"*100 +UNIUNI = "\u26C4\U0001F4A9"*100 if isinstance(UNIUNI, str): UNISTR = UNIUNI else: @@ -64,8 +63,8 @@ Ï Î·Î¹cÏÉÑ Î¹Ñ ÑÑιcÐºÑ {{more}}! """) - text = self.run_django_coverage(context={'more': u'ÉboÉinU'}) - self.assertEqual(text, u'Ï Î·Î¹cÏÉÑ Î¹Ñ ÑÑιcкÑ\nÉboÉinU!\n') + text = self.run_django_coverage(context={'more': 'ÉboÉinU'}) + self.assertEqual(text, 'Ï Î·Î¹cÏÉÑ Î¹Ñ ÑÑιcкÑ\nÉboÉinU!\n') self.assert_analysis([1, 2]) self.assertEqual(self.get_html_report(), 100) self.assertEqual(self.get_xml_report(), 100) @@ -215,8 +214,8 @@ text = self.run_django_coverage() self.assertEqual( text, - u"1\n\n{{if dying}}Alive.{{/if}}\nsecond.\n" - u"{%third%}.UNIUNI\n\n7\n".replace(u"UNIUNI", UNIUNI) + "1\n\n{{if dying}}Alive.{{/if}}\nsecond.\n" + "{%third%}.UNIUNI\n\n7\n".replace("UNIUNI", UNIUNI) ) self.assert_analysis([1, 2, 3, 4, 5, 7]) @@ -245,11 +244,14 @@ run_in_temp_dir = False def test_string_template(self): - text = self.run_django_coverage( - text="Hello, {{name}}!", - context={'name': 'World'}, - options={}, - ) + # I don't understand why coverage 6 warns about no data, + # but coverage 5 does not. + with self.assert_no_data(min_cov=(6, 0)): + text = self.run_django_coverage( + text="Hello, {{name}}!", + context={'name': 'World'}, + options={}, + ) self.assertEqual(text, "Hello, World!") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/tests/test_source.py new/django_coverage_plugin-3.0.0/tests/test_source.py --- old/django_coverage_plugin-2.0.3/tests/test_source.py 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/tests/test_source.py 2022-12-06 10:56:26.000000000 +0100 @@ -88,9 +88,9 @@ text = self.run_django_coverage(name="main.html") self.assertEqual(text, "Hello") - self.assert_measured_files("main.html", "static{}changelog.txt".format(os.sep)) + self.assert_measured_files("main.html", f"static{os.sep}changelog.txt") self.assert_analysis([1], name="main.html") - with self.assertRaisesRegexp(NoSource, r"changelog.txt.*invalid start byte"): + with self.assertRaisesRegex(NoSource, r"changelog.txt.*invalid start byte"): self.cov.html_report() def test_non_utf8_omitted(self): @@ -110,7 +110,7 @@ text = self.run_django_coverage(name="main.html") self.assertEqual(text, "Hello") - self.assert_measured_files("main.html", "static{}changelog.txt".format(os.sep)) + self.assert_measured_files("main.html", f"static{os.sep}changelog.txt") self.assert_analysis([1], name="main.html") self.cov.html_report() @@ -131,9 +131,14 @@ text = self.run_django_coverage(name="main.html") self.assertEqual(text, "Hello") - self.assert_measured_files("main.html", "static{}changelog.txt".format(os.sep)) + self.assert_measured_files("main.html", f"static{os.sep}changelog.txt") self.assert_analysis([1], name="main.html") - self.cov.html_report() + warn_msg = ( + "'utf-8' codec can't decode byte 0xf6 in position 2: " + + "invalid start byte (couldnt-parse)" + ) + with self.assert_coverage_warnings(warn_msg, min_cov=(6, 0)): + self.cov.html_report() def test_htmlcov_isnt_measured(self): # We used to find the HTML report and think it was template files. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/django_coverage_plugin-2.0.3/tox.ini new/django_coverage_plugin-3.0.0/tox.ini --- old/django_coverage_plugin-2.0.3/tox.ini 2022-05-04 12:35:32.000000000 +0200 +++ new/django_coverage_plugin-3.0.0/tox.ini 2022-12-06 10:56:26.000000000 +0100 @@ -14,24 +14,26 @@ [tox] envlist = - py27-django{18,111}, - py36-django{18,111,22,32}, - py37-django{22,32}, - py38-django{22,32,40,tip}, - py39-django{22,32,40,tip}, - py310-django{32,40,tip}, + py37-django{111,22,32}-cov{5,6,tip}, + py38-django{22,32,40,41,tip}-cov{5,6,tip}, + py39-django{22,32,40,41,tip}-cov{5,6,tip}, + py310-django{32,40,41,tip}-cov{5,6,tip}, + py311-django{41,tip}-cov{6,tip}, check,pkgcheck,doc [testenv] deps = - pytest - unittest-mixins==1.6 - django18: Django>=1.8,<1.9 + cov5: coverage>=5.0,<6.0 + cov6: coverage>=6.0,<7.0 + covtip: git+https://github.com/nedbat/coveragepy.git django111: Django>=1.11,<2.0 django22: Django>=2.2,<3.0 django32: Django>=3.2,<4.0 django40: Django>=4.0,<4.1 - djangotip: https://github.com/django/django/archive/main.tar.gz + django41: Django>=4.1,<4.2 + djangotip: git+https://github.com/django/django.git + pytest + unittest-mixins==1.6 commands = python -c "import tests.banner" @@ -73,9 +75,8 @@ [gh-actions] python = - 2.7: py27 - 3.6: py36 3.7: py37 3.8: py38 3.9: py39 3.10: py310 + 3.11: py311