diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs index c33e4b2733c7..ae8c39ed594e 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs @@ -17,19 +17,19 @@ namespace Microsoft.NET.Build.Tests public class GivenThatWeWantToFloatWarningLevels : SdkTest { private const string targetFrameworkNet6 = "net6.0"; - private const string targetFrameworkNet7 = "net7.0"; private const string targetFrameworkNetFramework472 = "net472"; public GivenThatWeWantToFloatWarningLevels(ITestOutputHelper log) : base(log) { } - [InlineData(targetFrameworkNet6, 6)] - [InlineData(targetFrameworkNet7, 7)] - [InlineData(targetFrameworkNetFramework472, 4)] + [InlineData(targetFrameworkNet6, "6")] + [InlineData(ToolsetInfo.CurrentTargetFramework, ToolsetInfo.CurrentTargetFrameworkVersion)] + [InlineData(targetFrameworkNetFramework472, "4")] [RequiresMSBuildVersionTheory("16.8")] - public void It_defaults_WarningLevel_To_The_Current_TFM_When_Net(string tfm, int warningLevel) + public void It_defaults_WarningLevel_To_The_Current_TFM_When_Net(string tfm, string warningLevel) { + int parsedWarningLevel = (int)double.Parse(warningLevel); var testProject = new TestProject { Name = "HelloWorld", @@ -66,7 +66,7 @@ static void Main() var buildResult = buildCommand.Execute(); var computedWarningLevel = buildCommand.GetValues()[0]; buildResult.StdErr.Should().Be(string.Empty); - computedWarningLevel.Should().Be(warningLevel.ToString()); + computedWarningLevel.Should().Be(parsedWarningLevel.ToString()); } [InlineData(1, 1)] @@ -77,7 +77,7 @@ public void It_always_accepts_user_defined_WarningLevel(int? warningLevel, int e var testProject = new TestProject { Name = "HelloWorld", - TargetFrameworks = "net7.0", + TargetFrameworks = ToolsetInfo.CurrentTargetFramework, IsExe = true, SourceFiles = { @@ -103,7 +103,7 @@ static void Main() var buildCommand = new GetValuesCommand( Log, Path.Combine(testAsset.TestRoot, testProject.Name), - "net7.0", "WarningLevel") + ToolsetInfo.CurrentTargetFramework, "WarningLevel") { DependsOnTargets = "Build" }; @@ -114,7 +114,7 @@ static void Main() } [InlineData(targetFrameworkNet6, "6.0")] - [InlineData(targetFrameworkNet7, "7.0")] + [InlineData(ToolsetInfo.CurrentTargetFramework, ToolsetInfo.CurrentTargetFrameworkVersion)] [InlineData(targetFrameworkNetFramework472, null)] [RequiresMSBuildVersionTheory("16.8")] public void It_defaults_AnalysisLevel_To_The_Current_TFM_When_NotLatestTFM(string tfm, string analysisLevel) @@ -166,5 +166,97 @@ static void Main() buildResult.StdErr.Should().Be(string.Empty); } + [InlineData(ToolsetInfo.CurrentTargetFramework, ToolsetInfo.NextTargetFrameworkVersion)] + [RequiresMSBuildVersionTheory("16.8")] + public void It_defaults_preview_AnalysisLevel_to_the_next_tfm(string currentTFM, string nextTFMVersionNumber) + { + var testProject = new TestProject + { + Name = "HelloWorld", + TargetFrameworks = currentTFM, + IsExe = true, + SourceFiles = + { + ["Program.cs"] = @" + using System; + + namespace ConsoleCore + { + class Program + { + static void Main() + { + } + } + } + ", + }, + }; + testProject.AdditionalProperties.Add("AnalysisLevel", "preview"); + + var testAsset = _testAssetsManager + .CreateTestProject(testProject, identifier: "analysisLevelPreviewConsoleApp"+currentTFM, targetExtension: ".csproj"); + + var buildCommand = new GetValuesCommand( + Log, + Path.Combine(testAsset.TestRoot, testProject.Name), + currentTFM, "EffectiveAnalysisLevel") + { + DependsOnTargets = "Build" + }; + var buildResult = buildCommand.Execute(); + + buildResult.StdErr.Should().Be(string.Empty); + var computedEffectiveAnalysisLevel = buildCommand.GetValues()[0]; + computedEffectiveAnalysisLevel.Should().Be(nextTFMVersionNumber.ToString()); + } + + [InlineData("preview")] + [InlineData("latest")] + [InlineData("none")] + [RequiresMSBuildVersionTheory("16.8")] + public void It_resolves_all_nonnumeric_AnalysisLevel_strings(string analysisLevel) + { + var testProject = new TestProject + { + Name = "HelloWorld", + TargetFrameworks = ToolsetInfo.CurrentTargetFramework, + IsExe = true, + SourceFiles = + { + ["Program.cs"] = @" + using System; + + namespace ConsoleCore + { + class Program + { + static void Main() + { + } + } + } + ", + }, + }; + testProject.AdditionalProperties.Add("AnalysisLevel", analysisLevel); + + var testAsset = _testAssetsManager + .CreateTestProject(testProject, identifier: "analysisLevelPreviewConsoleApp"+ToolsetInfo.CurrentTargetFramework+analysisLevel, targetExtension: ".csproj"); + + var buildCommand = new GetValuesCommand( + Log, + Path.Combine(testAsset.TestRoot, testProject.Name), + ToolsetInfo.CurrentTargetFramework, "EffectiveAnalysisLevel") + { + DependsOnTargets = "Build" + }; + var buildResult = buildCommand.Execute(); + + buildResult.StdErr.Should().Be(string.Empty); + var computedEffectiveAnalysisLevel = buildCommand.GetValues()[0]; + computedEffectiveAnalysisLevel.Should().NotBe(analysisLevel); + } + } } diff --git a/src/Tests/Microsoft.NET.TestFramework/ToolsetInfo.cs b/src/Tests/Microsoft.NET.TestFramework/ToolsetInfo.cs index 894020f876fa..3620ec1ca8de 100644 --- a/src/Tests/Microsoft.NET.TestFramework/ToolsetInfo.cs +++ b/src/Tests/Microsoft.NET.TestFramework/ToolsetInfo.cs @@ -19,6 +19,8 @@ public class ToolsetInfo { public const string CurrentTargetFramework = "net7.0"; public const string CurrentTargetFrameworkVersion = "7.0"; + public const string NextTargetFramework = "net8.0"; + public const string NextTargetFrameworkVersion = "8.0"; public string DotNetRoot { get; } public string DotNetHostPath { get; }