@@ -3174,6 +3174,53 @@ def test_equivalency_ast_parse_failure_includes_error(self) -> None:
31743174 err .match ("invalid character" )
31753175 err .match (r"\(<unknown>, line 1\)" )
31763176
3177+ def test_target_version_exceeds_runtime_warning (self ) -> None :
3178+ max_target = max (TargetVersion , key = lambda tv : tv .value )
3179+ if sys .version_info [1 ] >= max_target .value :
3180+ pytest .skip ("no target version higher than runtime available" )
3181+ target_name = f"py3{ sys .version_info [1 ] + 1 } "
3182+ code = "x = 1\n "
3183+ args = ["--target-version" , target_name , "--code" , code ]
3184+ result = CliRunner ().invoke (black .main , args )
3185+ stderr = result .stderr_bytes .decode () if result .stderr_bytes else ""
3186+ assert "Warning:" in stderr
3187+
3188+ def test_target_version_exceeds_runtime_no_warning_with_fast (self ) -> None :
3189+ max_target = max (TargetVersion , key = lambda tv : tv .value )
3190+ if sys .version_info [1 ] >= max_target .value :
3191+ pytest .skip ("no target version higher than runtime available" )
3192+ target_name = f"py3{ sys .version_info [1 ] + 1 } "
3193+ code = "x = 1\n "
3194+ args = ["--fast" , "--target-version" , target_name , "--code" , code ]
3195+ result = CliRunner ().invoke (black .main , args )
3196+ stderr = result .stderr_bytes .decode () if result .stderr_bytes else ""
3197+ assert "Warning:" not in stderr
3198+
3199+ def test_target_version_at_runtime_no_warning (self ) -> None :
3200+ current_minor = sys .version_info [1 ]
3201+ target_name = f"py3{ current_minor } "
3202+ code = "x = 1\n "
3203+ args = ["--target-version" , target_name , "--code" , code ]
3204+ result = CliRunner ().invoke (black .main , args )
3205+ stderr = result .stderr_bytes .decode () if result .stderr_bytes else ""
3206+ assert "Warning:" not in stderr
3207+
3208+ @pytest .mark .incompatible_with_mypyc
3209+ def test_target_version_exceeds_runtime_clear_error_message (self ) -> None :
3210+ max_target = max (TargetVersion , key = lambda tv : tv .value )
3211+ if sys .version_info [1 ] >= max_target .value :
3212+ pytest .skip ("no target version higher than runtime available" )
3213+ future_target = TargetVersion [f"PY3{ sys .version_info [1 ] + 1 } " ]
3214+ mode = Mode (target_versions = {future_target })
3215+ with patch .object (
3216+ black ,
3217+ "assert_equivalent" ,
3218+ side_effect = ASTSafetyError ("mocked parse failure" ),
3219+ ):
3220+ with pytest .raises (ASTSafetyError ) as exc_info :
3221+ black .check_stability_and_equivalence ("x = 1\n " , "x = 1\n " , mode = mode )
3222+ assert "INTERNAL ERROR" not in str (exc_info .value )
3223+
31773224
31783225try :
31793226 with open (black .__file__ , encoding = "utf-8" ) as _bf :
0 commit comments