2016-12-20 23:04:01 +00:00
|
|
|
|
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
|
|
|
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
|
|
|
|
|
|
|
|
using FluentAssertions;
|
|
|
|
|
using Microsoft.DotNet.Cli.Sln.Internal;
|
|
|
|
|
using Microsoft.DotNet.TestFramework;
|
|
|
|
|
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using Xunit;
|
|
|
|
|
|
|
|
|
|
namespace Microsoft.DotNet.Migration.Tests
|
|
|
|
|
{
|
|
|
|
|
public class GivenThatIWantToMigrateSolutions : TestBase
|
|
|
|
|
{
|
|
|
|
|
[Fact]
|
|
|
|
|
public void ItMigratesAndBuildsSln()
|
|
|
|
|
{
|
|
|
|
|
MigrateAndBuild(
|
|
|
|
|
"NonRestoredTestProjects",
|
2017-01-05 22:04:57 +00:00
|
|
|
|
"PJAppWithSlnAndXprojRefs");
|
2016-12-20 23:04:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void WhenDirectoryAlreadyContainsCsprojFileItMigratesAndBuildsSln()
|
|
|
|
|
{
|
|
|
|
|
MigrateAndBuild(
|
|
|
|
|
"NonRestoredTestProjects",
|
2017-01-05 22:04:57 +00:00
|
|
|
|
"PJAppWithSlnAndXprojRefsAndUnrelatedCsproj");
|
2016-12-20 23:04:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void WhenXprojReferencesCsprojAndSlnDoesNotItMigratesAndBuildsSln()
|
|
|
|
|
{
|
|
|
|
|
MigrateAndBuild(
|
|
|
|
|
"NonRestoredTestProjects",
|
2017-01-05 22:04:57 +00:00
|
|
|
|
"PJAppWithSlnAndXprojRefThatRefsCsprojWhereSlnDoesNotRefCsproj");
|
2016-12-20 23:04:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-01-05 22:04:57 +00:00
|
|
|
|
private void MigrateAndBuild(string groupName, string projectName)
|
2016-12-20 23:04:01 +00:00
|
|
|
|
{
|
|
|
|
|
var projectDirectory = TestAssets
|
|
|
|
|
.Get(groupName, projectName)
|
|
|
|
|
.CreateInstance()
|
|
|
|
|
.WithSourceFiles()
|
|
|
|
|
.Root;
|
|
|
|
|
|
|
|
|
|
var solutionRelPath = Path.Combine("TestApp", "TestApp.sln");
|
|
|
|
|
|
|
|
|
|
new DotnetCommand()
|
|
|
|
|
.WithWorkingDirectory(projectDirectory)
|
|
|
|
|
.Execute($"migrate \"{solutionRelPath}\"")
|
|
|
|
|
.Should().Pass();
|
|
|
|
|
|
|
|
|
|
new DotnetCommand()
|
|
|
|
|
.WithWorkingDirectory(projectDirectory)
|
2017-01-03 21:06:51 +00:00
|
|
|
|
.Execute($"restore \"{solutionRelPath}\"")
|
2016-12-20 23:04:01 +00:00
|
|
|
|
.Should().Pass();
|
|
|
|
|
|
2017-01-05 04:32:09 +00:00
|
|
|
|
//ISSUE: https://github.com/dotnet/cli/issues/5205
|
2016-12-21 22:06:06 +00:00
|
|
|
|
//new DotnetCommand()
|
|
|
|
|
// .WithWorkingDirectory(projectDirectory)
|
|
|
|
|
// .Execute($"build \"{solutionRelPath}\"")
|
|
|
|
|
// .Should().Pass();
|
2016-12-20 23:04:01 +00:00
|
|
|
|
|
|
|
|
|
SlnFile slnFile = SlnFile.Read(Path.Combine(projectDirectory.FullName, solutionRelPath));
|
2017-01-17 21:45:48 +00:00
|
|
|
|
|
|
|
|
|
slnFile.ProductDescription.Should().Be("Visual Studio 15"); ;
|
|
|
|
|
slnFile.VisualStudioVersion.Should().Be("15.0.26114.2");
|
|
|
|
|
slnFile.MinimumVisualStudioVersion.Should().Be("10.0.40219.1");
|
|
|
|
|
|
2017-01-05 04:32:09 +00:00
|
|
|
|
var nonSolutionFolderProjects = slnFile.Projects
|
|
|
|
|
.Where(p => p.TypeGuid != ProjectTypeGuids.SolutionFolderGuid);
|
2016-12-20 23:04:01 +00:00
|
|
|
|
|
2017-01-05 04:32:09 +00:00
|
|
|
|
nonSolutionFolderProjects.Count().Should().Be(3);
|
|
|
|
|
|
|
|
|
|
var slnProject = nonSolutionFolderProjects.Where((p) => p.Name == "TestApp").Single();
|
2016-12-20 23:04:01 +00:00
|
|
|
|
slnProject.TypeGuid.Should().Be(ProjectTypeGuids.CSharpProjectTypeGuid);
|
|
|
|
|
slnProject.FilePath.Should().Be("TestApp.csproj");
|
|
|
|
|
|
2017-01-05 04:32:09 +00:00
|
|
|
|
slnProject = nonSolutionFolderProjects.Where((p) => p.Name == "TestLibrary").Single();
|
2016-12-20 23:04:01 +00:00
|
|
|
|
slnProject.TypeGuid.Should().Be(ProjectTypeGuids.CSharpProjectTypeGuid);
|
|
|
|
|
slnProject.FilePath.Should().Be(Path.Combine("..", "TestLibrary", "TestLibrary.csproj"));
|
|
|
|
|
|
2017-01-05 04:32:09 +00:00
|
|
|
|
slnProject = nonSolutionFolderProjects.Where((p) => p.Name == "subdir").Single();
|
2017-01-05 22:04:57 +00:00
|
|
|
|
//ISSUE: https://github.com/dotnet/sdk/issues/522
|
|
|
|
|
//Once we have that change migrate will always burn in the C# guid
|
|
|
|
|
//slnProject.TypeGuid.Should().Be(ProjectTypeGuids.CSharpProjectTypeGuid);
|
2016-12-20 23:04:01 +00:00
|
|
|
|
slnProject.FilePath.Should().Be(Path.Combine("src", "subdir", "subdir.csproj"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|