add django 1.8 tests

This commit is contained in:
Thomas Grainger
2015-09-21 11:26:34 +01:00
parent d6114b676d
commit f0305d2b93
10 changed files with 126 additions and 213 deletions

View File

@@ -1,22 +1,29 @@
language: python
python:
- "2.6"
- "2.7"
- "3.3"
- "3.4"
- "pypy"
python: 3.4
env:
- DJANGO_VERSION=master
- DJANGO_VERSION=1.7.x
- DJANGO_VERSION=1.6.x
- DJANGO_VERSION=1.5.x
- TOX_ENV=py27-django15
- TOX_ENV=py27-django16
- TOX_ENV=py27-django17
- TOX_ENV=py27-django18
- TOX_ENV=py27-djangomaster
- TOX_ENV=py33-django15
- TOX_ENV=py33-django16
- TOX_ENV=py33-django17
- TOX_ENV=py33-django18
- TOX_ENV=py33-djangomaster
- TOX_ENV=py34-django15
- TOX_ENV=py34-django16
- TOX_ENV=py34-django17
- TOX_ENV=py34-django18
- TOX_ENV=py34-djangomaster
- TOX_ENV=py26-django15
- TOX_ENV=py26-django16
- TOX_ENV=lint
- TOX_ENV=docs
install:
- pip install tox
- pip install tox
script:
- tox -e "$TRAVIS_PYTHON_VERSION-$DJANGO_VERSION"
matrix:
exclude:
- python: "2.6"
env: DJANGO_VERSION=master
- python: "2.6"
env: DJANGO_VERSION=1.7.x
- tox -e $TOX_ENV
cache:
directories:
- $HOME/.cache/pip

View File

@@ -2,7 +2,7 @@
from django.template import Lexer, TOKEN_TEXT, TOKEN_VAR, TOKEN_BLOCK
from django.utils.translation.trans_real import (
inline_re, block_re, endblock_re, plural_re, constant_re)
from django.utils.encoding import smart_unicode
from django.utils.encoding import smart_text as smart_unicode
def extract_django(fileobj, keywords, comment_tags, options):

View File

@@ -1,4 +1,4 @@
#-*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
import os
from distutils.dist import Distribution
from optparse import make_option
@@ -14,16 +14,20 @@ class Command(LabelCommand):
option_list = LabelCommand.option_list + (
make_option(
'--locale', '-l',
default=None, dest='locale', action='append',
help='Creates or updates the message files for the given locale(s)'
' (e.g pt_BR). Can be used multiple times.'),
make_option('--domain', '-d',
default='django', dest='domain',
help='The domain of the message files (default: "django").'),
make_option('--mapping-file', '-F',
default=None, dest='mapping_file',
help='Mapping file')
'--locale', '-l', default=None, dest='locale', action='append',
help=(
'Creates or updates the message files for the given locale(s)'
' (e.g pt_BR). Can be used multiple times.'
),
),
make_option(
'--domain', '-d', default='django', dest='domain',
help='The domain of the message files (default: "django").',
),
make_option(
'--mapping-file', '-F', default=None, dest='mapping_file',
help='Mapping file',
)
)
def handle_label(self, command, **options):

View File

@@ -101,7 +101,7 @@ pygments_style = 'sphinx'
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'default'
html_theme = 'alabaster'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
@@ -130,7 +130,6 @@ html_theme = 'default'
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied

View File

@@ -1,18 +1,2 @@
[pytest]
addopts=-vs --pep8 --flakes
timeout=5
norecursedirs=.tox
pep8ignore =
*.py E128
docs/conf.py ALL
tests/*.py ALL
flakes-ignore =
docs/conf.py ALL
tests/*.py ALL
[flake8]
ignore = E128
exclude = .tox,.git,docs/conf.py,tests/*.py
[wheel]
universal = 1

View File

@@ -4,7 +4,6 @@ import os
import sys
import codecs
from setuptools import setup, find_packages
from setuptools.command.test import test as TestCommand
def read(*parts):
@@ -13,43 +12,12 @@ def read(*parts):
return fp.read()
test_requires = [
'coverage',
'pytest',
'pytest-cov>=1.4',
'pytest-flakes',
'pytest-pep8',
'python-coveralls',
]
install_requires = [
'Django>=1.4,<1.7',
'Django>=1.4,<1.9',
'Babel>=1.3',
]
dev_requires = [
'flake8>=2.0',
'invoke',
'twine'
]
class PyTest(TestCommand):
def finalize_options(self):
TestCommand.finalize_options(self)
self.test_args = []
self.test_suite = True
def run_tests(self):
# import here, cause outside the eggs aren't loaded
import pytest
errno = pytest.main(self.test_args)
sys.exit(errno)
setup(
name='django-babel',
description='Utilities for using Babel in Django',
@@ -58,17 +26,14 @@ setup(
license='BSD',
author='Christopher Grebs',
author_email='cg@webshox.org',
url='http://github.com/graingert/django-babel/',
maintainer='Thomas Grainger',
maintainer_email='django-babel@graingert.co.uk',
url='https://github.com/graingert/django-babel/',
packages=find_packages(exclude=('tests',)),
tests_require=test_requires,
install_requires=install_requires,
cmdclass={'test': PyTest},
extras_require={
'docs': ['sphinx'],
'tox': ['tox'],
'tests': test_requires,
'dev': dev_requires,
},
install_requires=[
'Django>=1.4,<1.8',
'Babel>=1.3',
],
classifiers=[
'Development Status :: 4 - Beta',
'Environment :: Web Environment',

View File

@@ -1,13 +0,0 @@
import invoke
@invoke.task
def release(version):
"""`version`` should be a string like '0.4' or '1.0'."""
invoke.run('git tag -s {0}'.format(version))
invoke.run('git push --tags')
invoke.run('python setup.py sdist')
invoke.run('python setup.py bdist_wheel')
invoke.run('twine upload -s dist/django*babel{0}* '.format(version))

View File

View File

@@ -1,7 +1,8 @@
#-*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
import unittest
import pytest
from babel.messages import extract
from babel._compat import BytesIO
@@ -35,7 +36,11 @@ class ExtractDjangoTestCase(unittest.TestCase):
self.assertEqual([(1, None, u'%(anton)s', [])], messages)
def test_extract_filter_with_filter(self):
buf = BytesIO(b'{% blocktrans with berta=anton|lower %}{{ berta }}{% endblocktrans %}')
test_tmpl = (
b'{% blocktrans with berta=anton|lower %}'
b'{{ berta }}{% endblocktrans %}'
)
buf = BytesIO(test_tmpl)
messages = list(extract_django(buf, default_keys, [], {}))
self.assertEqual([(1, None, u'%(berta)s', [])], messages)
@@ -45,42 +50,69 @@ class ExtractDjangoTestCase(unittest.TestCase):
self.assertEqual([(1, None, u'xxx%(anton)sxxx', [])], messages)
def test_extract_unicode(self):
buf = BytesIO(b'{% trans "@ſðæ314“ſſ¶ÐĐÞ→SÆ^ĸŁ" %}')
buf = BytesIO(u'{% trans "@ſðæ314“ſſ¶ÐĐÞ→SÆ^ĸŁ" %}'.encode('utf8'))
messages = list(extract_django(buf, default_keys, [], {}))
self.assertEqual([(1, None, u'@ſðæ314“ſſ¶ÐĐÞ→SÆ^ĸŁ', [])], messages)
def test_extract_unicode_blocktrans(self):
buf = BytesIO(b'{% blocktrans %}@ſðæ314“ſſ¶ÐĐÞ→SÆ^ĸŁ{% endblocktrans %}')
test_tmpl = u'{% blocktrans %}@ſðæ314“ſſ¶ÐĐÞ→SÆ^ĸŁ{% endblocktrans %}'
buf = BytesIO(test_tmpl.encode('utf8'))
messages = list(extract_django(buf, default_keys, [], {}))
self.assertEqual([(1, None, u'@ſðæ314“ſſ¶ÐĐÞ→SÆ^ĸŁ', [])], messages)
# TODO: Yet expected to not extract the comments.
def test_extract_ignored_comment(self):
buf = BytesIO(b'{# ignored comment #1 #}{% trans "Translatable literal #9a" %}')
buf = BytesIO(
b'{# ignored comment #1 #}{% trans "Translatable literal #9a" %}',
)
messages = list(extract_django(buf, default_keys, [], {}))
self.assertEqual([(1, None, u'Translatable literal #9a', [])], messages)
self.assertEqual(
[(1, None, u'Translatable literal #9a', [])], messages
)
def test_extract_ignored_comment2(self):
buf = BytesIO(b'{# Translators: ignored i18n comment #1 #}{% trans "Translatable literal #9a" %}')
test_tmpl = (
b'{# Translators: ignored i18n comment #1 #}'
b'{% trans "Translatable literal #9a" %}'
)
buf = BytesIO(test_tmpl)
messages = list(extract_django(buf, default_keys, [], {}))
self.assertEqual([(1, None, u'Translatable literal #9a', [])], messages)
self.assertEqual(
[(1, None, u'Translatable literal #9a', [])], messages
)
def test_extract_valid_comment(self):
buf = BytesIO(b'{# ignored comment #6 #}{% trans "Translatable literal #9h" %}{# Translators: valid i18n comment #7 #}')
test_tmpl = (
b'{# ignored comment #6 #}'
b'{% trans "Translatable literal #9h" %}'
b'{# Translators: valid i18n comment #7 #}'
)
buf = BytesIO(test_tmpl)
messages = list(extract_django(buf, default_keys, [], {}))
self.assertEqual([(1, None, u'Translatable literal #9h', [])], messages)
self.assertEqual(
[(1, None, u'Translatable literal #9h', [])], messages
)
def test_extract_singular_form(self):
buf = BytesIO(b'{% blocktrans count counter=number %}singular{% plural %}{{ counter }} plural{% endblocktrans %}')
test_tmpl = (
b'{% blocktrans count counter=number %}'
b'singular{% plural %}{{ counter }} plural'
b'{% endblocktrans %}'
)
buf = BytesIO(test_tmpl)
messages = list(extract_django(buf, default_keys, [], {}))
self.assertEqual([(1, 'ngettext', (u'singular', u'%(counter)s plural'), [])], messages)
self.assertEqual(
[(1, 'ngettext', (u'singular', u'%(counter)s plural'), [])],
messages
)
def test_trans_blocks_must_not_include_other_block_tags(self):
buf = BytesIO(b'{% blocktrans %}{% other_tag %}{% endblocktrans %}')
gen = extract_django(buf, default_keys, [], {})
pytest.raises(SyntaxError, gen.next)
with pytest.raises(SyntaxError):
next(gen)
def test_extract_var(self):
def test_extract_var_other(self):
buf = BytesIO(b'{{ book }}')
messages = list(extract_django(buf, default_keys, [], {}))
self.assertEqual([], messages)
@@ -100,7 +132,7 @@ class ExtractDjangoTestCase(unittest.TestCase):
messages = list(extract_django(buf, default_keys, [], {}))
self.assertEqual([(1, None, u"'constant'", [])], messages)
def test_extract_constant_single_quotes(self):
def test_extract_constant_double_quotes(self):
buf = BytesIO(b'{{ _("constant") }}')
messages = list(extract_django(buf, default_keys, [], {}))
self.assertEqual([(1, None, u'"constant"', [])], messages)
@@ -111,8 +143,12 @@ class ExtractDjangoTestCase(unittest.TestCase):
self.assertEqual([(1, None, u'"constant"', [])], messages)
def test_extract_constant_in_block(self):
buf = BytesIO(b'{% blocktrans foo=_("constant") %}{{ foo }}{% endblocktrans %}')
test_tmpl = (
b'{% blocktrans foo=_("constant") %}{{ foo }}{% endblocktrans %}'
)
buf = BytesIO(test_tmpl)
messages = list(extract_django(buf, default_keys, [], {}))
self.assertEqual(
[(1, None, u'"constant"', []), (1, None, u'%(foo)s', [])],
messages)
messages,
)

115
tox.ini
View File

@@ -1,95 +1,26 @@
[tox]
envlist = {py27,py33,py34}-django{15,16,17,18,master}, py26-django{15,16}, lint, docs
[testenv]
skipsdist = True
usedevelop = True
deps =
coverage
pytest
pytest-cov
python-coveralls
django15: Django>=1.5,<1.6
django16: Django>=1.6,<1.7
django17: Django>=1.7,<1.8
django18: Django>=1.8,<1.9
djangomaster: https://github.com/django/django/archive/master.tar.gz#egg=Django
commands = py.test {posargs}
[testenv:docs]
deps = sphinx
commands =
pip install -e {toxinidir}
pip install -e {toxinidir}[tests]
sphinx-build -W -b html -d {envtmpdir}/doctrees docs {envtmpdir}/_build/html
sphinx-build -W -b linkcheck docs {envtmpdir}/_build/html
deps15 =
https://github.com/django/django/archive/stable/1.5.x.zip#egg=django
deps16 =
https://github.com/django/django/archive/stable/1.6.x.zip#egg=django
deps17 =
https://github.com/django/django/archive/stable/1.7.x.zip#egg=django
master =
https://github.com/django/django/archive/stable/1.7.x.zip#egg=django
[testenv:2.6-1.5.x]
basepython = python2.6
deps = {[testenv]deps15}
[testenv:2.6-1.6.x]
basepython = python2.6
deps = {[testenv]deps16}
[testenv:2.7-1.5.x]
basepython = python2.7
deps = {[testenv]deps15}
[testenv:2.7-1.6.x]
basepython = python2.7
deps = {[testenv]deps16}
[testenv:2.7-1.7.x]
basepython = python2.7
deps = {[testenv]deps17}
[testenv:2.7-master]
basepython = python2.7
deps = {[testenv]master}
[testenv:3.3-1.5.x]
basepython = python3.3
deps = {[testenv]deps15}
[testenv:3.3-1.6.x]
basepython = python3.3
deps = {[testenv]deps16}
[testenv:3.3-1.7.x]
basepython = python3.3
deps = {[testenv]deps17}
[testenv:3.3-master]
basepython = python3.3
deps = {[testenv]master}
[testenv:3.4-1.5.x]
basepython = python3.4
deps = {[testenv]deps15}
[testenv:3.4-1.6.x]
basepython = python3.4
deps = {[testenv]deps16}
[testenv:3.4-1.7.x]
basepython = python3.4
deps = {[testenv]deps17}
[testenv:3.4-master]
basepython = python3.4
deps = {[testenv]master}
[testenv:pypy-1.5.x]
basepython = pypy
deps = {[testenv]deps17}
[testenv:pypy-1.6.x]
basepython = pypy
deps = {[testenv]deps17}
[testenv:pypy-1.7.x]
basepython = pypy
deps = {[testenv]deps17}
[testenv:pypy-master]
basepython = pypy
deps = {[testenv]master}
[docs]
commands =
pip install -e {toxinidir}
pip install -e {toxinidir}[docs]
sphinx-build -W -b html -d {envtmpdir}/doctrees docs docs/_build/html
sphinx-build -W -b doctest -d {envtmpdir}/doctrees docs docs/_build/html
sphinx-build -W -b linkcheck docs docs/_build/html
[testenv:lint]
deps =
flake8==2.4.1
commands=flake8 django_babel tests