74 lines
3.1 KiB
Python
74 lines
3.1 KiB
Python
"""Ensure the argparse parser and Options class are in sync.
|
|
|
|
In particular, verify that the argparse defaults are the same as the Options
|
|
defaults, and that argparse doesn't assign any new members to the Options
|
|
object it creates.
|
|
"""
|
|
import argparse
|
|
import sys
|
|
|
|
from mypy.test.helpers import Suite, assert_equal
|
|
from mypy.options import Options
|
|
from mypy.main import process_options, infer_python_executable
|
|
|
|
|
|
class ArgSuite(Suite):
|
|
def test_coherence(self) -> None:
|
|
options = Options()
|
|
_, parsed_options = process_options([], require_targets=False)
|
|
# FIX: test this too. Requires changing working dir to avoid finding 'setup.cfg'
|
|
options.config_file = parsed_options.config_file
|
|
assert_equal(options.snapshot(), parsed_options.snapshot())
|
|
|
|
def test_executable_inference(self) -> None:
|
|
"""Test the --python-executable flag with --python-version"""
|
|
sys_ver_str = '{ver.major}.{ver.minor}'.format(ver=sys.version_info)
|
|
|
|
base = ['file.py'] # dummy file
|
|
|
|
# test inference given one (infer the other)
|
|
matching_version = base + [f'--python-version={sys_ver_str}']
|
|
_, options = process_options(matching_version)
|
|
assert options.python_version == sys.version_info[:2]
|
|
assert options.python_executable == sys.executable
|
|
|
|
matching_version = base + [f'--python-executable={sys.executable}']
|
|
_, options = process_options(matching_version)
|
|
assert options.python_version == sys.version_info[:2]
|
|
assert options.python_executable == sys.executable
|
|
|
|
# test inference given both
|
|
matching_version = base + [f'--python-version={sys_ver_str}',
|
|
f'--python-executable={sys.executable}']
|
|
_, options = process_options(matching_version)
|
|
assert options.python_version == sys.version_info[:2]
|
|
assert options.python_executable == sys.executable
|
|
|
|
# test that --no-site-packages will disable executable inference
|
|
matching_version = base + [f'--python-version={sys_ver_str}',
|
|
'--no-site-packages']
|
|
_, options = process_options(matching_version)
|
|
assert options.python_version == sys.version_info[:2]
|
|
assert options.python_executable is None
|
|
|
|
# Test setting python_version/executable from config file
|
|
special_opts = argparse.Namespace()
|
|
special_opts.python_executable = None
|
|
special_opts.python_version = None
|
|
special_opts.no_executable = None
|
|
|
|
# first test inferring executable from version
|
|
options = Options()
|
|
options.python_executable = None
|
|
options.python_version = sys.version_info[:2]
|
|
infer_python_executable(options, special_opts)
|
|
assert options.python_version == sys.version_info[:2]
|
|
assert options.python_executable == sys.executable
|
|
|
|
# then test inferring version from executable
|
|
options = Options()
|
|
options.python_executable = sys.executable
|
|
infer_python_executable(options, special_opts)
|
|
assert options.python_version == sys.version_info[:2]
|
|
assert options.python_executable == sys.executable
|