todo[bot]: ## (stephenfin): Raise an exception here in tox 4.0

https://github.com/tox-dev/tox/blob/407121bcdb96663154f9c439b62c50fc44a72b56/src/tox/config/__init__.py#L574-L579

---

###### This comment was generated by [todo](https://todo.jasonet.co) based on a `TODO` comment in 407121bcdb96663154f9c439b62c50fc44a72b56 in #1229. cc @gaborbernat.
diff --git a/docs/changelog/1227.bugfix.rst b/docs/changelog/1227.bugfix.rst
new file mode 100644
index 00000000..7d7a5009
--- /dev/null
+++ b/docs/changelog/1227.bugfix.rst
@@ -0,0 +1,1 @@
+don't crash when version information is not available for a proposed base python - by :user:`gaborbernat`
diff --git a/src/tox/config/__init__.py b/src/tox/config/__init__.py
index 5380814c..53e4003a 100644
--- a/src/tox/config/__init__.py
+++ b/src/tox/config/__init__.py
@@ -561,21 +561,23 @@ def tox_addoption(parser):
         proposed_python = (implied_python or sys.executable) if value is None else str(value)
         if implied_python is not None and implied_python != proposed_python:
             testenv_config.basepython = proposed_python
-            implied_version = tox.PYTHON.PY_FACTORS_RE.match(factor).group(2)
-            python_info_for_proposed = testenv_config.python_info
-            if not isinstance(python_info_for_proposed, NoInterpreterInfo):
-                proposed_version = "".join(
-                    str(i) for i in python_info_for_proposed.version_info[0:2]
-                )
-                # '27'.startswith('2') or '27'.startswith('27')
-                if not proposed_version.startswith(implied_version):
-                    # TODO(stephenfin): Raise an exception here in tox 4.0
-                    warnings.warn(
-                        "conflicting basepython version (set {}, should be {}) for env '{}';"
-                        "resolve conflict or set ignore_basepython_conflict".format(
-                            proposed_version, implied_version, testenv_config.envname
-                        )
+            match = tox.PYTHON.PY_FACTORS_RE.match(factor)
+            implied_version = match.group(2) if match else None
+            if implied_version is not None:
+                python_info_for_proposed = testenv_config.python_info
+                if not isinstance(python_info_for_proposed, NoInterpreterInfo):
+                    proposed_version = "".join(
+                        str(i) for i in python_info_for_proposed.version_info[0:2]
                     )
+                    # '27'.startswith('2') or '27'.startswith('27')
+                    if not proposed_version.startswith(implied_version):
+                        # TODO(stephenfin): Raise an exception here in tox 4.0
+                        warnings.warn(
+                            "conflicting basepython version (set {}, should be {}) for env '{}';"
+                            "resolve conflict or set ignore_basepython_conflict".format(
+                                proposed_version, implied_version, testenv_config.envname
+                            )
+                        )
         return proposed_python
 
     parser.add_testenv_attribute(

tox 3.8 crashes on Appveyor
In the h5py project, all the builds on Appveyor recently started failing. This seems to coincide with the release of tox 3.8.0, and it still occurs with 3.8.1. I'm still investigating this,  but here's the error we're getting:

```
ci\appveyor\build.cmd py -3.5 -m tox
Using default MSVC build environment
C:\Python35-x64\lib\site-packages\tox\config\__init__.py:576: UserWarning: conflicting basepython version (set 36, should be 27) for env 'py27-test-deps';resolve conflict or set ignore_basepython_conflict
  proposed_version, implied_version, testenv_config.envname
C:\Python35-x64\lib\site-packages\tox\config\__init__.py:576: UserWarning: conflicting basepython version (set 36, should be 27) for env 'py27-test-mindeps';resolve conflict or set ignore_basepython_conflict
  proposed_version, implied_version, testenv_config.envname
C:\Python35-x64\lib\site-packages\tox\config\__init__.py:576: UserWarning: conflicting basepython version (set 36, should be 34) for env 'py34-test-deps';resolve conflict or set ignore_basepython_conflict
  proposed_version, implied_version, testenv_config.envname
C:\Python35-x64\lib\site-packages\tox\config\__init__.py:576: UserWarning: conflicting basepython version (set 36, should be 34) for env 'py34-test-mindeps';resolve conflict or set ignore_basepython_conflict
  proposed_version, implied_version, testenv_config.envname
C:\Python35-x64\lib\site-packages\tox\config\__init__.py:576: UserWarning: conflicting basepython version (set 36, should be 35) for env 'py35-test-deps';resolve conflict or set ignore_basepython_conflict
  proposed_version, implied_version, testenv_config.envname
C:\Python35-x64\lib\site-packages\tox\config\__init__.py:576: UserWarning: conflicting basepython version (set 36, should be 35) for env 'py35-test-mindeps';resolve conflict or set ignore_basepython_conflict
  proposed_version, implied_version, testenv_config.envname
C:\Python35-x64\lib\site-packages\tox\config\__init__.py:576: UserWarning: conflicting basepython version (set 36, should be 37) for env 'py37-test-deps';resolve conflict or set ignore_basepython_conflict
  proposed_version, implied_version, testenv_config.envname
C:\Python35-x64\lib\site-packages\tox\config\__init__.py:576: UserWarning: conflicting basepython version (set 36, should be 37) for env 'py37-test-mindeps';resolve conflict or set ignore_basepython_conflict
  proposed_version, implied_version, testenv_config.envname
Traceback (most recent call last):
  File "C:\Python35-x64\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Python35-x64\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Python35-x64\lib\site-packages\tox\__main__.py", line 4, in <module>
    tox.cmdline()
  File "C:\Python35-x64\lib\site-packages\tox\session\__init__.py", line 42, in cmdline
    main(args)
  File "C:\Python35-x64\lib\site-packages\tox\session\__init__.py", line 58, in main
    config = load_config(args)
  File "C:\Python35-x64\lib\site-packages\tox\session\__init__.py", line 75, in load_config
    config = parseconfig(args)
  File "C:\Python35-x64\lib\site-packages\tox\config\__init__.py", line 249, in parseconfig
    ParseIni(config, config_file, content)
  File "C:\Python35-x64\lib\site-packages\tox\config\__init__.py", line 1077, in __init__
    config.envconfigs[name] = self.make_envconfig(name, section, reader._subs, config)
  File "C:\Python35-x64\lib\site-packages\tox\config\__init__.py", line 1181, in make_envconfig
    res = env_attr.postprocess(testenv_config=tc, value=res)
  File "C:\Python35-x64\lib\site-packages\tox\config\__init__.py", line 571, in basepython_default
    if not proposed_version.startswith(implied_version):
TypeError: startswith first arg must be str or a tuple of str, not NoneType
```

Example failure log: https://ci.appveyor.com/project/h5py/h5py/builds/23449770/job/itchqco453midako

I'll update this with anything I find.
diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py
index d717a7bb..55cbb547 100644
--- a/tests/unit/config/test_config.py
+++ b/tests/unit/config/test_config.py
@@ -3061,3 +3061,17 @@ def test_posargs_relative_changedir(newconfig, tmpdir):
             dir1.strpath,
             "dir3",
         ]
+
+
+def test_config_no_version_data_in__name(newconfig, capsys):
+    newconfig(
+        """
+        [tox]
+        envlist = py, pypy, jython
+        [testenv]
+        basepython = python
+        """
+    )
+    out, err = capsys.readouterr()
+    assert not out
+    assert not err

pip install -e .[dev]
parse_log_pytest
pytest
pytest
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///croot/attrs_1668696182826/work
certifi @ file:///croot/certifi_1671487769961/work/certifi
distlib==0.3.9
filelock==3.12.2
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
importlib-metadata==6.7.0
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
packaging @ file:///croot/packaging_1671697413597/work
platformdirs==4.0.0
pluggy==0.13.1
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pytest==7.1.2
six==1.17.0
toml==0.10.2
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
-e git+https://github.com/tox-dev/tox.git@14c0bee732621211611d082ac57cfafa721cbaf9#egg=tox
typing_extensions==4.7.1
virtualenv==20.26.6
zipp @ file:///croot/zipp_1672387121353/work

name: tox
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - distlib==0.3.9
      - filelock==3.12.2
      - importlib-metadata==6.7.0
      - platformdirs==4.0.0
      - pluggy==0.13.1
      - six==1.17.0
      - toml==0.10.2
      - tox==3.8.3.dev1+g14c0bee7
      - typing-extensions==4.7.1
      - virtualenv==20.26.6
prefix: /opt/conda/envs/tox

tests/unit/config/test_config.py::test_config_no_version_data_in__name
tests/unit/config/test_config.py::TestVenvConfig::test_force_dep_with_url tests/unit/config/test_config.py::TestConfigTestEnv::test_default_factors_conflict_lying_name tests/unit/config/test_config.py::TestConfigTestEnv::test_default_single_digit_factors tests/unit/config/test_config.py::TestConfigTestEnv::test_default_factors_conflict_ignore
tests/unit/config/test_config.py::TestVenvConfig::test_config_parsing_minimal tests/unit/config/test_config.py::TestVenvConfig::test_config_parsing_multienv tests/unit/config/test_config.py::TestVenvConfig::test_envdir_set_manually tests/unit/config/test_config.py::TestVenvConfig::test_envdir_set_manually_with_substitutions tests/unit/config/test_config.py::TestVenvConfig::test_force_dep_version tests/unit/config/test_config.py::TestVenvConfig::test_process_deps tests/unit/config/test_config.py::TestVenvConfig::test_is_same_dep tests/unit/config/test_config.py::TestConfigPlatform::test_config_parse_platform tests/unit/config/test_config.py::TestConfigPlatform::test_config_parse_platform_rex tests/unit/config/test_config.py::TestConfigPlatform::test_config_parse_platform_with_factors[win] tests/unit/config/test_config.py::TestConfigPlatform::test_config_parse_platform_with_factors[lin] tests/unit/config/test_config.py::TestConfigPlatform::test_config_parse_platform_with_factors[osx] tests/unit/config/test_config.py::TestConfigPackage::test_defaults tests/unit/config/test_config.py::TestConfigPackage::test_defaults_distshare tests/unit/config/test_config.py::TestConfigPackage::test_defaults_changed_dir tests/unit/config/test_config.py::TestConfigPackage::test_project_paths tests/unit/config/test_config.py::TestParseconfig::test_search_parents tests/unit/config/test_config.py::TestParseconfig::test_explicit_config_path tests/unit/config/test_config.py::TestParseconfig::test_workdir_gets_resolved tests/unit/config/test_config.py::test_get_homedir tests/unit/config/test_config.py::TestGetcontextname::test_blank tests/unit/config/test_config.py::TestGetcontextname::test_jenkins tests/unit/config/test_config.py::TestGetcontextname::test_hudson_legacy tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_substitution_from_other_section tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_substitution_from_other_section_multiline tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_substitution_from_other_section_posargs tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_section_and_posargs_substitution tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_env_substitution tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_env_substitution_global tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_regression_issue595 tests/unit/config/test_config.py::TestIniParser::test_getstring_single tests/unit/config/test_config.py::TestIniParser::test_missing_substitution tests/unit/config/test_config.py::TestIniParser::test_getstring_fallback_sections tests/unit/config/test_config.py::TestIniParser::test_getstring_substitution tests/unit/config/test_config.py::TestIniParser::test_getlist tests/unit/config/test_config.py::TestIniParser::test_getdict tests/unit/config/test_config.py::TestIniParser::test_normal_env_sub_works tests/unit/config/test_config.py::TestIniParser::test_missing_env_sub_raises_config_error_in_non_testenv tests/unit/config/test_config.py::TestIniParser::test_missing_env_sub_populates_missing_subs tests/unit/config/test_config.py::TestIniParser::test_getstring_environment_substitution_with_default tests/unit/config/test_config.py::TestIniParser::test_value_matches_section_substitution tests/unit/config/test_config.py::TestIniParser::test_value_doesn_match_section_substitution tests/unit/config/test_config.py::TestIniParser::test_getstring_other_section_substitution tests/unit/config/test_config.py::TestIniParser::test_argvlist tests/unit/config/test_config.py::TestIniParser::test_argvlist_windows_escaping tests/unit/config/test_config.py::TestIniParser::test_argvlist_multiline tests/unit/config/test_config.py::TestIniParser::test_argvlist_quoting_in_command tests/unit/config/test_config.py::TestIniParser::test_argvlist_comment_after_command tests/unit/config/test_config.py::TestIniParser::test_argvlist_command_contains_hash tests/unit/config/test_config.py::TestIniParser::test_argvlist_positional_substitution tests/unit/config/test_config.py::TestIniParser::test_argvlist_quoted_posargs tests/unit/config/test_config.py::TestIniParser::test_argvlist_posargs_with_quotes tests/unit/config/test_config.py::TestIniParser::test_positional_arguments_are_only_replaced_when_standing_alone tests/unit/config/test_config.py::TestIniParser::test_posargs_are_added_escaped_issue310 tests/unit/config/test_config.py::TestIniParser::test_substitution_with_multiple_words tests/unit/config/test_config.py::TestIniParser::test_getargv tests/unit/config/test_config.py::TestIniParser::test_getpath tests/unit/config/test_config.py::TestIniParser::test_getbool tests/unit/config/test_config.py::TestIniParserPrefix::test_basic_section_access tests/unit/config/test_config.py::TestIniParserPrefix::test_fallback_sections tests/unit/config/test_config.py::TestIniParserPrefix::test_value_matches_prefixed_section_substitution tests/unit/config/test_config.py::TestIniParserPrefix::test_value_doesn_match_prefixed_section_substitution tests/unit/config/test_config.py::TestIniParserPrefix::test_other_section_substitution tests/unit/config/test_config.py::TestConfigTestEnv::test_commentchars_issue33 tests/unit/config/test_config.py::TestConfigTestEnv::test_defaults tests/unit/config/test_config.py::TestConfigTestEnv::test_sitepackages_switch tests/unit/config/test_config.py::TestConfigTestEnv::test_installpkg_tops_develop tests/unit/config/test_config.py::TestConfigTestEnv::test_specific_command_overrides tests/unit/config/test_config.py::TestConfigTestEnv::test_whitelist_externals tests/unit/config/test_config.py::TestConfigTestEnv::test_changedir tests/unit/config/test_config.py::TestConfigTestEnv::test_ignore_errors tests/unit/config/test_config.py::TestConfigTestEnv::test_envbindir tests/unit/config/test_config.py::TestConfigTestEnv::test_envbindir_jython[jython] tests/unit/config/test_config.py::TestConfigTestEnv::test_envbindir_jython[pypy] tests/unit/config/test_config.py::TestConfigTestEnv::test_envbindir_jython[pypy3] tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_as_multiline_list[win32] tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_as_multiline_list[linux2] tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_as_space_separated_list[win32] tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_as_space_separated_list[linux2] tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_with_factor tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_from_global_env tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_glob_from_global_env tests/unit/config/test_config.py::TestConfigTestEnv::test_changedir_override tests/unit/config/test_config.py::TestConfigTestEnv::test_install_command_setting tests/unit/config/test_config.py::TestConfigTestEnv::test_install_command_must_contain_packages tests/unit/config/test_config.py::TestConfigTestEnv::test_install_command_substitutions tests/unit/config/test_config.py::TestConfigTestEnv::test_pip_pre tests/unit/config/test_config.py::TestConfigTestEnv::test_pip_pre_cmdline_override tests/unit/config/test_config.py::TestConfigTestEnv::test_simple tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_error tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_defaults tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_notfound_issue246 tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_notfound_issue515 tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_nested_env_defaults tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_positional tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_noargs_issue240 tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_double tests/unit/config/test_config.py::TestConfigTestEnv::test_posargs_backslashed_or_quoted tests/unit/config/test_config.py::TestConfigTestEnv::test_rewrite_posargs tests/unit/config/test_config.py::TestConfigTestEnv::test_rewrite_simple_posargs tests/unit/config/test_config.py::TestConfigTestEnv::test_take_dependencies_from_other_testenv[envlist0-deps0] tests/unit/config/test_config.py::TestConfigTestEnv::test_take_dependencies_from_other_testenv[envlist1-deps1] tests/unit/config/test_config.py::TestConfigTestEnv::test_regression_test_issue_706[envlist0] tests/unit/config/test_config.py::TestConfigTestEnv::test_factor_expansion tests/unit/config/test_config.py::TestConfigTestEnv::test_factors_support_curly_braces tests/unit/config/test_config.py::TestConfigTestEnv::test_do_not_substitute_more_than_needed tests/unit/config/test_config.py::TestConfigTestEnv::test_take_dependencies_from_other_section tests/unit/config/test_config.py::TestConfigTestEnv::test_multilevel_substitution tests/unit/config/test_config.py::TestConfigTestEnv::test_recursive_substitution_cycle_fails tests/unit/config/test_config.py::TestConfigTestEnv::test_single_value_from_other_secton tests/unit/config/test_config.py::TestConfigTestEnv::test_factors tests/unit/config/test_config.py::TestConfigTestEnv::test_factor_ops tests/unit/config/test_config.py::TestConfigTestEnv::test_envconfigs_based_on_factors tests/unit/config/test_config.py::TestConfigTestEnv::test_default_factors tests/unit/config/test_config.py::TestConfigTestEnv::test_default_factors_conflict tests/unit/config/test_config.py::TestConfigTestEnv::test_factors_in_boolean tests/unit/config/test_config.py::TestConfigTestEnv::test_factors_in_setenv tests/unit/config/test_config.py::TestConfigTestEnv::test_factor_use_not_checked tests/unit/config/test_config.py::TestConfigTestEnv::test_factors_groups_touch tests/unit/config/test_config.py::TestConfigTestEnv::test_period_in_factor tests/unit/config/test_config.py::TestConfigTestEnv::test_ignore_outcome tests/unit/config/test_config.py::TestGlobalOptions::test_notest tests/unit/config/test_config.py::TestGlobalOptions::test_verbosity tests/unit/config/test_config.py::TestGlobalOptions::test_quiet[args0-0] tests/unit/config/test_config.py::TestGlobalOptions::test_quiet[args1-1] tests/unit/config/test_config.py::TestGlobalOptions::test_quiet[args2-2] tests/unit/config/test_config.py::TestGlobalOptions::test_quiet[args3-3] tests/unit/config/test_config.py::TestGlobalOptions::test_substitution_jenkins_default tests/unit/config/test_config.py::TestGlobalOptions::test_substitution_jenkins_context tests/unit/config/test_config.py::TestGlobalOptions::test_sdist_specification tests/unit/config/test_config.py::TestGlobalOptions::test_env_selection_with_section_name tests/unit/config/test_config.py::TestGlobalOptions::test_env_selection_expanded_envlist tests/unit/config/test_config.py::TestGlobalOptions::test_py_venv tests/unit/config/test_config.py::TestGlobalOptions::test_no_implicit_venv_from_cli_with_envlist tests/unit/config/test_config.py::TestGlobalOptions::test_correct_basepython_chosen_from_default_factors tests/unit/config/test_config.py::TestGlobalOptions::test_envlist_expansion tests/unit/config/test_config.py::TestGlobalOptions::test_envlist_cross_product tests/unit/config/test_config.py::TestGlobalOptions::test_envlist_multiline tests/unit/config/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_true tests/unit/config/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_false tests/unit/config/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_cli_no_arg tests/unit/config/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_cli_not_specified tests/unit/config/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_cli_overrides_true tests/unit/config/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_cli_overrides_false tests/unit/config/test_config.py::TestGlobalOptions::test_defaultenv_commandline tests/unit/config/test_config.py::TestGlobalOptions::test_defaultenv_partial_override tests/unit/config/test_config.py::TestHashseedOption::test_default tests/unit/config/test_config.py::TestHashseedOption::test_passing_integer tests/unit/config/test_config.py::TestHashseedOption::test_passing_string tests/unit/config/test_config.py::TestHashseedOption::test_passing_empty_string tests/unit/config/test_config.py::TestHashseedOption::test_passing_no_argument tests/unit/config/test_config.py::TestHashseedOption::test_setenv tests/unit/config/test_config.py::TestHashseedOption::test_noset tests/unit/config/test_config.py::TestHashseedOption::test_noset_with_setenv tests/unit/config/test_config.py::TestHashseedOption::test_one_random_hashseed tests/unit/config/test_config.py::TestHashseedOption::test_setenv_in_one_testenv tests/unit/config/test_config.py::TestSetenv::test_getdict_lazy tests/unit/config/test_config.py::TestSetenv::test_getdict_lazy_update tests/unit/config/test_config.py::TestSetenv::test_setenv_uses_os_environ tests/unit/config/test_config.py::TestSetenv::test_setenv_default_os_environ tests/unit/config/test_config.py::TestSetenv::test_setenv_uses_other_setenv tests/unit/config/test_config.py::TestSetenv::test_setenv_recursive_direct tests/unit/config/test_config.py::TestSetenv::test_setenv_overrides tests/unit/config/test_config.py::TestSetenv::test_setenv_with_envdir_and_basepython tests/unit/config/test_config.py::TestSetenv::test_setenv_ordering_1 tests/unit/config/test_config.py::TestSetenv::test_setenv_cross_section_subst_issue294 tests/unit/config/test_config.py::TestSetenv::test_setenv_cross_section_subst_twice tests/unit/config/test_config.py::TestSetenv::test_setenv_cross_section_mixed tests/unit/config/test_config.py::TestIndexServer::test_indexserver tests/unit/config/test_config.py::TestIndexServer::test_parse_indexserver tests/unit/config/test_config.py::TestIndexServer::test_multiple_homedir_relative_local_indexservers tests/unit/config/test_config.py::TestConfigConstSubstitutions::test_replace_pathsep_unix[:] tests/unit/config/test_config.py::TestConfigConstSubstitutions::test_replace_pathsep_unix[;] tests/unit/config/test_config.py::TestConfigConstSubstitutions::test_pathsep_regex tests/unit/config/test_config.py::TestParseEnv::test_parse_recreate tests/unit/config/test_config.py::TestCmdInvocation::test_help tests/unit/config/test_config.py::TestCmdInvocation::test_version_simple tests/unit/config/test_config.py::TestCmdInvocation::test_version_no_plugins tests/unit/config/test_config.py::TestCmdInvocation::test_version_with_normal_plugin tests/unit/config/test_config.py::TestCmdInvocation::test_version_with_fileless_module tests/unit/config/test_config.py::TestCmdInvocation::test_config_specific_ini tests/unit/config/test_config.py::TestCmdInvocation::test_no_tox_ini tests/unit/config/test_config.py::TestCmdInvocation::test_override_workdir tests/unit/config/test_config.py::TestCmdInvocation::test_showconfig_with_force_dep_version tests/unit/config/test_config.py::test_env_spec[-e tests/unit/config/test_config.py::TestCommandParser::test_command_parser_for_word tests/unit/config/test_config.py::TestCommandParser::test_command_parser_for_posargs tests/unit/config/test_config.py::TestCommandParser::test_command_parser_for_multiple_words tests/unit/config/test_config.py::TestCommandParser::test_command_parser_for_substitution_with_spaces tests/unit/config/test_config.py::TestCommandParser::test_command_parser_with_complex_word_set tests/unit/config/test_config.py::TestCommandParser::test_command_with_runs_of_whitespace tests/unit/config/test_config.py::TestCommandParser::test_command_with_split_line_in_subst_arguments tests/unit/config/test_config.py::TestCommandParser::test_command_parsing_for_issue_10 tests/unit/config/test_config.py::TestCommandParser::test_commands_with_backslash tests/unit/config/test_config.py::test_isolated_build_env_cannot_be_in_envlist tests/unit/config/test_config.py::test_isolated_build_overrides tests/unit/config/test_config.py::test_config_via_pyproject_legacy tests/unit/config/test_config.py::test_config_bad_pyproject_specified tests/unit/config/test_config.py::test_config_bad_config_type_specified tests/unit/config/test_config.py::test_interactive_na tests/unit/config/test_config.py::test_interactive_available tests/unit/config/test_config.py::test_interactive tests/unit/config/test_config.py::test_config_current_py tests/unit/config/test_config.py::test_posargs_relative_changedir
docs/changelog/1227.bugfix.rst src/tox/config/__init__.py
docs/changelog/1227.bugfix.rst src/tox/config/__init__.py