File: MSBuildProjTests.cs
Web Access
Project: src\src\dotnet-svcutil\lib\tests\src\dotnet-svcutil-lib.Tests.csproj (dotnet-svcutil-lib.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Tools.ServiceModel.Svcutil;
using Xunit;
 
namespace SvcutilTest
{
    public class MSBuildProjTests
    {
        private readonly string _testDir = ClassFixture.FindRepositoryRoot() + "/artifacts/TestOutput";
        public string TestDir
        {
            get
            {
                if (!Directory.Exists(_testDir))
                {
                    Directory.CreateDirectory(_testDir);
                }
 
                return _testDir;
            }
        }
 
        [Fact]
        public async Task ParseAsync_ValidProjectWithPackageReference_ShouldParseSuccessfully()
        {
            var projectText = @"<Project Sdk=""Microsoft.NET.Sdk"">
  <PropertyGroup>
    <TargetFrameworks>net6.0</TargetFrameworks>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include=""xunit"" Version=""2.4.1"" />
  </ItemGroup>
</Project>";
 
            var build = await MSBuildProj.ParseAsync(projectText, TestDir + "/MSBuildProjTests/Sample", null, CancellationToken.None);
 
            Assert.NotNull(build);
            Assert.NotEmpty(build.Dependencies);
            Assert.Contains(build.Dependencies, x => x.Name == "xunit" && x.Version == "2.4.1");
        }
 
        [Fact]
        public async Task ParseAsync_ProjectWithUpdatePackageReference_ShouldSkipUpdatePackageAndParseRestOfProjectSuccessfully()
        {
            var projectText = @"<Project Sdk=""Microsoft.NET.Sdk"">
  <PropertyGroup>
    <TargetFrameworks>netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include=""xunit"" Version=""2.4.1"" />
    <PackageReference Update=""NuGet.Versioning"" Version=""3.5.0"" />
  </ItemGroup>
</Project>";
 
            var build = await MSBuildProj.ParseAsync(projectText, TestDir + "/MSBuildProjTests/Sample", null, CancellationToken.None);
 
            Assert.NotNull(build);
            Assert.NotEmpty(build.Dependencies);
            Assert.Contains(build.Dependencies, x => x.Name == "xunit" && x.Version == "2.4.1");
        }
 
        [Fact]
        public async Task ParseAsync_ValidProjectWithDotNetCliToolReference_ShouldParseSuccessfully()
        {
            var projectText = @"<Project Sdk=""Microsoft.NET.Sdk"">
  <PropertyGroup>
    <TargetFrameworks>netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
  </PropertyGroup>
  <ItemGroup>
    <DotNetCliToolReference Include=""xunit"" Version=""2.4.1"" />
  </ItemGroup>
</Project>";
 
            var build = await MSBuildProj.ParseAsync(projectText, TestDir + "/MSBuildProjTests/Sample", null, CancellationToken.None);
 
            Assert.NotNull(build);
            Assert.NotEmpty(build.Dependencies);
            Assert.Contains(build.Dependencies, x => x.Name == "xunit" && x.Version == "2.4.1");
        }
 
        [Fact]
        public async Task ParseAsync_ProjectWithUpdateDotNetCliToolReference_ShouldSkipUpdateReferencendParseRestOfProjectSuccessfully()
        {
            var projectText = @"<Project Sdk=""Microsoft.NET.Sdk"">
  <PropertyGroup>
    <TargetFrameworks>netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
  </PropertyGroup>
  <ItemGroup>
    <DotNetCliToolReference Include=""xunit"" Version=""2.4.1"" />
    <DotNetCliToolReference Update=""NuGet.Versioning"" Version=""3.5.0"" />
  </ItemGroup>
</Project>";
 
            var build = await MSBuildProj.ParseAsync(projectText, TestDir + "/MSBuildProjTests/Sample", null, CancellationToken.None);
 
            Assert.NotNull(build);
            Assert.NotEmpty(build.Dependencies);
            Assert.Contains(build.Dependencies, x => x.Name == "xunit" && x.Version == "2.4.1");
        }
    }
}