diff options
Diffstat (limited to 'parts/django/tests/regressiontests/makemessages')
8 files changed, 159 insertions, 0 deletions
diff --git a/parts/django/tests/regressiontests/makemessages/__init__.py b/parts/django/tests/regressiontests/makemessages/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/parts/django/tests/regressiontests/makemessages/__init__.py diff --git a/parts/django/tests/regressiontests/makemessages/extraction.py b/parts/django/tests/regressiontests/makemessages/extraction.py new file mode 100644 index 0000000..6df6e90 --- /dev/null +++ b/parts/django/tests/regressiontests/makemessages/extraction.py @@ -0,0 +1,109 @@ +import os +import re +import shutil +from django.test import TestCase +from django.core import management + +LOCALE='de' + +class ExtractorTests(TestCase): + + PO_FILE='locale/%s/LC_MESSAGES/django.po' % LOCALE + + def setUp(self): + self._cwd = os.getcwd() + self.test_dir = os.path.abspath(os.path.dirname(__file__)) + + def _rmrf(self, dname): + if os.path.commonprefix([self.test_dir, os.path.abspath(dname)]) != self.test_dir: + return + shutil.rmtree(dname) + + def tearDown(self): + os.chdir(self.test_dir) + try: + self._rmrf('locale/%s' % LOCALE) + except OSError: + pass + os.chdir(self._cwd) + + def assertMsgId(self, msgid, s): + return self.assert_(re.search('^msgid "%s"' % msgid, s, re.MULTILINE)) + + def assertNotMsgId(self, msgid, s): + return self.assert_(not re.search('^msgid "%s"' % msgid, s, re.MULTILINE)) + + +class TemplateExtractorTests(ExtractorTests): + + def test_templatize(self): + os.chdir(self.test_dir) + management.call_command('makemessages', locale=LOCALE, verbosity=0) + self.assert_(os.path.exists(self.PO_FILE)) + po_contents = open(self.PO_FILE, 'r').read() + self.assertMsgId('I think that 100%% is more that 50%% of anything.', po_contents) + self.assertMsgId('I think that 100%% is more that 50%% of %\(obj\)s.', po_contents) + + +class JavascriptExtractorTests(ExtractorTests): + + PO_FILE='locale/%s/LC_MESSAGES/djangojs.po' % LOCALE + + def test_javascript_literals(self): + os.chdir(self.test_dir) + management.call_command('makemessages', domain='djangojs', locale=LOCALE, verbosity=0) + self.assert_(os.path.exists(self.PO_FILE)) + po_contents = open(self.PO_FILE, 'r').read() + self.assertMsgId('This literal should be included.', po_contents) + self.assertMsgId('This one as well.', po_contents) + + +class IgnoredExtractorTests(ExtractorTests): + + def test_ignore_option(self): + os.chdir(self.test_dir) + management.call_command('makemessages', locale=LOCALE, verbosity=0, ignore_patterns=['ignore_dir/*']) + self.assert_(os.path.exists(self.PO_FILE)) + po_contents = open(self.PO_FILE, 'r').read() + self.assertMsgId('This literal should be included.', po_contents) + self.assertNotMsgId('This should be ignored.', po_contents) + + +class SymlinkExtractorTests(ExtractorTests): + + def setUp(self): + self._cwd = os.getcwd() + self.test_dir = os.path.abspath(os.path.dirname(__file__)) + self.symlinked_dir = os.path.join(self.test_dir, 'templates_symlinked') + + def tearDown(self): + super(SymlinkExtractorTests, self).tearDown() + os.chdir(self.test_dir) + try: + os.remove(self.symlinked_dir) + except OSError: + pass + os.chdir(self._cwd) + + def test_symlink(self): + if hasattr(os, 'symlink'): + if os.path.exists(self.symlinked_dir): + self.assert_(os.path.islink(self.symlinked_dir)) + else: + os.symlink(os.path.join(self.test_dir, 'templates'), self.symlinked_dir) + os.chdir(self.test_dir) + management.call_command('makemessages', locale=LOCALE, verbosity=0, symlinks=True) + self.assert_(os.path.exists(self.PO_FILE)) + po_contents = open(self.PO_FILE, 'r').read() + self.assertMsgId('This literal should be included.', po_contents) + self.assert_('templates_symlinked/test.html' in po_contents) + + +class CopyPluralFormsExtractorTests(ExtractorTests): + + def test_copy_plural_forms(self): + os.chdir(self.test_dir) + management.call_command('makemessages', locale=LOCALE, verbosity=0) + self.assert_(os.path.exists(self.PO_FILE)) + po_contents = open(self.PO_FILE, 'r').read() + self.assert_('Plural-Forms: nplurals=2; plural=(n != 1)' in po_contents) diff --git a/parts/django/tests/regressiontests/makemessages/ignore_dir/ignored.html b/parts/django/tests/regressiontests/makemessages/ignore_dir/ignored.html new file mode 100644 index 0000000..6a29678 --- /dev/null +++ b/parts/django/tests/regressiontests/makemessages/ignore_dir/ignored.html @@ -0,0 +1,2 @@ +{% load i18n %} +{% trans "This should be ignored." %} diff --git a/parts/django/tests/regressiontests/makemessages/javascript.js b/parts/django/tests/regressiontests/makemessages/javascript.js new file mode 100644 index 0000000..bc5ec87 --- /dev/null +++ b/parts/django/tests/regressiontests/makemessages/javascript.js @@ -0,0 +1,4 @@ +// ' +gettext('This literal should be included.') +// ' +gettext('This one as well.') diff --git a/parts/django/tests/regressiontests/makemessages/locale/dummy b/parts/django/tests/regressiontests/makemessages/locale/dummy new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/parts/django/tests/regressiontests/makemessages/locale/dummy diff --git a/parts/django/tests/regressiontests/makemessages/models.py b/parts/django/tests/regressiontests/makemessages/models.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/parts/django/tests/regressiontests/makemessages/models.py diff --git a/parts/django/tests/regressiontests/makemessages/templates/test.html b/parts/django/tests/regressiontests/makemessages/templates/test.html new file mode 100644 index 0000000..96438e1 --- /dev/null +++ b/parts/django/tests/regressiontests/makemessages/templates/test.html @@ -0,0 +1,4 @@ +{% load i18n %} +{% trans "This literal should be included." %} +{% blocktrans %}I think that 100% is more that 50% of anything.{% endblocktrans %} +{% blocktrans with 'txt' as obj %}I think that 100% is more that 50% of {{ obj }}.{% endblocktrans %}
\ No newline at end of file diff --git a/parts/django/tests/regressiontests/makemessages/tests.py b/parts/django/tests/regressiontests/makemessages/tests.py new file mode 100644 index 0000000..5798e67 --- /dev/null +++ b/parts/django/tests/regressiontests/makemessages/tests.py @@ -0,0 +1,40 @@ +import os +import re +from subprocess import Popen, PIPE + +def find_command(cmd, path=None, pathext=None): + if path is None: + path = os.environ.get('PATH', []).split(os.pathsep) + if isinstance(path, basestring): + path = [path] + # check if there are funny path extensions for executables, e.g. Windows + if pathext is None: + pathext = os.environ.get('PATHEXT', '.COM;.EXE;.BAT;.CMD').split(os.pathsep) + # don't use extensions if the command ends with one of them + for ext in pathext: + if cmd.endswith(ext): + pathext = [''] + break + # check if we find the command on PATH + for p in path: + f = os.path.join(p, cmd) + if os.path.isfile(f): + return f + for ext in pathext: + fext = f + ext + if os.path.isfile(fext): + return fext + return None + +# checks if it can find xgettext on the PATH and +# imports the extraction tests if yes +xgettext_cmd = find_command('xgettext') +if xgettext_cmd: + p = Popen('%s --version' % xgettext_cmd, shell=True, stdout=PIPE, stderr=PIPE, close_fds=os.name != 'nt', universal_newlines=True) + output = p.communicate()[0] + match = re.search(r'(?P<major>\d+)\.(?P<minor>\d+)', output) + if match: + xversion = (int(match.group('major')), int(match.group('minor'))) + if xversion >= (0, 15): + from extraction import * + del p |