File: test_extract.py

package info (click to toggle)
python-django-babel 0.4.0-1~bpo8%2B1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-backports
  • size: 180 kB
  • sloc: python: 434; makefile: 173
file content (118 lines) | stat: -rw-r--r-- 5,555 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#-*- coding: utf-8 -*-
import unittest

import pytest
from babel.messages import extract
from babel._compat import BytesIO

from django_babel.extract import extract_django


default_keys = extract.DEFAULT_KEYWORDS.keys()


class ExtractDjangoTestCase(unittest.TestCase):
    # TODO: translator comments are not yet supported!

    def test_extract_no_tags(self):
        buf = BytesIO(b'nothing')
        messages = list(extract_django(buf, default_keys, [], {}))
        self.assertEqual([], messages)

    def test_extract_simple_double_quotes(self):
        buf = BytesIO(b'{% trans "Bunny" %}')
        messages = list(extract_django(buf, default_keys, [], {}))
        self.assertEqual([(1, None, u'Bunny', [])], messages)

    def test_extract_simple_single_quotes(self):
        buf = BytesIO(b"{% trans 'Bunny' %}")
        messages = list(extract_django(buf, default_keys, [], {}))
        self.assertEqual([(1, None, u'Bunny', [])], messages)

    def test_extract_var(self):
        buf = BytesIO(b'{% blocktrans %}{{ anton }}{% endblocktrans %}')
        messages = list(extract_django(buf, default_keys, [], {}))
        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 %}')
        messages = list(extract_django(buf, default_keys, [], {}))
        self.assertEqual([(1, None, u'%(berta)s', [])], messages)

    def test_extract_with_interpolation(self):
        buf = BytesIO(b'{% blocktrans %}xxx{{ anton }}xxx{% endblocktrans %}')
        messages = list(extract_django(buf, default_keys, [], {}))
        self.assertEqual([(1, None, u'xxx%(anton)sxxx', [])], messages)

    def test_extract_unicode(self):
        buf = BytesIO(b'{% trans "@ſðæ314“ſſ¶ÐĐÞ→SÆ^ĸŁ" %}')
        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 %}')
        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" %}')
        messages = list(extract_django(buf, default_keys, [], {}))
        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" %}')
        messages = list(extract_django(buf, default_keys, [], {}))
        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 #}')
        messages = list(extract_django(buf, default_keys, [], {}))
        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 %}')
        messages = list(extract_django(buf, default_keys, [], {}))
        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)

    def test_extract_var(self):
        buf = BytesIO(b'{{ book }}')
        messages = list(extract_django(buf, default_keys, [], {}))
        self.assertEqual([], messages)

    def test_extract_filters_default_translatable(self):
        buf = BytesIO(b'{{ book.author|default:_("Unknown") }}')
        messages = list(extract_django(buf, default_keys, [], {}))
        self.assertEqual([(1, None, u'Unknown', [])], messages)

    def test_extract_filters_default_translatable_single_quotes(self):
        buf = BytesIO(b"{{ book.author|default:_('Unknown') }}")
        messages = list(extract_django(buf, default_keys, [], {}))
        self.assertEqual([(1, None, u'Unknown', [])], messages)

    def test_extract_constant_single_quotes(self):
        buf = BytesIO(b"{{ _('constant') }}")
        messages = list(extract_django(buf, default_keys, [], {}))
        self.assertEqual([(1, None, u"'constant'", [])], messages)

    def test_extract_constant_single_quotes(self):
        buf = BytesIO(b'{{ _("constant") }}')
        messages = list(extract_django(buf, default_keys, [], {}))
        self.assertEqual([(1, None, u'"constant"', [])], messages)

    def test_extract_constant_block(self):
        buf = BytesIO(b'{% _("constant") %}')
        messages = list(extract_django(buf, default_keys, [], {}))
        self.assertEqual([(1, None, u'"constant"', [])], messages)

    def test_extract_constant_in_block(self):
        buf = BytesIO(b'{% blocktrans foo=_("constant") %}{{ foo }}{% endblocktrans %}')
        messages = list(extract_django(buf, default_keys, [], {}))
        self.assertEqual(
            [(1, None, u'"constant"', []), (1, None, u'%(foo)s', [])],
            messages)