File: GivenThatWeWantToTargetEolFrameworks.cs
Web Access
Project: ..\..\..\test\Microsoft.NET.Build.Tests\Microsoft.NET.Build.Tests.csproj (Microsoft.NET.Build.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#nullable disable
 
namespace Microsoft.NET.Build.Tests
{
    public class GivenThatWeWantToTargetEolFrameworks : SdkTest
    {
        public GivenThatWeWantToTargetEolFrameworks(ITestOutputHelper log) : base(log)
        {
        }
 
        [Theory]
        [InlineData("netcoreapp1.0")]
        [InlineData("netcoreapp2.1")]
        [InlineData("netcoreapp3.0")]
        [InlineData("netcoreapp3.1")]
        [InlineData("net5.0")]
        [InlineData("net6.0")]
        [InlineData("net7.0")]
        public void It_warns_that_framework_is_out_of_support(string targetFrameworks)
        {
            var testProject = new TestProject()
            {
                Name = $"Eol{targetFrameworks}",
                TargetFrameworks = targetFrameworks,
                IsExe = true
            };
 
            var testAsset = _testAssetsManager.CreateTestProject(testProject);
 
            var buildCommand = new BuildCommand(testAsset);
 
            var result = buildCommand
                .Execute();
 
            result
                .Should()
                .Pass()
                .And
                .HaveStdOutContaining("NETSDK1138");
        }
 
        [Fact]
        public void It_only_checks_for_netcoreapp_eol_frameworks()
        {
            var testProject = new TestProject()
            {
                Name = $"EolOnlyNetCore",
                TargetFrameworks = $"netcoreapp1.0;{ToolsetInfo.CurrentTargetFramework};net472",
                IsExe = true,
            };
 
            var testAsset = _testAssetsManager.CreateTestProject(testProject);
 
            var buildCommand = new BuildCommand(testAsset);
 
            var result = buildCommand
                .Execute();
 
            var lines = (result.StdOut.Split(Environment.NewLine)).Where(line => line.Contains("NETSDK1138"));
 
            Assert.NotNull(lines.FirstOrDefault(line => line.IndexOf("netcoreapp1.0") >= 0));
            Assert.All(lines, line => Assert.DoesNotContain(ToolsetInfo.CurrentTargetFramework, line));
            Assert.All(lines, line => Assert.DoesNotContain("net472", line));
        }
 
        [Fact]
        public void It_does_not_warn_when_deactivating_check()
        {
            var testProject = new TestProject()
            {
                Name = $"EolNoWarning",
                TargetFrameworks = "netcoreapp1.0",
 
                IsExe = true
            };
 
            testProject.AdditionalProperties["CheckEolTargetFramework"] = "false";
 
            var testAsset = _testAssetsManager.CreateTestProject(testProject);
 
            var buildCommand = new BuildCommand(testAsset);
 
            var result = buildCommand
                .Execute();
 
            result
                .Should()
                .Pass()
                .And
                .NotHaveStdOutContaining("NETSDK1138");
        }
 
        [Fact]
        public void It_does_not_warn_when_target_library()
        {
            var testProject = new TestProject()
            {
                Name = $"EolNoWarning",
                TargetFrameworks = "netcoreapp1.0",
            };
 
            var testAsset = _testAssetsManager.CreateTestProject(testProject);
 
            var buildCommand = new BuildCommand(testAsset);
 
            var result = buildCommand
                .Execute();
 
            result
                .Should()
                .Pass()
                .And
                .NotHaveStdOutContaining("NETSDK1138");
        }
 
        [Fact]
        public void It_warns_for_workloads_out_of_support()
        {
            var testProject = new TestProject()
            {
                Name = $"EolWorkloads",
                TargetFrameworks = "net6.0"
            };
 
            testProject.AddItem("EolWorkload", new()
            {
                { "Include", "android" },
                { "Url", "https://aka.ms/maui-support-policy" }
            });
 
            var testAsset = _testAssetsManager.CreateTestProject(testProject);
 
            var buildCommand = new BuildCommand(testAsset);
 
            var result = buildCommand
                .Execute();
 
            result
                .Should()
                .Pass()
                .And
                .HaveStdOutContaining("NETSDK1202");
        }
 
        [Fact]
        public void It_does_not_warn_when_deactivating_workloads_check()
        {
            var testProject = new TestProject()
            {
                Name = $"EolWorkloadsNoWarning",
                TargetFrameworks = "net6.0"
            };
 
            testProject.AdditionalProperties["CheckEolWorkloads"] = "false";
 
            testProject.AddItem("EolWorkload", new()
            {
                { "Include", "android" },
                { "Url", "https://aka.ms/maui-support-policy" }
            });
 
            var testAsset = _testAssetsManager.CreateTestProject(testProject);
 
            var buildCommand = new BuildCommand(testAsset);
 
            var result = buildCommand
                .Execute();
 
            result
                .Should()
                .Pass()
                .And
                .NotHaveStdOutContaining("NETSDK1202");
        }
    }
}