From f16ce672d76c68bbca9de6737965765523090868 Mon Sep 17 00:00:00 2001 From: Chet Husk Date: Mon, 16 May 2022 10:45:28 -0500 Subject: [PATCH 1/6] add tests to cover the resolution of AnalysisLevel known-strings --- .../GivenThatWeWantToFloatWarningLevels.cs | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs index c33e4b2733c7..fb42c486430f 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs @@ -166,5 +166,97 @@ static void Main() buildResult.StdErr.Should().Be(string.Empty); } + [InlineData(targetFrameworkNet7, "8.0")] + [RequiresMSBuildVersionTheory("16.8")] + public void It_defaults_preview_AnalysisLevel_to_the_next_tfm(string currentTFM, string nextTFM) + { + 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(nextTFM.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 = targetFrameworkNet7, + 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"+targetFrameworkNet7, targetExtension: ".csproj"); + + var buildCommand = new GetValuesCommand( + Log, + Path.Combine(testAsset.TestRoot, testProject.Name), + targetFrameworkNet7, "EffectiveAnalysisLevel") + { + DependsOnTargets = "Build" + }; + var buildResult = buildCommand.Execute(); + + buildResult.StdErr.Should().Be(string.Empty); + var computedEffectiveAnalysisLevel = buildCommand.GetValues()[0]; + computedEffectiveAnalysisLevel.Should().NotBe(analysisLevel); + } + } } From 679f43bdc44a51e43b54e03dc59c217e48143234 Mon Sep 17 00:00:00 2001 From: Chet Husk Date: Mon, 16 May 2022 11:37:21 -0500 Subject: [PATCH 2/6] deduplicate test project generated directories --- .../GivenThatWeWantToFloatWarningLevels.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs index fb42c486430f..e82d49d32138 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs @@ -242,7 +242,7 @@ static void Main() testProject.AdditionalProperties.Add("AnalysisLevel", analysisLevel); var testAsset = _testAssetsManager - .CreateTestProject(testProject, identifier: "analysisLevelPreviewConsoleApp"+targetFrameworkNet7, targetExtension: ".csproj"); + .CreateTestProject(testProject, identifier: "analysisLevelPreviewConsoleApp"+targetFrameworkNet7+analysisLevel, targetExtension: ".csproj"); var buildCommand = new GetValuesCommand( Log, From 97493d01178984347c70192ad25661bccb0e07ba Mon Sep 17 00:00:00 2001 From: Chet Husk Date: Wed, 18 May 2022 13:29:03 -0500 Subject: [PATCH 3/6] make analysislevel and warninglevel tests float to current TFM --- .../GivenThatWeWantToFloatWarningLevels.cs | 26 +++++++++---------- .../ToolsetInfo.cs | 2 ++ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs index e82d49d32138..1a80a715a8f3 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.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,7 +166,7 @@ static void Main() buildResult.StdErr.Should().Be(string.Empty); } - [InlineData(targetFrameworkNet7, "8.0")] + [InlineData(ToolsetInfo.CurrentTargetFramework, ToolsetInfo.NextTargetFramework)] [RequiresMSBuildVersionTheory("16.8")] public void It_defaults_preview_AnalysisLevel_to_the_next_tfm(string currentTFM, string nextTFM) { @@ -220,7 +220,7 @@ public void It_resolves_all_nonnumeric_AnalysisLevel_strings(string analysisLeve var testProject = new TestProject { Name = "HelloWorld", - TargetFrameworks = targetFrameworkNet7, + TargetFrameworks = ToolsetInfo.CurrentTargetFramework, IsExe = true, SourceFiles = { @@ -242,12 +242,12 @@ static void Main() testProject.AdditionalProperties.Add("AnalysisLevel", analysisLevel); var testAsset = _testAssetsManager - .CreateTestProject(testProject, identifier: "analysisLevelPreviewConsoleApp"+targetFrameworkNet7+analysisLevel, targetExtension: ".csproj"); + .CreateTestProject(testProject, identifier: "analysisLevelPreviewConsoleApp"+ToolsetInfo.CurrentTargetFramework+analysisLevel, targetExtension: ".csproj"); var buildCommand = new GetValuesCommand( Log, Path.Combine(testAsset.TestRoot, testProject.Name), - targetFrameworkNet7, "EffectiveAnalysisLevel") + ToolsetInfo.CurrentTargetFramework, "EffectiveAnalysisLevel") { DependsOnTargets = "Build" }; 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; } From b957b1df08748fea8c3d78a356425ec6d023cc95 Mon Sep 17 00:00:00 2001 From: Chet Husk Date: Wed, 18 May 2022 18:29:41 -0500 Subject: [PATCH 4/6] fix version number parsing --- .../GivenThatWeWantToFloatWarningLevels.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs index 1a80a715a8f3..15453934b7ec 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs @@ -29,7 +29,7 @@ public GivenThatWeWantToFloatWarningLevels(ITestOutputHelper log) : base(log) [RequiresMSBuildVersionTheory("16.8")] public void It_defaults_WarningLevel_To_The_Current_TFM_When_Net(string tfm, string warningLevel) { - int parsedWarningLevel = int.Parse(warningLevel); + int parsedWarningLevel = double.Parse(warningLevel); var testProject = new TestProject { Name = "HelloWorld", From e8c68426e26d1ab77ad6cc1959afb48452fd627f Mon Sep 17 00:00:00 2001 From: Chet Husk Date: Wed, 1 Jun 2022 16:22:24 -0500 Subject: [PATCH 5/6] fix cast --- .../GivenThatWeWantToFloatWarningLevels.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs index 15453934b7ec..b26d6665db69 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs @@ -29,7 +29,7 @@ public GivenThatWeWantToFloatWarningLevels(ITestOutputHelper log) : base(log) [RequiresMSBuildVersionTheory("16.8")] public void It_defaults_WarningLevel_To_The_Current_TFM_When_Net(string tfm, string warningLevel) { - int parsedWarningLevel = double.Parse(warningLevel); + int parsedWarningLevel = (int)double.Parse(warningLevel); var testProject = new TestProject { Name = "HelloWorld", From 25f5fd0f6854d433f88afba8c1633db44edf146d Mon Sep 17 00:00:00 2001 From: Chet Husk Date: Wed, 1 Jun 2022 22:08:04 -0500 Subject: [PATCH 6/6] fix the assertion for preview AnalysisLevel calculation --- .../GivenThatWeWantToFloatWarningLevels.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs index b26d6665db69..ae8c39ed594e 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToFloatWarningLevels.cs @@ -166,9 +166,9 @@ static void Main() buildResult.StdErr.Should().Be(string.Empty); } - [InlineData(ToolsetInfo.CurrentTargetFramework, ToolsetInfo.NextTargetFramework)] + [InlineData(ToolsetInfo.CurrentTargetFramework, ToolsetInfo.NextTargetFrameworkVersion)] [RequiresMSBuildVersionTheory("16.8")] - public void It_defaults_preview_AnalysisLevel_to_the_next_tfm(string currentTFM, string nextTFM) + public void It_defaults_preview_AnalysisLevel_to_the_next_tfm(string currentTFM, string nextTFMVersionNumber) { var testProject = new TestProject { @@ -208,7 +208,7 @@ static void Main() buildResult.StdErr.Should().Be(string.Empty); var computedEffectiveAnalysisLevel = buildCommand.GetValues()[0]; - computedEffectiveAnalysisLevel.Should().Be(nextTFM.ToString()); + computedEffectiveAnalysisLevel.Should().Be(nextTFMVersionNumber.ToString()); } [InlineData("preview")]