@@ -1081,4 +1081,88 @@ mod msvc_clang_cl_tests {
10811081 "clang-cl should still be MSVC-like in C++ mode"
10821082 ) ;
10831083 }
1084+
1085+ #[ test]
1086+ fn msvc_prefer_clang_cl_over_msvc_enabled_by_env ( ) {
1087+ reset_env ( ) ;
1088+ std:: env:: set_var ( "CC_PREFER_CLANG_CL_OVER_MSVC" , "1" ) ;
1089+
1090+ let test = Test :: msvc_autodetect ( ) ;
1091+
1092+ let compiler = test
1093+ . gcc ( )
1094+ . try_get_compiler ( )
1095+ . expect ( "Failed to get compiler" ) ;
1096+
1097+ assert ! (
1098+ compiler. is_like_clang_cl( ) ,
1099+ "clang-cl.exe should be identified as clang-cl-like, got {:?}" ,
1100+ compiler
1101+ ) ;
1102+ assert ! (
1103+ compiler. is_like_msvc( ) ,
1104+ "clang-cl should still be MSVC-like"
1105+ ) ;
1106+ std:: env:: remove_var ( "CC_PREFER_CLANG_CL_OVER_MSVC" ) ; // Clean up after test
1107+ }
1108+
1109+ #[ test]
1110+ fn msvc_prefer_clang_cl_over_msvc_disabled_by_env ( ) {
1111+ reset_env ( ) ;
1112+ std:: env:: set_var ( "CC_PREFER_CLANG_CL_OVER_MSVC" , "0" ) ;
1113+
1114+ let test = Test :: msvc_autodetect ( ) ;
1115+
1116+ let compiler = test
1117+ . gcc ( )
1118+ . try_get_compiler ( )
1119+ . expect ( "Failed to get compiler" ) ;
1120+
1121+ assert ! ( compiler. is_like_msvc( ) , "Should still be MSVC-like" ) ;
1122+ assert ! ( !compiler. is_like_clang_cl( ) , "Should not use clang-cl" ) ;
1123+ std:: env:: remove_var ( "CC_PREFER_CLANG_CL_OVER_MSVC" ) ; // Clean up after test
1124+ }
1125+
1126+ #[ test]
1127+ fn msvc_prefer_clang_cl_over_msvc_disabled_by_env_precedence ( ) {
1128+ reset_env ( ) ;
1129+ std:: env:: set_var ( "CC_PREFER_CLANG_CL_OVER_MSVC" , "0" ) ;
1130+
1131+ let test = Test :: msvc_autodetect ( ) ;
1132+
1133+ let compiler = test
1134+ . gcc ( )
1135+ . prefer_clang_cl_over_msvc ( true )
1136+ . try_get_compiler ( )
1137+ . expect ( "Failed to get compiler" ) ;
1138+
1139+ assert ! ( compiler. is_like_msvc( ) , "Should still be MSVC-like" ) ;
1140+ assert ! ( !compiler. is_like_clang_cl( ) , "Should not use clang-cl" ) ;
1141+ std:: env:: remove_var ( "CC_PREFER_CLANG_CL_OVER_MSVC" ) ; // Clean up after test
1142+ }
1143+
1144+ #[ test]
1145+ fn msvc_prefer_clang_cl_over_msvc_enabled_by_env_precedence ( ) {
1146+ reset_env ( ) ;
1147+ std:: env:: set_var ( "CC_PREFER_CLANG_CL_OVER_MSVC" , "1" ) ;
1148+
1149+ let test = Test :: msvc_autodetect ( ) ;
1150+
1151+ let compiler = test
1152+ . gcc ( )
1153+ . prefer_clang_cl_over_msvc ( false )
1154+ . try_get_compiler ( )
1155+ . expect ( "Failed to get compiler" ) ;
1156+
1157+ assert ! (
1158+ compiler. is_like_clang_cl( ) ,
1159+ "clang-cl.exe should be identified as clang-cl-like, got {:?}" ,
1160+ compiler
1161+ ) ;
1162+ assert ! (
1163+ compiler. is_like_msvc( ) ,
1164+ "clang-cl should still be MSVC-like"
1165+ ) ;
1166+ std:: env:: remove_var ( "CC_PREFER_CLANG_CL_OVER_MSVC" ) ; // Clean up after test
1167+ }
10841168}
0 commit comments