12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import pytest
- import subprocess
- import json
- import sys
- from numpy.distutils import _shell_utils
- from numpy.testing import IS_WASM
- argv_cases = [
- [r'exe'],
- [r'path/exe'],
- [r'path\exe'],
- [r'\\server\path\exe'],
- [r'path to/exe'],
- [r'path to\exe'],
- [r'exe', '--flag'],
- [r'path/exe', '--flag'],
- [r'path\exe', '--flag'],
- [r'path to/exe', '--flag'],
- [r'path to\exe', '--flag'],
- # flags containing literal quotes in their name
- [r'path to/exe', '--flag-"quoted"'],
- [r'path to\exe', '--flag-"quoted"'],
- [r'path to/exe', '"--flag-quoted"'],
- [r'path to\exe', '"--flag-quoted"'],
- ]
- @pytest.fixture(params=[
- _shell_utils.WindowsParser,
- _shell_utils.PosixParser
- ])
- def Parser(request):
- return request.param
- @pytest.fixture
- def runner(Parser):
- if Parser != _shell_utils.NativeParser:
- pytest.skip('Unable to run with non-native parser')
- if Parser == _shell_utils.WindowsParser:
- return lambda cmd: subprocess.check_output(cmd)
- elif Parser == _shell_utils.PosixParser:
- # posix has no non-shell string parsing
- return lambda cmd: subprocess.check_output(cmd, shell=True)
- else:
- raise NotImplementedError
- @pytest.mark.skipif(IS_WASM, reason="Cannot start subprocess")
- @pytest.mark.parametrize('argv', argv_cases)
- def test_join_matches_subprocess(Parser, runner, argv):
- """
- Test that join produces strings understood by subprocess
- """
- # invoke python to return its arguments as json
- cmd = [
- sys.executable, '-c',
- 'import json, sys; print(json.dumps(sys.argv[1:]))'
- ]
- joined = Parser.join(cmd + argv)
- json_out = runner(joined).decode()
- assert json.loads(json_out) == argv
- @pytest.mark.skipif(IS_WASM, reason="Cannot start subprocess")
- @pytest.mark.parametrize('argv', argv_cases)
- def test_roundtrip(Parser, argv):
- """
- Test that split is the inverse operation of join
- """
- try:
- joined = Parser.join(argv)
- assert argv == Parser.split(joined)
- except NotImplementedError:
- pytest.skip("Not implemented")
|