Adding dotnet remove project tests
This commit is contained in:
parent
07ddddfa88
commit
20f2242947
15 changed files with 643 additions and 178 deletions
|
@ -7,7 +7,6 @@
|
|||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
|
||||
<AssemblyName>dotnet-add-proj.Tests</AssemblyName>
|
||||
<PackageTargetFallback Condition=" '$(TargetFramework)' == 'netcoreapp1.0' ">$(PackageTargetFallback);dotnet5.4;portable-net451+win8</PackageTargetFallback>
|
||||
<DefineConstants>$(DefineConstants);DISABLE_TRACE</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="**\*.cs" />
|
||||
|
@ -21,10 +20,6 @@
|
|||
<ProjectReference Include="..\..\src\Microsoft.DotNet.TestFramework\Microsoft.DotNet.TestFramework.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net46' ">
|
||||
<Reference Include="System.Runtime" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Sdk">
|
||||
<Version>$(CLI_NETSDK_Version)</Version>
|
||||
|
|
259
test/dotnet-remove-proj.Tests/GivenDotnetRemoveProj.cs
Normal file
259
test/dotnet-remove-proj.Tests/GivenDotnetRemoveProj.cs
Normal file
|
@ -0,0 +1,259 @@
|
|||
// 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.Tools.Test.Utilities;
|
||||
using System;
|
||||
using System.IO;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.DotNet.Cli.Remove.P2P.Tests
|
||||
{
|
||||
public class GivenDotnetRemoveProj : TestBase
|
||||
{
|
||||
private const string HelpText = @".NET Remove Project from Solution Command
|
||||
|
||||
Usage: dotnet remove <PROJECT_OR_SOLUTION> project [options] [args]
|
||||
|
||||
Arguments:
|
||||
<PROJECT_OR_SOLUTION> The project or solution to operation on. If a file is not specified, the current directory is searched.
|
||||
|
||||
Options:
|
||||
-h|--help Show help information
|
||||
|
||||
Args:
|
||||
Projects to remove from a solution
|
||||
";
|
||||
|
||||
[Theory]
|
||||
[InlineData("--help")]
|
||||
[InlineData("-h")]
|
||||
public void WhenHelpOptionIsPassedItPrintsUsage(string helpArg)
|
||||
{
|
||||
var cmd = new DotnetCommand()
|
||||
.ExecuteWithCapturedOutput($"remove project {helpArg}");
|
||||
cmd.Should().Pass();
|
||||
cmd.StdOut.Should().Contain(HelpText);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenTooManyArgumentsArePassedItPrintsError()
|
||||
{
|
||||
var cmd = new DotnetCommand()
|
||||
.ExecuteWithCapturedOutput("remove one.sln two.sln three.sln project");
|
||||
cmd.Should().Fail();
|
||||
cmd.StdErr.Should().Contain("Unrecognized command or argument 'two.sln'");
|
||||
cmd.StdOut.Should().Contain("Specify --help for a list of available options and commands.") ;
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("idontexist.sln")]
|
||||
[InlineData("ihave?invalidcharacters")]
|
||||
[InlineData("ihaveinv@lidcharacters")]
|
||||
[InlineData("ihaveinvalid/characters")]
|
||||
[InlineData("ihaveinvalidchar\\acters")]
|
||||
public void WhenNonExistingSolutionIsPassedItPrintsErrorAndUsage(string solutionName)
|
||||
{
|
||||
var cmd = new DotnetCommand()
|
||||
.ExecuteWithCapturedOutput($"remove {solutionName} project p.csproj");
|
||||
cmd.Should().Fail();
|
||||
cmd.StdErr.Should().Contain($"Could not find solution or directory `{solutionName}`.");
|
||||
cmd.StdOut.Should().Contain(HelpText);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenInvalidSolutionIsPassedItPrintsErrorAndUsage()
|
||||
{
|
||||
var projectDirectory = TestAssets
|
||||
.Get("InvalidSolution")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles()
|
||||
.Root
|
||||
.FullName;
|
||||
|
||||
var projectToRemove = Path.Combine("Lib", "Lib.csproj");
|
||||
var cmd = new DotnetCommand()
|
||||
.WithWorkingDirectory(projectDirectory)
|
||||
.ExecuteWithCapturedOutput($"remove InvalidSolution.sln project {projectToRemove}");
|
||||
cmd.Should().Fail();
|
||||
cmd.StdErr.Should().Contain("Invalid solution `InvalidSolution.sln`.");
|
||||
cmd.StdOut.Should().Contain(HelpText);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenInvalidSolutionIsFoundItPrintsErrorAndUsage()
|
||||
{
|
||||
var projectDirectory = TestAssets
|
||||
.Get("InvalidSolution")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles()
|
||||
.Root
|
||||
.FullName;
|
||||
|
||||
var solutionPath = Path.Combine(projectDirectory, "InvalidSolution.sln");
|
||||
var projectToRemove = Path.Combine("Lib", "Lib.csproj");
|
||||
var cmd = new DotnetCommand()
|
||||
.WithWorkingDirectory(projectDirectory)
|
||||
.ExecuteWithCapturedOutput($"remove project {projectToRemove}");
|
||||
cmd.Should().Fail();
|
||||
cmd.StdErr.Should().Contain($"Invalid solution `{solutionPath}`.");
|
||||
cmd.StdOut.Should().Contain(HelpText);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenNoProjectIsPassedItPrintsErrorAndUsage()
|
||||
{
|
||||
var projectDirectory = TestAssets
|
||||
.Get("TestAppWithSlnAndCsprojFiles")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles()
|
||||
.Root
|
||||
.FullName;
|
||||
|
||||
var cmd = new DotnetCommand()
|
||||
.WithWorkingDirectory(projectDirectory)
|
||||
.ExecuteWithCapturedOutput(@"remove App.sln project");
|
||||
cmd.Should().Fail();
|
||||
cmd.StdErr.Should().Contain("You must specify at least one project to remove.");
|
||||
cmd.StdOut.Should().Contain(HelpText);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenNoSolutionExistsInTheDirectoryItPrintsErrorAndUsage()
|
||||
{
|
||||
var projectDirectory = TestAssets
|
||||
.Get("TestAppWithSlnAndCsprojFiles")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles()
|
||||
.Root
|
||||
.FullName;
|
||||
|
||||
var solutionPath = Path.Combine(projectDirectory, "App");
|
||||
var cmd = new DotnetCommand()
|
||||
.WithWorkingDirectory(solutionPath)
|
||||
.ExecuteWithCapturedOutput(@"remove project App.csproj");
|
||||
cmd.Should().Fail();
|
||||
cmd.StdErr.Should().Contain($"Specified solution file {solutionPath + Path.DirectorySeparatorChar} does not exist, or there is no solution file in the directory.");
|
||||
cmd.StdOut.Should().Contain(HelpText);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenMoreThanOneSolutionExistsInTheDirectoryItPrintsErrorAndUsage()
|
||||
{
|
||||
var projectDirectory = TestAssets
|
||||
.Get("TestAppWithMultipleSlnFiles")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles()
|
||||
.Root
|
||||
.FullName;
|
||||
|
||||
var projectToRemove = Path.Combine("Lib", "Lib.csproj");
|
||||
var cmd = new DotnetCommand()
|
||||
.WithWorkingDirectory(projectDirectory)
|
||||
.ExecuteWithCapturedOutput($"remove project {projectToRemove}");
|
||||
cmd.Should().Fail();
|
||||
cmd.StdErr.Should().Contain($"Found more than one solution file in {projectDirectory + Path.DirectorySeparatorChar}. Please specify which one to use.");
|
||||
cmd.StdOut.Should().Contain(HelpText);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenPassedAReferenceNotInSlnItPrintsStatus()
|
||||
{
|
||||
var projectDirectory = TestAssets
|
||||
.Get("TestAppWithSlnAndExistingCsprojReferences")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles()
|
||||
.Root
|
||||
.FullName;
|
||||
|
||||
var solutionPath = Path.Combine(projectDirectory, "App.sln");
|
||||
var contentBefore = File.ReadAllText(solutionPath);
|
||||
var cmd = new DotnetCommand()
|
||||
.WithWorkingDirectory(projectDirectory)
|
||||
.ExecuteWithCapturedOutput("remove project referenceDoesNotExistInSln.csproj");
|
||||
cmd.Should().Pass();
|
||||
cmd.StdOut.Should().Contain("Project reference `referenceDoesNotExistInSln.csproj` could not be found.");
|
||||
File.ReadAllText(solutionPath)
|
||||
.Should().Be(contentBefore);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenPassedAReferenceItRemovesTheReferenceButNotOtherReferences()
|
||||
{
|
||||
var projectDirectory = TestAssets
|
||||
.Get("TestAppWithSlnAndExistingCsprojReferences")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles()
|
||||
.Root
|
||||
.FullName;
|
||||
|
||||
var solutionPath = Path.Combine(projectDirectory, "App.sln");
|
||||
SlnFile slnFile = SlnFile.Read(solutionPath);
|
||||
slnFile.Projects.Count.Should().Be(2);
|
||||
|
||||
var projectToRemove = Path.Combine("Lib", "Lib.csproj");
|
||||
var cmd = new DotnetCommand()
|
||||
.WithWorkingDirectory(projectDirectory)
|
||||
.ExecuteWithCapturedOutput($"remove project {projectToRemove}");
|
||||
cmd.Should().Pass();
|
||||
cmd.StdOut.Should().Contain($"Project reference `{projectToRemove}` removed.");
|
||||
|
||||
slnFile = SlnFile.Read(solutionPath);
|
||||
slnFile.Projects.Count.Should().Be(1);
|
||||
slnFile.Projects[0].FilePath.Should().Be(@"App\App.csproj");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenDuplicateReferencesArePresentItRemovesThemAll()
|
||||
{
|
||||
var projectDirectory = TestAssets
|
||||
.Get("TestAppWithSlnAndDuplicateProjectReferences")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles()
|
||||
.Root
|
||||
.FullName;
|
||||
|
||||
var solutionPath = Path.Combine(projectDirectory, "App.sln");
|
||||
SlnFile slnFile = SlnFile.Read(solutionPath);
|
||||
slnFile.Projects.Count.Should().Be(3);
|
||||
|
||||
var projectToRemove = Path.Combine("Lib", "Lib.csproj");
|
||||
var cmd = new DotnetCommand()
|
||||
.WithWorkingDirectory(projectDirectory)
|
||||
.ExecuteWithCapturedOutput($"remove project {projectToRemove}");
|
||||
cmd.Should().Pass();
|
||||
cmd.StdOut.Should().Contain($"Project reference `{projectToRemove}` removed.");
|
||||
|
||||
slnFile = SlnFile.Read(solutionPath);
|
||||
slnFile.Projects.Count.Should().Be(1);
|
||||
slnFile.Projects[0].FilePath.Should().Be(@"App\App.csproj");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenPassedMultipleReferencesAndOneOfThemDoesNotExistItRemovesTheOneThatExists()
|
||||
{
|
||||
var projectDirectory = TestAssets
|
||||
.Get("TestAppWithSlnAndExistingCsprojReferences")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles()
|
||||
.Root
|
||||
.FullName;
|
||||
|
||||
var solutionPath = Path.Combine(projectDirectory, "App.sln");
|
||||
SlnFile slnFile = SlnFile.Read(solutionPath);
|
||||
slnFile.Projects.Count.Should().Be(2);
|
||||
|
||||
var projectToRemove = Path.Combine("Lib", "Lib.csproj");
|
||||
var cmd = new DotnetCommand()
|
||||
.WithWorkingDirectory(projectDirectory)
|
||||
.ExecuteWithCapturedOutput($"remove project idontexist.csproj {projectToRemove} idontexisteither.csproj");
|
||||
cmd.Should().Pass();
|
||||
cmd.StdOut.Should().Contain($"Project reference `{projectToRemove}` removed.");
|
||||
|
||||
slnFile = SlnFile.Read(solutionPath);
|
||||
slnFile.Projects.Count.Should().Be(1);
|
||||
slnFile.Projects[0].FilePath.Should().Be(@"App\App.csproj");
|
||||
}
|
||||
}
|
||||
}
|
1
test/dotnet-remove-proj.Tests/MSBuild.exe
Normal file
1
test/dotnet-remove-proj.Tests/MSBuild.exe
Normal file
|
@ -0,0 +1 @@
|
|||
https://github.com/Microsoft/msbuild/issues/927
|
1
test/dotnet-remove-proj.Tests/MSBuild.exe.config
Normal file
1
test/dotnet-remove-proj.Tests/MSBuild.exe.config
Normal file
|
@ -0,0 +1 @@
|
|||
https://github.com/Microsoft/msbuild/issues/927
|
|
@ -0,0 +1,44 @@
|
|||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />
|
||||
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp1.0</TargetFramework>
|
||||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
|
||||
<AssemblyName>dotnet-remove-proj.Tests</AssemblyName>
|
||||
<PackageTargetFallback Condition=" '$(TargetFramework)' == 'netcoreapp1.0' ">$(PackageTargetFallback);dotnet5.4;portable-net451+win8</PackageTargetFallback>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="**\*.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Microsoft.DotNet.Tools.Tests.Utilities\Microsoft.DotNet.Tools.Tests.Utilities.csproj" />
|
||||
<ProjectReference Include="..\..\src\Microsoft.DotNet.Cli.Sln.Internal\Microsoft.DotNet.Cli.Sln.Internal.csproj" />
|
||||
<ProjectReference Include="..\..\src\Microsoft.DotNet.Cli.Utils\Microsoft.DotNet.Cli.Utils.csproj" />
|
||||
<ProjectReference Include="..\..\src\Microsoft.DotNet.InternalAbstractions\Microsoft.DotNet.InternalAbstractions.csproj" />
|
||||
<ProjectReference Include="..\..\src\Microsoft.DotNet.TestFramework\Microsoft.DotNet.TestFramework.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Sdk">
|
||||
<Version>$(CLI_NETSDK_Version)</Version>
|
||||
<PrivateAssets>All</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk">
|
||||
<Version>15.0.0-preview-20161024-02</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="xunit.runner.visualstudio">
|
||||
<Version>2.2.0-beta4-build1194</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NETCore.App">
|
||||
<Version>1.0.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="xunit">
|
||||
<Version>2.2.0-beta4-build3444</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
Loading…
Add table
Add a link
Reference in a new issue