diff options
| author | Ramiro Morales <cramm0@gmail.com> | 2010-10-10 22:19:01 +0000 |
|---|---|---|
| committer | Ramiro Morales <cramm0@gmail.com> | 2010-10-10 22:19:01 +0000 |
| commit | b79daef8676df78fabb70a686374aebeccdd6db0 (patch) | |
| tree | 6d7161344efed35dd1a69a048a516444657aeaa9 /tests/regressiontests/i18n/commands | |
| parent | 20fa9ddb7183707d707a8c703b6f28b02efc80db (diff) | |
Consolidated i18n commands test with the rest of the i18n tests.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@14133 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/i18n/commands')
9 files changed, 204 insertions, 0 deletions
diff --git a/tests/regressiontests/i18n/commands/__init__.py b/tests/regressiontests/i18n/commands/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/regressiontests/i18n/commands/__init__.py diff --git a/tests/regressiontests/i18n/commands/compilation.py b/tests/regressiontests/i18n/commands/compilation.py new file mode 100644 index 0000000000..3ca2d57138 --- /dev/null +++ b/tests/regressiontests/i18n/commands/compilation.py @@ -0,0 +1,35 @@ +import os +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO + +from django.core.management import CommandError +from django.core.management.commands.compilemessages import compile_messages +from django.test import TestCase + +LOCALE='es_AR' + + +class MessageCompilationTests(TestCase): + + MO_FILE='locale/%s/LC_MESSAGES/django.mo' % LOCALE + + def setUp(self): + self._cwd = os.getcwd() + self.test_dir = os.path.abspath(os.path.dirname(__file__)) + + def tearDown(self): + os.chdir(self._cwd) + + +class PoFileTests(MessageCompilationTests): + + def test_bom_rejection(self): + os.chdir(self.test_dir) + # We don't use the django.core.management intrastructure (call_command() + # et al) because CommandError's cause exit(1) there. We test the + # underlying compile_messages function instead + out = StringIO() + self.assertRaises(CommandError, compile_messages, out, locale=LOCALE) + self.failIf(os.path.exists(self.MO_FILE)) diff --git a/tests/regressiontests/i18n/commands/extraction.py b/tests/regressiontests/i18n/commands/extraction.py new file mode 100644 index 0000000000..4b4fa1b07e --- /dev/null +++ b/tests/regressiontests/i18n/commands/extraction.py @@ -0,0 +1,98 @@ +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 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/tests/regressiontests/i18n/commands/ignore_dir/ignored.html b/tests/regressiontests/i18n/commands/ignore_dir/ignored.html new file mode 100644 index 0000000000..6a296787ef --- /dev/null +++ b/tests/regressiontests/i18n/commands/ignore_dir/ignored.html @@ -0,0 +1,2 @@ +{% load i18n %} +{% trans "This should be ignored." %} diff --git a/tests/regressiontests/i18n/commands/javascript.js b/tests/regressiontests/i18n/commands/javascript.js new file mode 100644 index 0000000000..bc5ec87957 --- /dev/null +++ b/tests/regressiontests/i18n/commands/javascript.js @@ -0,0 +1,4 @@ +// ' +gettext('This literal should be included.') +// ' +gettext('This one as well.') diff --git a/tests/regressiontests/i18n/commands/locale/dummy b/tests/regressiontests/i18n/commands/locale/dummy new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/regressiontests/i18n/commands/locale/dummy diff --git a/tests/regressiontests/i18n/commands/locale/es_AR/LC_MESSAGES/django.po b/tests/regressiontests/i18n/commands/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 0000000000..7f74a4ef4a --- /dev/null +++ b/tests/regressiontests/i18n/commands/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,20 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-05 20:25-0300\n" +"PO-Revision-Date: 2010-02-22 00:14-0300\n" +"Last-Translator: Translator <translator@example.com>\n" +"Language-Team: Django-I18N <team@example.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: path/file.py:1 +msgid "This file has a UTF-8 BOM an should be rejected by the Django makemessages command." +msgstr "" diff --git a/tests/regressiontests/i18n/commands/templates/test.html b/tests/regressiontests/i18n/commands/templates/test.html new file mode 100644 index 0000000000..2c38b3e4e6 --- /dev/null +++ b/tests/regressiontests/i18n/commands/templates/test.html @@ -0,0 +1,2 @@ +{% load i18n %} +{% trans "This literal should be included." %}
\ No newline at end of file diff --git a/tests/regressiontests/i18n/commands/tests.py b/tests/regressiontests/i18n/commands/tests.py new file mode 100644 index 0000000000..c3be2178e4 --- /dev/null +++ b/tests/regressiontests/i18n/commands/tests.py @@ -0,0 +1,43 @@ +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 + +if find_command('msgfmt'): + from compilation import * |
