Opened 9 years ago
Closed 9 years ago
#26232 closed Bug (fixed)
i18n unit test fails on xgettext in /usr/local/bin
Reported by: | Jeroen Pulles | Owned by: | nobody |
---|---|---|---|
Component: | Internationalization | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
The test_compilation unit test sets a very minimalist environment so that the unit test fails to find xgettext in /usr/local/bin (homebrew on mac, anyone?).
====================================================================== [51/291] ERROR: test_msgfmt_error_including_non_ascii (i18n.test_compilation.CompilationErrorHandling$ ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3. 5/unittest/case.py", line 58, in testPartExecutor yield File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3. 5/unittest/case.py", line 600, in run testMethod() File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3. 5/unittest/mock.py", line 1157, in patched return func(*args, **keywargs) File "/Users/jeroenp/projects/django/tests/i18n/test_compilation.py", line 184, in test_msg fmt_error_including_non_ascii if cmd.gettext_version < (0, 18, 3): ....[snip] File "/Users/jeroenp/projects/django/django/core/management/utils.py", line 21, in popen_wr apper p = Popen(args, shell=False, stdout=PIPE, stderr=PIPE, close_fds=os.name != 'nt') File "/Users/jeroenp/projects/django/tests/i18n/test_compilation.py", line 171, in <lambda> lambda *args, **kwargs: Popen(*args, env={'LANG': 'C'}, **kwargs)) File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3. 5/subprocess.py", line 950, in __init__ restore_signals, start_new_session) File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3. 5/subprocess.py", line 1544, in _execute_child raise child_exception_type(errno_num, err_msg) django.core.management.base.CommandError: Error executing xgettext: No such file or directory : 'xgettext' ---------------------------------------------------------------------- Ran 10518 tests in 97.610s
Verifying with a stripped environment in a shell:
(django-env-py3) tests$ env -i LANG=C xgettext env: xgettext: No such file or directory (django-env-py3) tests$ which xgettext /usr/local/bin/xgettext (django-env-py3) tests$ env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin xgettext xgettext: no input file given Try 'xgettext --help' for more information.
Adding a hardcoded PATH to the env argument to Popen in test_compilation.py fixes this, but I'm assuming that's not the way to go forward.
See #25925
Change History (8)
comment:1 by , 9 years ago
Component: | Testing framework → Internationalization |
---|---|
Triage Stage: | Unreviewed → Accepted |
comment:2 by , 9 years ago
The fix for #25925 was maybe not the best one. We may have copy os.environ
and only override the LANG
key.
comment:3 by , 9 years ago
I'm new to Django development, so I have no idea what the design ideas around its testing framework are. That said, I was wondering if it doesn't make more sense to set LC_ALL, LC_NUMERIC, LC_COLLATE, ..., for all unit tests; Might help with consistently testing things that are locale-dependent, such as string formatting and sorting.
comment:5 by , 9 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
Haven't tested myself, but the approach looks good.
comment:6 by , 9 years ago
Sure, works for me.
It might break the original #25925 since you're not un-setting any of the other LC environment variables.
comment:7 by , 9 years ago
Thanks for testing. I'm not sure it might break #25925, as what we are interested to change is the language of gettext messages and I'm pretty convinced that LANG
will do the job for that.
I guess something like 1d9fc5caa947ff4ee72180185e91a9a145171712 might work (with
PATH
instead ofPYTHONPATH
). Can you try to develop a patch that works for you?