From b711400278ed6dadf27c193d7c5d5e435e3746d5 Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Thu, 25 Feb 2010 17:14:37 +0000 Subject: [PATCH] [1.1.X] Fixed #12910 - Only test extracting translation strings if xgettext can be found on PATH. Backport from r12475. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12589 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- .../makemessages/extraction.py | 42 ++++++++++++ tests/regressiontests/makemessages/tests.py | 66 ++++++++----------- 2 files changed, 69 insertions(+), 39 deletions(-) create mode 100644 tests/regressiontests/makemessages/extraction.py diff --git a/tests/regressiontests/makemessages/extraction.py b/tests/regressiontests/makemessages/extraction.py new file mode 100644 index 0000000000..954daf6a41 --- /dev/null +++ b/tests/regressiontests/makemessages/extraction.py @@ -0,0 +1,42 @@ +import os +import re +import shutil +from django.test import TestCase +from django.core import management + +LOCALE='de' + +class ExtractorTests(TestCase): + + 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)) + + +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) diff --git a/tests/regressiontests/makemessages/tests.py b/tests/regressiontests/makemessages/tests.py index 954daf6a41..e2b61223da 100644 --- a/tests/regressiontests/makemessages/tests.py +++ b/tests/regressiontests/makemessages/tests.py @@ -1,42 +1,30 @@ import os -import re -import shutil -from django.test import TestCase -from django.core import management -LOCALE='de' +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 -class ExtractorTests(TestCase): - - 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)) - - -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) +# checks if it can find xgettext on the PATH and +# imports the extraction tests if yes +if find_command('xgettext'): + from extraction import *