aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/tests/test_easy_install.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2015-01-03 02:16:32 -0500
committerJason R. Coombs <jaraco@jaraco.com>2015-01-03 02:16:32 -0500
commitba8336727d818011c3bdd19c02f0ad92f59a5c7a (patch)
tree56e07c15184cf6bfac9c84d0af2b57df7a7bd288 /setuptools/tests/test_easy_install.py
parentcf269fdecffcf8dc2f07fa1f3da383be6a336587 (diff)
downloadexternal_python_setuptools-ba8336727d818011c3bdd19c02f0ad92f59a5c7a.tar.gz
external_python_setuptools-ba8336727d818011c3bdd19c02f0ad92f59a5c7a.tar.bz2
external_python_setuptools-ba8336727d818011c3bdd19c02f0ad92f59a5c7a.zip
Moved TestScriptHeader tests to more appropriate module.
Diffstat (limited to 'setuptools/tests/test_easy_install.py')
-rw-r--r--setuptools/tests/test_easy_install.py70
1 files changed, 69 insertions, 1 deletions
diff --git a/setuptools/tests/test_easy_install.py b/setuptools/tests/test_easy_install.py
index 30789e83..b8918b17 100644
--- a/setuptools/tests/test_easy_install.py
+++ b/setuptools/tests/test_easy_install.py
@@ -1,3 +1,7 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# NOTE: the shebang and encoding lines are for TestScriptHeader do not remove
+
"""Easy install Tests
"""
from __future__ import absolute_import
@@ -16,10 +20,13 @@ import pytest
import mock
from setuptools import sandbox
+from setuptools import compat
from setuptools.compat import StringIO, BytesIO, urlparse
from setuptools.sandbox import run_setup, SandboxViolation
from setuptools.command.easy_install import (
- easy_install, fix_jython_executable, get_script_args, nt_quote_arg)
+ easy_install, fix_jython_executable, get_script_args, nt_quote_arg,
+ get_script_header,
+)
from setuptools.command.easy_install import PthDistributions
from setuptools.command import easy_install as easy_install_pkg
from setuptools.dist import Distribution
@@ -414,3 +421,64 @@ def make_trivial_sdist(dist_path, setup_py):
setup_py_file.size = len(setup_py_bytes.getvalue())
with tarfile_open(dist_path, 'w:gz') as dist:
dist.addfile(setup_py_file, fileobj=setup_py_bytes)
+
+
+class TestScriptHeader:
+ non_ascii_exe = '/Users/José/bin/python'
+ exe_with_spaces = r'C:\Program Files\Python33\python.exe'
+
+ def test_get_script_header(self):
+ if not sys.platform.startswith('java') or not is_sh(sys.executable):
+ # This test is for non-Jython platforms
+ expected = '#!%s\n' % nt_quote_arg(os.path.normpath(sys.executable))
+ assert get_script_header('#!/usr/local/bin/python') == expected
+ expected = '#!%s -x\n' % nt_quote_arg(os.path.normpath(sys.executable))
+ assert get_script_header('#!/usr/bin/python -x') == expected
+ candidate = get_script_header('#!/usr/bin/python',
+ executable=self.non_ascii_exe)
+ assert candidate == '#!%s -x\n' % self.non_ascii_exe
+ candidate = get_script_header('#!/usr/bin/python',
+ executable=self.exe_with_spaces)
+ assert candidate == '#!"%s"\n' % self.exe_with_spaces
+
+ def test_get_script_header_jython_workaround(self):
+ # This test doesn't work with Python 3 in some locales
+ if compat.PY3 and os.environ.get("LC_CTYPE") in (None, "C", "POSIX"):
+ return
+
+ class java:
+ class lang:
+ class System:
+ @staticmethod
+ def getProperty(property):
+ return ""
+ sys.modules["java"] = java
+
+ platform = sys.platform
+ sys.platform = 'java1.5.0_13'
+ stdout, stderr = sys.stdout, sys.stderr
+ try:
+ # A mock sys.executable that uses a shebang line (this file)
+ exe = os.path.normpath(os.path.splitext(__file__)[0] + '.py')
+ assert (
+ get_script_header('#!/usr/local/bin/python', executable=exe)
+ ==
+ '#!/usr/bin/env %s\n' % exe
+ )
+
+ # Ensure we generate what is basically a broken shebang line
+ # when there's options, with a warning emitted
+ sys.stdout = sys.stderr = StringIO()
+ candidate = get_script_header('#!/usr/bin/python -x',
+ executable=exe)
+ assert candidate == '#!%s -x\n' % exe
+ assert 'Unable to adapt shebang line' in sys.stdout.getvalue()
+ sys.stdout = sys.stderr = StringIO()
+ candidate = get_script_header('#!/usr/bin/python',
+ executable=self.non_ascii_exe)
+ assert candidate == '#!%s -x\n' % self.non_ascii_exe
+ assert 'Unable to adapt shebang line' in sys.stdout.getvalue()
+ finally:
+ del sys.modules["java"]
+ sys.platform = platform
+ sys.stdout, sys.stderr = stdout, stderr