summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_launcher.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_launcher.py')
-rw-r--r--Lib/test/test_launcher.py57
1 files changed, 40 insertions, 17 deletions
diff --git a/Lib/test/test_launcher.py b/Lib/test/test_launcher.py
index 3991a8b..d7d51eb 100644
--- a/Lib/test/test_launcher.py
+++ b/Lib/test/test_launcher.py
@@ -68,12 +68,17 @@ TEST_PY_ENV = dict(
)
-TEST_PY_COMMANDS = "\n".join([
+TEST_PY_DEFAULTS = "\n".join([
"[defaults]",
- *[f"{k[3:].lower()}={v}" for k, v in TEST_PY_ENV.items()]
+ *[f"{k[3:].lower()}={v}" for k, v in TEST_PY_ENV.items()],
])
+TEST_PY_COMMANDS = "\n".join([
+ "[commands]",
+ "test-command=TEST_EXE.exe",
+])
+
def create_registry_data(root, data):
def _create_registry_data(root, key, value):
if isinstance(value, dict):
@@ -430,21 +435,21 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
self.assertTrue(data["env.tag"].startswith("2."), data["env.tag"])
def test_py_default(self):
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
data = self.run_py(["-arg"])
self.assertEqual("PythonTestSuite", data["SearchInfo.company"])
self.assertEqual("3.100", data["SearchInfo.tag"])
self.assertEqual("X.Y.exe -arg", data["stdout"].strip())
def test_py2_default(self):
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
data = self.run_py(["-2", "-arg"])
self.assertEqual("PythonTestSuite", data["SearchInfo.company"])
self.assertEqual("3.100-32", data["SearchInfo.tag"])
self.assertEqual("X.Y-32.exe -arg", data["stdout"].strip())
def test_py3_default(self):
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
data = self.run_py(["-3", "-arg"])
self.assertEqual("PythonTestSuite", data["SearchInfo.company"])
self.assertEqual("3.100-arm64", data["SearchInfo.tag"])
@@ -469,7 +474,7 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
self.assertEqual("X.Y-arm64.exe -X fake_arg_for_test -arg", data["stdout"].strip())
def test_py_default_short_argv0(self):
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
for argv0 in ['"py.exe"', 'py.exe', '"py"', 'py']:
with self.subTest(argv0):
data = self.run_py(["--version"], argv=f'{argv0} --version')
@@ -519,7 +524,7 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
self.assertNotEqual(data2["SearchInfo.lowPriorityTag"], "True")
def test_py_shebang(self):
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
with self.script("#! /usr/bin/python -prearg") as script:
data = self.run_py([script, "-postarg"])
self.assertEqual("PythonTestSuite", data["SearchInfo.company"])
@@ -527,7 +532,7 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
self.assertEqual(f"X.Y.exe -prearg {script} -postarg", data["stdout"].strip())
def test_python_shebang(self):
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
with self.script("#! python -prearg") as script:
data = self.run_py([script, "-postarg"])
self.assertEqual("PythonTestSuite", data["SearchInfo.company"])
@@ -535,7 +540,7 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
self.assertEqual(f"X.Y.exe -prearg {script} -postarg", data["stdout"].strip())
def test_py2_shebang(self):
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
with self.script("#! /usr/bin/python2 -prearg") as script:
data = self.run_py([script, "-postarg"])
self.assertEqual("PythonTestSuite", data["SearchInfo.company"])
@@ -543,7 +548,7 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
self.assertEqual(f"X.Y-32.exe -prearg {script} -postarg", data["stdout"].strip())
def test_py3_shebang(self):
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
with self.script("#! /usr/bin/python3 -prearg") as script:
data = self.run_py([script, "-postarg"])
self.assertEqual("PythonTestSuite", data["SearchInfo.company"])
@@ -551,7 +556,7 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
self.assertEqual(f"X.Y-arm64.exe -X fake_arg_for_test -prearg {script} -postarg", data["stdout"].strip())
def test_py_shebang_nl(self):
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
with self.script("#! /usr/bin/python -prearg\n") as script:
data = self.run_py([script, "-postarg"])
self.assertEqual("PythonTestSuite", data["SearchInfo.company"])
@@ -559,7 +564,7 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
self.assertEqual(f"X.Y.exe -prearg {script} -postarg", data["stdout"].strip())
def test_py2_shebang_nl(self):
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
with self.script("#! /usr/bin/python2 -prearg\n") as script:
data = self.run_py([script, "-postarg"])
self.assertEqual("PythonTestSuite", data["SearchInfo.company"])
@@ -567,7 +572,7 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
self.assertEqual(f"X.Y-32.exe -prearg {script} -postarg", data["stdout"].strip())
def test_py3_shebang_nl(self):
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
with self.script("#! /usr/bin/python3 -prearg\n") as script:
data = self.run_py([script, "-postarg"])
self.assertEqual("PythonTestSuite", data["SearchInfo.company"])
@@ -575,7 +580,7 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
self.assertEqual(f"X.Y-arm64.exe -X fake_arg_for_test -prearg {script} -postarg", data["stdout"].strip())
def test_py_shebang_short_argv0(self):
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
with self.script("#! /usr/bin/python -prearg") as script:
# Override argv to only pass "py.exe" as the command
data = self.run_py([script, "-postarg"], argv=f'"py.exe" "{script}" -postarg')
@@ -592,7 +597,7 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
def test_search_path(self):
stem = Path(sys.executable).stem
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
with self.script(f"#! /usr/bin/env {stem} -prearg") as script:
data = self.run_py(
[script, "-postarg"],
@@ -603,7 +608,7 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
def test_search_path_exe(self):
# Leave the .exe on the name to ensure we don't add it a second time
name = Path(sys.executable).name
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
with self.script(f"#! /usr/bin/env {name} -prearg") as script:
data = self.run_py(
[script, "-postarg"],
@@ -613,7 +618,7 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
def test_recursive_search_path(self):
stem = self.get_py_exe().stem
- with self.py_ini(TEST_PY_COMMANDS):
+ with self.py_ini(TEST_PY_DEFAULTS):
with self.script(f"#! /usr/bin/env {stem}") as script:
data = self.run_py(
[script],
@@ -674,3 +679,21 @@ class TestLauncher(unittest.TestCase, RunPyMixin):
f'"{script.parent}\\some\\ random app" -witharg {script}',
data["stdout"].strip(),
)
+
+ def test_literal_shebang_command(self):
+ with self.py_ini(TEST_PY_COMMANDS):
+ with self.script('#! test-command arg1') as script:
+ data = self.run_py([script])
+ self.assertEqual(
+ f"TEST_EXE.exe arg1 {script}",
+ data["stdout"].strip(),
+ )
+
+ def test_literal_shebang_invalid_template(self):
+ with self.script('#! /usr/bin/not-python arg1') as script:
+ data = self.run_py([script])
+ expect = script.parent / "/usr/bin/not-python"
+ self.assertEqual(
+ f"{expect} arg1 {script}",
+ data["stdout"].strip(),
+ )