File: GivenThatWeWantToCleanAProject.cs
Web Access
Project: ..\..\..\test\Microsoft.NET.Clean.Tests\Microsoft.NET.Clean.Tests.csproj (Microsoft.NET.Clean.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using NuGet.Common;
using NuGet.ProjectModel;
 
namespace Microsoft.NET.Clean.Tests
{
    public class GivenThatWeWantToCleanAHelloWorldProject : SdkTest
    {
        public GivenThatWeWantToCleanAHelloWorldProject(ITestOutputHelper log) : base(log)
        {
        }
 
        [RequiresMSBuildVersionFact("17.12.0")]
        public void It_cleans_without_logging_assets_message()
        {
            var testAsset = _testAssetsManager
                .CopyTestAsset("HelloWorld", "CleanHelloWorld")
                .WithSource()
                .Restore(Log);
 
            var lockFilePath = Path.Combine(testAsset.TestRoot, "obj", "project.assets.json");
            LockFile lockFile = LockFileUtilities.GetLockFile(lockFilePath, NullLogger.Instance);
 
            lockFile.LogMessages.Add(
                new AssetsLogMessage(
                    LogLevel.Warning,
                    NuGetLogCode.NU1500,
                    "a test warning",
                    null));
 
            new LockFileFormat().Write(lockFilePath, lockFile);
 
            var cleanCommand = new CleanCommand(Log, testAsset.TestRoot);
 
            cleanCommand
                .Execute("/p:CheckEolTargetFramework=false")
                .Should()
                .Pass()
                .And
                .NotHaveStdOutContaining("warning");
        }
 
        [Fact]
        public void It_cleans_without_assets_file_present()
        {
            var testAsset = _testAssetsManager
                .CopyTestAsset("HelloWorld")
                .WithSource();
 
            var assetsFilePath = Path.Combine(testAsset.TestRoot, "obj", "project.assets.json");
            File.Exists(assetsFilePath).Should().BeFalse();
 
            var cleanCommand = new CleanCommand(Log, testAsset.TestRoot);
 
            cleanCommand
                .Execute()
                .Should()
                .Pass();
        }
 
        // Related to https://github.com/dotnet/sdk/issues/2233
        // This test will fail if the naive fix for not reading assets file during clean is attempted
        [Fact]
        public void It_can_clean_and_build_without_using_rebuild()
        {
            var testAsset = _testAssetsManager
              .CopyTestAsset("HelloWorld")
              .WithSource();
 
            var cleanAndBuildCommand = new MSBuildCommand(Log, "Clean;Build", testAsset.TestRoot);
 
            cleanAndBuildCommand
                .Execute()
                .Should()
                .Pass();
        }
    }
}