diff options
author | Eli Schwartz <eschwartz@archlinux.org> | 2023-01-15 20:15:03 -0500 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2023-01-30 15:13:06 +0200 |
commit | 118396f344a77291e41733194e9ee767a451911c (patch) | |
tree | 036bcef9e005f24ae0e8bf0710da27c4888464c9 /run_meson_command_tests.py | |
parent | 7b0a590c1bc1af2a70ca51d9e9865cae741f2cfa (diff) | |
download | meson-118396f344a77291e41733194e9ee767a451911c.zip meson-118396f344a77291e41733194e9ee767a451911c.tar.gz meson-118396f344a77291e41733194e9ee767a451911c.tar.bz2 |
runpython: make it work for -c as well
In commit 4e4f97edb3d475273108b203bc02b04bd6840b06 we added support for
runpython to accept `-c 'code to execute'` in addition to just script
files. However, doing so would mangle the sys.argv in the executed code
-- which assumes, as python itself does, that argv is the stuff after
the code to execute. We correctly handled this for script files, but the
original addition of -c support pushed this handling into a script-file
specific block.
Diffstat (limited to 'run_meson_command_tests.py')
-rwxr-xr-x | run_meson_command_tests.py | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/run_meson_command_tests.py b/run_meson_command_tests.py index e044af5..040105a 100755 --- a/run_meson_command_tests.py +++ b/run_meson_command_tests.py @@ -84,7 +84,7 @@ class CommandTests(unittest.TestCase): os.chdir(str(self.orig_dir)) super().tearDown() - def _run(self, command, workdir=None): + def _run(self, command, workdir=None, env=None): ''' Run a command while printing the stdout, and also return a copy of it ''' @@ -92,7 +92,7 @@ class CommandTests(unittest.TestCase): # between CI issue and test bug in that case. Set timeout and fail loud # instead. p = subprocess.run(command, stdout=subprocess.PIPE, - env=os.environ.copy(), text=True, + env=env, text=True, cwd=workdir, timeout=60 * 5) print(p.stdout) if p.returncode != 0: @@ -210,6 +210,21 @@ class CommandTests(unittest.TestCase): self._run([script.as_posix(), source, '--outfile', target, '--interpreter', python_command[0]]) self._run([target.as_posix(), '--help']) + def test_meson_runpython(self): + meson_command = str(self.src_root / 'meson.py') + script_file = str(self.src_root / 'foo.py') + test_command = 'import sys; print(sys.argv[1])' + env = os.environ.copy() + del env['MESON_COMMAND_TESTS'] + with open(script_file, 'w') as f: + f.write('#!/usr/bin/env python3\n\n') + f.write(f'{test_command}\n') + + for cmd in [['-c', test_command, 'fake argument'], [script_file, 'fake argument']]: + pyout = self._run(python_command + cmd) + mesonout = self._run(python_command + [meson_command, 'runpython'] + cmd, env=env) + self.assertEqual(pyout, mesonout) + if __name__ == '__main__': print('Meson build system', meson_version, 'Command Tests') |