diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 1e085ba7..55dd6d1b 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -4,6 +4,7 @@ Alexander Loechel
 Alexander Schepanovski
 Alexandre Conrad
 Allan Feldman
+Andrey Bienkowski
 Andrii Soldatenko
 Andrzej Klajnert
 Anthon van der Neuth
diff --git a/docs/changelog/1921.feature.rst b/docs/changelog/1921.feature.rst
new file mode 100644
index 00000000..64ea8c15
--- /dev/null
+++ b/docs/changelog/1921.feature.rst
@@ -0,0 +1,6 @@
+tox can now be invoked with a new ``--no-provision`` flag that prevents provision,
+if :conf:`requires` or :conf:`minversion` are not satisfied,
+tox will fail;
+if a path is specified as an argument to the flag
+(e.g. as ``tox --no-provision missing.json``) and provision is prevented,
+provision metadata are written as JSON to that path - by :user:`hroncok`
diff --git a/docs/config.rst b/docs/config.rst
index 01bc9b7d..31e96331 100644
--- a/docs/config.rst
+++ b/docs/config.rst
@@ -38,6 +38,11 @@ Global settings are defined under the ``tox`` section as:
    than this the tool will create an environment and provision it with a version of
    tox that satisfies this under :conf:`provision_tox_env`.
 
+   .. versionchanged:: 3.23.0
+
+   When tox is invoked with the ``--no-provision`` flag,
+   the provision won't be attempted, tox will fail instead.
+
 .. conf:: requires ^ LIST of PEP-508
 
     .. versionadded:: 3.2.0
@@ -54,6 +59,11 @@ Global settings are defined under the ``tox`` section as:
         requires = tox-pipenv
                    setuptools >= 30.0.0
 
+    .. versionchanged:: 3.23.0
+
+    When tox is invoked with the ``--no-provision`` flag,
+    the provision won't be attempted, tox will fail instead.
+
 .. conf:: provision_tox_env ^ string ^ .tox
 
     .. versionadded:: 3.8.0
@@ -61,6 +71,11 @@ Global settings are defined under the ``tox`` section as:
     Name of the virtual environment used to provision a tox having all dependencies specified
     inside :conf:`requires` and :conf:`minversion`.
 
+    .. versionchanged:: 3.23.0
+
+    When tox is invoked with the ``--no-provision`` flag,
+    the provision won't be attempted, tox will fail instead.
+
 .. conf:: toxworkdir ^ PATH ^ {toxinidir}/.tox
 
    Directory for tox to generate its environments into, will be created if it does not exist.
diff --git a/src/tox/config/__init__.py b/src/tox/config/__init__.py
index 10bc9bef..278d4b2b 100644
--- a/src/tox/config/__init__.py
+++ b/src/tox/config/__init__.py
@@ -1,7 +1,9 @@
 from __future__ import print_function
 
 import argparse
+import io
 import itertools
+import json
 import os
 import random
 import re
@@ -302,7 +304,7 @@ def parseconfig(args, plugins=()):
 
 
 def get_py_project_toml(path):
-    with open(str(path)) as file_handler:
+    with io.open(str(path), encoding="UTF-8") as file_handler:
         config_data = toml.load(file_handler)
         return config_data
 
@@ -572,6 +574,16 @@ def tox_addoption(parser):
         action="store_true",
         help="override alwayscopy setting to True in all envs",
     )
+    parser.add_argument(
+        "--no-provision",
+        action="store",
+        nargs="?",
+        default=False,
+        const=True,
+        metavar="REQUIRES_JSON",
+        help="do not perform provision, but fail and if a path was provided "
+        "write provision metadata as JSON to it",
+    )
 
     cli_skip_missing_interpreter(parser)
     parser.add_argument("--workdir", metavar="PATH", help="tox working directory")
@@ -1318,8 +1330,8 @@ class ParseIni(object):
         # raise on unknown args
         self.config._parser.parse_cli(args=self.config.args, strict=True)
 
-    @staticmethod
-    def ensure_requires_satisfied(config, requires, min_version):
+    @classmethod
+    def ensure_requires_satisfied(cls, config, requires, min_version):
         missing_requirements = []
         failed_to_parse = False
         deps = []
@@ -1346,12 +1358,33 @@ class ParseIni(object):
                 missing_requirements.append(str(requirements.Requirement(require)))
         if failed_to_parse:
             raise tox.exception.BadRequirement()
+        if config.option.no_provision and missing_requirements:
+            msg = "provisioning explicitly disabled within {}, but missing {}"
+            if config.option.no_provision is not True:  # it's a path
+                msg += " and wrote to {}"
+                cls.write_requires_to_json_file(config)
+            raise tox.exception.Error(
+                msg.format(sys.executable, missing_requirements, config.option.no_provision)
+            )
         if WITHIN_PROVISION and missing_requirements:
             msg = "break infinite loop provisioning within {} missing {}"
             raise tox.exception.Error(msg.format(sys.executable, missing_requirements))
         config.run_provision = bool(len(missing_requirements))
         return deps
 
+    @staticmethod
+    def write_requires_to_json_file(config):
+        requires_dict = {
+            "minversion": config.minversion,
+            "requires": config.requires,
+        }
+        try:
+            with open(config.option.no_provision, "w", encoding="utf-8") as outfile:
+                json.dump(requires_dict, outfile, indent=4)
+        except TypeError:  # Python 2
+            with open(config.option.no_provision, "w") as outfile:
+                json.dump(requires_dict, outfile, indent=4, encoding="utf-8")
+
     def parse_build_isolation(self, config, reader):
         config.isolated_build = reader.getbool("isolated_build", False)
         config.isolated_build_env = reader.getstring("isolated_build_env", ".package")

diff --git a/src/tox/_pytestplugin.py b/src/tox/_pytestplugin.py
index c9176348..d0c87033 100644
--- a/src/tox/_pytestplugin.py
+++ b/src/tox/_pytestplugin.py
@@ -491,7 +491,14 @@ def create_files(base, filedefs):
             create_files(base.ensure(key, dir=1), value)
         elif isinstance(value, six.string_types):
             s = textwrap.dedent(value)
-            base.join(key).write(s)
+
+            if not isinstance(s, six.text_type):
+                if not isinstance(s, six.binary_type):
+                    s = str(s)
+                else:
+                    s = six.ensure_text(s)
+
+            base.join(key).write_text(s, encoding="UTF-8")
 
 
 @pytest.fixture()
diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py
index fe11224c..b4bd24fb 100644
--- a/tests/unit/config/test_config.py
+++ b/tests/unit/config/test_config.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 import os
 import re
 import sys
@@ -3556,7 +3557,10 @@ def test_config_via_pyproject_legacy(initproj):
     initproj(
         "config_via_pyproject_legacy-0.5",
         filedefs={
-            "pyproject.toml": '''
+            "pyproject.toml": u'''
+                [project]
+                description = "Factory ⸻ A code generator 🏭"
+                authors = [{name = "Łukasz Langa"}]
                 [tool.tox]
                 legacy_tox_ini = """
                 [tox]
diff --git a/tests/unit/config/test_config_parallel.py b/tests/unit/config/test_config_parallel.py
index 785b7710..0e42a2c5 100644
--- a/tests/unit/config/test_config_parallel.py
+++ b/tests/unit/config/test_config_parallel.py
@@ -38,7 +38,7 @@ def test_parallel_number_negative(newconfig, capsys):
     assert "value must be positive" in err
 
 
-def test_depends(newconfig, capsys):
+def test_depends(newconfig):
     config = newconfig(
         """\
         [tox]
@@ -49,7 +49,7 @@ def test_depends(newconfig, capsys):
     assert config.envconfigs["py"].depends == ("py37", "py36")
 
 
-def test_depends_multi_row_facotr(newconfig, capsys):
+def test_depends_multi_row_facotr(newconfig):
     config = newconfig(
         """\
         [tox]
@@ -61,7 +61,7 @@ def test_depends_multi_row_facotr(newconfig, capsys):
     assert config.envconfigs["py"].depends == ("py37", "py36-a", "py36-b")
 
 
-def test_depends_factor(newconfig, capsys):
+def test_depends_factor(newconfig):
     config = newconfig(
         """\
         [tox]
diff --git a/tests/unit/session/test_provision.py b/tests/unit/session/test_provision.py
index cb7bd9b5..cf2ded10 100644
--- a/tests/unit/session/test_provision.py
+++ b/tests/unit/session/test_provision.py
@@ -1,5 +1,6 @@
 from __future__ import absolute_import, unicode_literals
 
+import json
 import os
 import shutil
 import subprocess
@@ -185,6 +186,99 @@ def test_provision_cli_args_not_ignored_if_provision_false(cmd, initproj):
     result.assert_fail(is_run_test_env=False)
 
 
+parametrize_json_path = pytest.mark.parametrize("json_path", [None, "missing.json"])
+
+
+@parametrize_json_path
+def test_provision_does_not_fail_with_no_provision_no_reason(cmd, initproj, json_path):
+    p = initproj("test-0.1", {"tox.ini": "[tox]"})
+    result = cmd("--no-provision", *([json_path] if json_path else []))
+    result.assert_success(is_run_test_env=True)
+    assert not (p / "missing.json").exists()
+
+
+@parametrize_json_path
+def test_provision_fails_with_no_provision_next_tox(cmd, initproj, next_tox_major, json_path):
+    p = initproj(
+        "test-0.1",
+        {
+            "tox.ini": """\
+                             [tox]
+                             minversion = {}
+                             """.format(
+                next_tox_major,
+            )
+        },
+    )
+    result = cmd("--no-provision", *([json_path] if json_path else []))
+    result.assert_fail(is_run_test_env=False)
+    if json_path:
+        missing = json.loads((p / json_path).read_text("utf-8"))
+        assert missing["minversion"] == next_tox_major
+
+
+@parametrize_json_path
+def test_provision_fails_with_no_provision_missing_requires(cmd, initproj, json_path):
+    p = initproj(
+        "test-0.1",
+        {
+            "tox.ini": """\
+                             [tox]
+                             requires =
+                                 virtualenv > 99999999
+                             """
+        },
+    )
+    result = cmd("--no-provision", *([json_path] if json_path else []))
+    result.assert_fail(is_run_test_env=False)
+    if json_path:
+        missing = json.loads((p / json_path).read_text("utf-8"))
+        assert missing["requires"] == ["virtualenv > 99999999"]
+
+
+@parametrize_json_path
+def test_provision_does_not_fail_with_satisfied_requires(cmd, initproj, next_tox_major, json_path):
+    p = initproj(
+        "test-0.1",
+        {
+            "tox.ini": """\
+                             [tox]
+                             minversion = 0
+                             requires =
+                                 setuptools > 2
+                                 pip > 3
+                             """
+        },
+    )
+    result = cmd("--no-provision", *([json_path] if json_path else []))
+    result.assert_success(is_run_test_env=True)
+    assert not (p / "missing.json").exists()
+
+
+@parametrize_json_path
+def test_provision_fails_with_no_provision_combined(cmd, initproj, next_tox_major, json_path):
+    p = initproj(
+        "test-0.1",
+        {
+            "tox.ini": """\
+                             [tox]
+                             minversion = {}
+                             requires =
+                                 setuptools > 2
+                                 pip > 3
+                             """.format(
+                next_tox_major,
+            )
+        },
+    )
+    result = cmd("--no-provision", *([json_path] if json_path else []))
+    result.assert_fail(is_run_test_env=False)
+    if json_path:
+        missing = json.loads((p / json_path).read_text("utf-8"))
+        assert missing["minversion"] == next_tox_major
+        assert missing["requires"] == ["setuptools > 2", "pip > 3"]
+
+
 @pytest.fixture(scope="session")
 def wheel(tmp_path_factory):
     """create a wheel for a project"""

Possible UnicodeError caused by missing encoding="utf-8"
https://github.com/tox-dev/tox/blob/555f3f13b18da1470b6518be654e3e4e2fdec654/src/tox/config/__init__.py#L304-L306

toml must be encoded by UTF-8. Please add `encoding="utf-8"` here.
It may cause UnicodeDecodeError when pyproject.toml contains non-ASCII character and locale encoding is not UTF-8 (e.g. Windows).

https://github.com/tox-dev/tox/blob/555f3f13b18da1470b6518be654e3e4e2fdec654/src/tox/util/stdlib.py#L52-L55

On Windows, stdout is UTF-8 encoded when it is console (e.g. _WinConsoleIO), but the default encoding of TemporaryFile() is legacy encoding. So UTF-8 is better encoding for this purpose.

This is not a real bug because this function is used only here:
https://github.com/tox-dev/tox/blob/cfe38bb853ff8573817c640a158b87eaad5b6e01/src/tox/session/__init__.py#L54
tests/unit/session/test_provision.py::test_provision_fails_with_no_provision_combined[missing.json] tests/unit/session/test_provision.py::test_provision_does_not_fail_with_no_provision_no_reason[missing.json] tests/unit/session/test_provision.py::test_provision_does_not_fail_with_satisfied_requires[None] tests/unit/session/test_provision.py::test_provision_does_not_fail_with_no_provision_no_reason[None] tests/unit/session/test_provision.py::test_provision_fails_with_no_provision_missing_requires[missing.json] tests/unit/session/test_provision.py::test_provision_does_not_fail_with_satisfied_requires[missing.json] tests/unit/session/test_provision.py::test_provision_fails_with_no_provision_next_tox[missing.json]
tests/unit/config/test_config.py::TestGetcontextname::test_hudson_legacy tests/unit/config/test_config.py::TestGetcontextname::test_jenkins tests/unit/config/test_config.py::TestGetcontextname::test_blank tests/unit/config/test_config.py::TestConfigPackage::test_defaults_changed_dir tests/unit/config/test_config.py::TestConfigPackage::test_defaults_distshare tests/unit/config/test_config.py::TestConfigPackage::test_project_paths tests/unit/config/test_config.py::TestConfigPackage::test_defaults tests/unit/config/test_config.py::TestConfigConstSubstitutions::test_replace_pathsep[:] tests/unit/config/test_config.py::TestConfigConstSubstitutions::test_replace_pathsep[;] tests/unit/config/test_config.py::TestConfigConstSubstitutions::test_dirsep_regex tests/unit/config/test_config.py::TestConfigConstSubstitutions::test_dirsep_replace[\\\\] tests/unit/config/test_config.py::TestConfigConstSubstitutions::test_pathsep_regex tests/unit/config/test_config.py::TestConfigConstSubstitutions::test_dirsep_replace[\\] tests/unit/config/test_config.py::TestVenvConfig::test_force_dep_with_url tests/unit/config/test_config.py::TestVenvConfig::test_envdir_set_manually tests/unit/config/test_config.py::TestVenvConfig::test_suicide_interrupt_terminate_timeout_set_manually tests/unit/config/test_config.py::TestVenvConfig::test_envdir_set_manually_setup_cfg tests/unit/config/test_config.py::TestVenvConfig::test_process_deps tests/unit/config/test_config.py::TestVenvConfig::test_config_parsing_multienv 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_config_parsing_minimal tests/unit/config/test_config.py::TestVenvConfig::test_is_same_dep tests/unit/config/test_config.py::TestGlobalOptions::test_no_implicit_venv_from_cli_with_envlist tests/unit/config/test_config.py::TestGlobalOptions::test_notest tests/unit/config/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_false tests/unit/config/test_config.py::TestGlobalOptions::test_sdist_specification tests/unit/config/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_cli_overrides_true tests/unit/config/test_config.py::TestGlobalOptions::test_quiet[args2-2] tests/unit/config/test_config.py::TestGlobalOptions::test_quiet[args0-0] tests/unit/config/test_config.py::TestGlobalOptions::test_envlist_multiline tests/unit/config/test_config.py::TestGlobalOptions::test_env_selection_expanded_envlist tests/unit/config/test_config.py::TestGlobalOptions::test_substitution_jenkins_default tests/unit/config/test_config.py::TestGlobalOptions::test_py_venv tests/unit/config/test_config.py::TestGlobalOptions::test_verbosity[args3-2] tests/unit/config/test_config.py::TestGlobalOptions::test_correct_basepython_chosen_from_default_factors tests/unit/config/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_true tests/unit/config/test_config.py::TestGlobalOptions::test_quiet[args1-1] tests/unit/config/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_cli_not_specified tests/unit/config/test_config.py::TestGlobalOptions::test_defaultenv_commandline tests/unit/config/test_config.py::TestGlobalOptions::test_envlist_expansion tests/unit/config/test_config.py::TestGlobalOptions::test_substitution_jenkins_context tests/unit/config/test_config.py::TestGlobalOptions::test_verbosity[args2-2] tests/unit/config/test_config.py::TestGlobalOptions::test_verbosity[args0-0] tests/unit/config/test_config.py::TestGlobalOptions::test_defaultenv_partial_override tests/unit/config/test_config.py::TestGlobalOptions::test_envlist_cross_product tests/unit/config/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_cli_no_arg tests/unit/config/test_config.py::TestGlobalOptions::test_quiet[args3-2] tests/unit/config/test_config.py::TestGlobalOptions::test_quiet[args4-3] tests/unit/config/test_config.py::TestGlobalOptions::test_verbosity[args4-3] tests/unit/config/test_config.py::TestGlobalOptions::test_env_selection_with_section_name tests/unit/config/test_config.py::TestGlobalOptions::test_substitution_jenkins_global tests/unit/config/test_config.py::TestGlobalOptions::test_skip_missing_interpreters_cli_overrides_false tests/unit/config/test_config.py::TestGlobalOptions::test_verbosity[args1-1] tests/unit/config/test_config.py::TestIniParserPrefix::test_other_section_substitution tests/unit/config/test_config.py::TestIniParserPrefix::test_fallback_sections tests/unit/config/test_config.py::TestIniParserPrefix::test_basic_section_access 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::TestConfigTestEnv::test_recursive_substitution_cycle_fails tests/unit/config/test_config.py::TestConfigTestEnv::test_take_dependencies_from_other_section tests/unit/config/test_config.py::TestConfigTestEnv::test_factors_in_boolean tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_as_multiline_list[linux2] tests/unit/config/test_config.py::TestConfigTestEnv::test_default_factors_conflict_lying_name tests/unit/config/test_config.py::TestConfigTestEnv::test_factor_ops tests/unit/config/test_config.py::TestConfigTestEnv::test_factors_in_setenv tests/unit/config/test_config.py::TestConfigTestEnv::test_sitepackages_switch tests/unit/config/test_config.py::TestConfigTestEnv::test_install_command_setting tests/unit/config/test_config.py::TestConfigTestEnv::test_multilevel_substitution tests/unit/config/test_config.py::TestConfigTestEnv::test_take_dependencies_from_other_testenv[envlist1-deps1] tests/unit/config/test_config.py::TestConfigTestEnv::test_rewrite_simple_posargs tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_positional tests/unit/config/test_config.py::TestConfigTestEnv::test_install_command_substitutions tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_defaults tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_noargs_issue240 tests/unit/config/test_config.py::TestConfigTestEnv::test_envbindir_jython[pypy3] tests/unit/config/test_config.py::TestConfigTestEnv::test_envbindir_jython[jython] tests/unit/config/test_config.py::TestConfigTestEnv::test_defaults tests/unit/config/test_config.py::TestConfigTestEnv::test_period_in_factor tests/unit/config/test_config.py::TestConfigTestEnv::test_ignore_errors tests/unit/config/test_config.py::TestConfigTestEnv::test_specific_command_overrides tests/unit/config/test_config.py::TestConfigTestEnv::test_factors tests/unit/config/test_config.py::TestConfigTestEnv::test_rewrite_posargs tests/unit/config/test_config.py::TestConfigTestEnv::test_factors_groups_touch tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_as_multiline_list[win32] tests/unit/config/test_config.py::TestConfigTestEnv::test_posargs_backslashed_or_quoted tests/unit/config/test_config.py::TestConfigTestEnv::test_envconfigs_based_on_factors tests/unit/config/test_config.py::TestConfigTestEnv::test_allowlist_externals tests/unit/config/test_config.py::TestConfigTestEnv::test_commentchars_issue33 tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_notfound_issue515 tests/unit/config/test_config.py::TestConfigTestEnv::test_regression_test_issue_706[envlist0] tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_glob_from_global_env tests/unit/config/test_config.py::TestConfigTestEnv::test_changedir tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_as_space_separated_list[linux2] tests/unit/config/test_config.py::TestConfigTestEnv::test_no_spinner tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_nested_env_defaults tests/unit/config/test_config.py::TestConfigTestEnv::test_envbindir tests/unit/config/test_config.py::TestConfigTestEnv::test_do_not_substitute_more_than_needed tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_notfound_issue246 tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_double tests/unit/config/test_config.py::TestConfigTestEnv::test_install_command_must_contain_packages tests/unit/config/test_config.py::TestConfigTestEnv::test_default_factors tests/unit/config/test_config.py::TestConfigTestEnv::test_install_command_substitutions_other_section tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_from_global_env tests/unit/config/test_config.py::TestConfigTestEnv::test_installpkg_tops_develop tests/unit/config/test_config.py::TestConfigTestEnv::test_single_value_from_other_secton tests/unit/config/test_config.py::TestConfigTestEnv::test_changedir_override tests/unit/config/test_config.py::TestConfigTestEnv::test_factor_use_not_checked tests/unit/config/test_config.py::TestConfigTestEnv::test_pip_pre_cmdline_override tests/unit/config/test_config.py::TestConfigTestEnv::test_factors_support_curly_braces tests/unit/config/test_config.py::TestConfigTestEnv::test_envbindir_jython[pypy] tests/unit/config/test_config.py::TestConfigTestEnv::test_default_factors_conflict tests/unit/config/test_config.py::TestConfigTestEnv::test_simple tests/unit/config/test_config.py::TestConfigTestEnv::test_pip_pre tests/unit/config/test_config.py::TestConfigTestEnv::test_factor_expansion tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_as_space_separated_list[win32] tests/unit/config/test_config.py::TestConfigTestEnv::test_passenv_with_factor tests/unit/config/test_config.py::TestConfigTestEnv::test_ignore_outcome tests/unit/config/test_config.py::TestConfigTestEnv::test_substitution_error tests/unit/config/test_config.py::TestConfigTestEnv::test_take_dependencies_from_other_testenv[envlist0-deps0] tests/unit/config/test_config.py::TestConfigTestEnv::test_curly_braces_in_setenv tests/unit/config/test_config.py::TestCommandParser::test_command_parser_for_substitution_with_spaces tests/unit/config/test_config.py::TestCommandParser::test_command_with_split_line_in_subst_arguments tests/unit/config/test_config.py::TestCommandParser::test_command_parser_with_complex_word_set tests/unit/config/test_config.py::TestCommandParser::test_command_parsing_for_issue_10 tests/unit/config/test_config.py::TestCommandParser::test_command_parser_for_multiple_words tests/unit/config/test_config.py::TestCommandParser::test_commands_with_backslash tests/unit/config/test_config.py::TestCommandParser::test_command_with_runs_of_whitespace 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::TestIniParser::test_argvlist_command_contains_hash tests/unit/config/test_config.py::TestIniParser::test_missing_env_sub_populates_missing_subs tests/unit/config/test_config.py::TestIniParser::test_getbool tests/unit/config/test_config.py::TestIniParser::test_value_doesn_match_section_substitution tests/unit/config/test_config.py::TestIniParser::test_argvlist_quoting_in_command tests/unit/config/test_config.py::TestIniParser::test_getpath tests/unit/config/test_config.py::TestIniParser::test_expand_section_name tests/unit/config/test_config.py::TestIniParser::test_substitution_empty tests/unit/config/test_config.py::TestIniParser::test_getstring_other_section_substitution 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_getstring_single tests/unit/config/test_config.py::TestIniParser::test_substitution_with_multiple_words tests/unit/config/test_config.py::TestIniParser::test_getlist tests/unit/config/test_config.py::TestIniParser::test_positional_arguments_are_only_replaced_when_standing_alone tests/unit/config/test_config.py::TestIniParser::test_argvlist_multiline tests/unit/config/test_config.py::TestIniParser::test_argvlist_positional_substitution tests/unit/config/test_config.py::TestIniParser::test_value_matches_section_substitution tests/unit/config/test_config.py::TestIniParser::test_getargv tests/unit/config/test_config.py::TestIniParser::test_getdict tests/unit/config/test_config.py::TestIniParser::test_posargs_are_added_escaped_issue310 tests/unit/config/test_config.py::TestIniParser::test_substitution_colon_prefix tests/unit/config/test_config.py::TestIniParser::test_argvlist_posargs_with_quotes tests/unit/config/test_config.py::TestIniParser::test_argvlist_quoted_posargs tests/unit/config/test_config.py::TestIniParser::test_argvlist_windows_escaping tests/unit/config/test_config.py::TestIniParser::test_getstring_substitution tests/unit/config/test_config.py::TestIniParser::test_normal_env_sub_works tests/unit/config/test_config.py::TestIniParser::test_missing_substitution tests/unit/config/test_config.py::TestIniParser::test_argvlist_comment_after_command tests/unit/config/test_config.py::TestIniParser::test_getstring_fallback_sections tests/unit/config/test_config.py::TestIniParser::test_argvlist tests/unit/config/test_config.py::TestIniParser::test_getstring_environment_substitution_with_default tests/unit/config/test_config.py::TestCmdInvocation::test_no_tox_ini tests/unit/config/test_config.py::TestCmdInvocation::test_version_no_plugins tests/unit/config/test_config.py::TestCmdInvocation::test_version_simple tests/unit/config/test_config.py::TestCmdInvocation::test_help 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::TestHashseedOption::test_setenv tests/unit/config/test_config.py::TestHashseedOption::test_noset tests/unit/config/test_config.py::TestHashseedOption::test_passing_integer tests/unit/config/test_config.py::TestHashseedOption::test_noset_with_setenv tests/unit/config/test_config.py::TestHashseedOption::test_passing_string tests/unit/config/test_config.py::TestHashseedOption::test_one_random_hashseed tests/unit/config/test_config.py::TestHashseedOption::test_default tests/unit/config/test_config.py::TestHashseedOption::test_passing_empty_string tests/unit/config/test_config.py::TestHashseedOption::test_setenv_in_one_testenv tests/unit/config/test_config.py::TestHashseedOption::test_passing_no_argument tests/unit/config/test_config.py::test_get_homedir tests/unit/config/test_config.py::test_env_spec[-e tests/unit/config/test_config.py::test_config_no_version_data_in__name tests/unit/config/test_config.py::test_config_bad_pyproject_specified tests/unit/config/test_config.py::test_interactive_available tests/unit/config/test_config.py::test_config_via_pyproject_legacy tests/unit/config/test_config.py::test_provision_tox_env_cannot_be_in_envlist tests/unit/config/test_config.py::test_posargs_relative_changedir tests/unit/config/test_config.py::test_overwrite_skip_install_override tests/unit/config/test_config.py::test_interactive tests/unit/config/test_config.py::test_config_bad_config_type_specified tests/unit/config/test_config.py::test_config_file_not_required_with_devenv tests/unit/config/test_config.py::test_config_current_py tests/unit/config/test_config.py::test_isolated_build_ignores[deps-crazy-default0] tests/unit/config/test_config.py::test_interactive_na tests/unit/config/test_config.py::test_isolated_build_overrides tests/unit/config/test_config.py::test_config_setup_cfg_no_tox_section tests/unit/config/test_config.py::test_isolated_build_env_cannot_be_in_envlist tests/unit/config/test_config.py::test_isolated_build_ignores[sitepackages-True-False] tests/unit/config/test_config.py::TestParseconfig::test_search_parents tests/unit/config/test_config.py::TestParseconfig::test_workdir_gets_resolved tests/unit/config/test_config.py::TestParseconfig::test_explicit_config_path tests/unit/config/test_config.py::TestParseEnv::test_parse_recreate tests/unit/config/test_config.py::TestIndexServer::test_indexserver tests/unit/config/test_config.py::TestIndexServer::test_multiple_homedir_relative_local_indexservers tests/unit/config/test_config.py::TestIndexServer::test_parse_indexserver tests/unit/config/test_config.py::TestConfigPlatform::test_platform_install_command 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::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 tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_substitution_from_other_section tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_section_and_posargs_substitution tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_env_substitution_posargs_with_spaced_colon tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_substitution_from_other_section_multiline tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_env_substitution_posargs tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_env_substitution_global tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_missing_substitution_multi_env tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_substitution_recursion_error_same_section tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_missing_substitution_setenv tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_missing_substitution_simple tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_substitution_recursion_error_other_section tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_env_substitution_posargs_with_colon tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_missing_substitution_other_section tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_substitution_from_other_section_posargs tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_substitution_recursion_error_unnecessary tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_env_substitution tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_missing_substitution_complex tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_regression_issue595 tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_missing_substitution_inherit tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_posargs_with_colon tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_env_substitution_default_escape tests/unit/config/test_config.py::TestIniParserAgainstCommandsKey::test_command_missing_substitution tests/unit/config/test_config.py::TestSetenv::test_setenv_overrides tests/unit/config/test_config.py::TestSetenv::test_setenv_cross_section_subst_twice tests/unit/config/test_config.py::TestSetenv::test_setenv_ordering_1 tests/unit/config/test_config.py::TestSetenv::test_setenv_recursive_direct_without_default tests/unit/config/test_config.py::TestSetenv::test_setenv_uses_os_environ tests/unit/config/test_config.py::TestSetenv::test_setenv_comment tests/unit/config/test_config.py::TestSetenv::test_getdict_lazy tests/unit/config/test_config.py::TestSetenv::test_setenv_env_file[None-False] tests/unit/config/test_config.py::TestSetenv::test_setenv_recursive_direct_with_default tests/unit/config/test_config.py::TestSetenv::test_setenv_env_file[\nMAGIC tests/unit/config/test_config.py::TestSetenv::test_setenv_uses_other_setenv tests/unit/config/test_config.py::TestSetenv::test_setenv_default_os_environ tests/unit/config/test_config.py::TestSetenv::test_setenv_recursive_direct_with_default_nested tests/unit/config/test_config.py::TestSetenv::test_setenv_env_file[MAGIC=yes-True] tests/unit/config/test_config.py::TestSetenv::test_setenv_env_file[\n-False] tests/unit/config/test_config.py::TestSetenv::test_setenv_env_file[#MAGIC tests/unit/config/test_config.py::TestSetenv::test_setenv_cross_section_mixed tests/unit/config/test_config.py::TestSetenv::test_setenv_with_envdir_and_basepython tests/unit/config/test_config.py::TestSetenv::test_getdict_lazy_update tests/unit/config/test_config.py::TestSetenv::test_setenv_cross_section_subst_issue294 tests/unit/session/test_provision.py::test_provision_fails_with_no_provision_missing_requires[None] tests/unit/session/test_provision.py::test_provision_basepython_local tests/unit/session/test_provision.py::test_provision_config_empty_minversion_and_requires tests/unit/session/test_provision.py::test_provision_fails_with_no_provision_next_tox[None] tests/unit/session/test_provision.py::test_provision_cli_args_not_ignored_if_provision_false tests/unit/session/test_provision.py::test_provision_requirement_with_environment_marker tests/unit/session/test_provision.py::test_provision_cli_args_ignore tests/unit/session/test_provision.py::test_provision_non_canonical_dep tests/unit/session/test_provision.py::test_provision_config_has_minversion_and_requires tests/unit/session/test_provision.py::test_provision_basepython_global_only tests/unit/session/test_provision.py::test_provision_tox_change_name tests/unit/session/test_provision.py::test_provision_bad_requires tests/unit/session/test_provision.py::test_provision_fails_with_no_provision_combined[None] tests/unit/session/test_provision.py::test_provision_min_version_is_requires tests/unit/config/test_config_parallel.py::test_parallel_number_negative tests/unit/config/test_config_parallel.py::test_depends tests/unit/config/test_config_parallel.py::test_parallel_all tests/unit/config/test_config_parallel.py::test_parallel_number tests/unit/config/test_config_parallel.py::test_depends_multi_row_facotr tests/unit/config/test_config_parallel.py::test_depends_factor tests/unit/config/test_config_parallel.py::test_parallel_live_on tests/unit/config/test_config_parallel.py::test_parallel_auto tests/unit/config/test_config_parallel.py::test_parallel_default