| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- """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.
- """
- from __future__ import annotations
- import argparse
- import sys
- from mypy.main import infer_python_executable, process_options
- from mypy.options import Options
- from mypy.test.helpers import Suite, assert_equal
- 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
|