2017-03-02 21:04:03 -08: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.
2017-02-22 10:43:05 -08:00
using System ;
2017-03-09 07:35:06 -08:00
using FluentAssertions ;
2017-02-22 12:45:11 -08:00
using System.Linq ;
2017-03-09 07:35:06 -08:00
using Microsoft.DotNet.Cli.CommandLine ;
using Microsoft.DotNet.Tools.Publish ;
using Xunit ;
using Xunit.Abstractions ;
2017-02-22 10:43:05 -08:00
namespace Microsoft.DotNet.Cli.MSBuild.Tests
{
public class GivenDotnetPublishInvocation
{
2017-03-09 07:35:06 -08:00
private readonly ITestOutputHelper output ;
public GivenDotnetPublishInvocation ( ITestOutputHelper output )
{
this . output = output ;
}
2017-10-24 15:50:43 -07:00
const string ExpectedPrefix = "exec <msbuildpath> /m /v:m" ;
2017-02-22 12:45:11 -08:00
[Theory]
[InlineData(new string[] { } , "" ) ]
2017-03-10 09:08:25 -08:00
[InlineData(new string[] { "-r" , "<rid>" } , "/p:RuntimeIdentifier=<rid>" ) ]
[InlineData(new string[] { "--runtime" , "<rid>" } , "/p:RuntimeIdentifier=<rid>" ) ]
2017-03-10 10:12:37 -08:00
[InlineData(new string[] { "-o" , "<publishdir>" } , "/p:PublishDir=<publishdir>" ) ]
2017-03-10 09:08:25 -08:00
[InlineData(new string[] { "--output" , "<publishdir>" } , "/p:PublishDir=<publishdir>" ) ]
[InlineData(new string[] { "-c" , "<config>" } , "/p:Configuration=<config>" ) ]
[InlineData(new string[] { "--configuration" , "<config>" } , "/p:Configuration=<config>" ) ]
[InlineData(new string[] { "--version-suffix" , "<versionsuffix>" } , "/p:VersionSuffix=<versionsuffix>" ) ]
2017-04-14 16:08:32 -05:00
[InlineData(new string[] { "--manifest" , "<manifestfiles>" } , "/p:TargetManifestFiles=<manifestfiles>" ) ]
2017-03-09 07:35:06 -08:00
[InlineData(new string[] { "-v" , "minimal" } , "/verbosity:minimal" ) ]
[InlineData(new string[] { "--verbosity" , "minimal" } , "/verbosity:minimal" ) ]
2017-02-22 12:45:11 -08:00
[InlineData(new string[] { "<project>" } , "<project>" ) ]
[InlineData(new string[] { "<project>" , "<extra-args>" } , "<project> <extra-args>" ) ]
public void MsbuildInvocationIsCorrect ( string [ ] args , string expectedAdditionalArgs )
2017-02-22 10:43:05 -08:00
{
2017-02-22 12:45:11 -08:00
expectedAdditionalArgs = ( string . IsNullOrEmpty ( expectedAdditionalArgs ) ? "" : $" {expectedAdditionalArgs}" ) ;
2017-02-22 10:43:05 -08:00
var msbuildPath = "<msbuildpath>" ;
2017-10-24 15:50:43 -07:00
var command = PublishCommand . FromArgs ( args , msbuildPath ) ;
command . SeparateRestoreCommand
. Should ( )
. BeNull ( ) ;
command . GetProcessStartInfo ( )
. Arguments . Should ( )
. Be ( $"{ExpectedPrefix} /restore /t:Publish{expectedAdditionalArgs}" ) ;
}
[Theory]
[InlineData(new string[] { "-f" , "<tfm>" } , "/p:TargetFramework=<tfm>" ) ]
[InlineData(new string[] { "--framework" , "<tfm>" } , "/p:TargetFramework=<tfm>" ) ]
public void MsbuildInvocationIsCorrectForSeparateRestore ( string [ ] args , string expectedAdditionalArgs )
{
expectedAdditionalArgs = ( string . IsNullOrEmpty ( expectedAdditionalArgs ) ? "" : $" {expectedAdditionalArgs}" ) ;
var msbuildPath = "<msbuildpath>" ;
var command = PublishCommand . FromArgs ( args , msbuildPath ) ;
command . SeparateRestoreCommand
. GetProcessStartInfo ( )
. Arguments . Should ( )
. Be ( $"{ExpectedPrefix} /t:Restore" ) ;
command . GetProcessStartInfo ( )
. Arguments . Should ( )
. Be ( $"{ExpectedPrefix} /nologo /t:Publish{expectedAdditionalArgs}" ) ;
2017-03-09 07:35:06 -08:00
}
[Theory]
[InlineData(new string[] { } , "" ) ]
2017-03-10 09:08:25 -08:00
[InlineData(new string[] { "-f" , "<tfm>" } , "/p:TargetFramework=<tfm>" ) ]
[InlineData(new string[] { "--framework" , "<tfm>" } , "/p:TargetFramework=<tfm>" ) ]
[InlineData(new string[] { "-r" , "<rid>" } , "/p:RuntimeIdentifier=<rid>" ) ]
[InlineData(new string[] { "--runtime" , "<rid>" } , "/p:RuntimeIdentifier=<rid>" ) ]
[InlineData(new string[] { "-o" , "<publishdir>" } , "/p:PublishDir=<publishdir>" ) ]
[InlineData(new string[] { "--output" , "<publishdir>" } , "/p:PublishDir=<publishdir>" ) ]
[InlineData(new string[] { "-c" , "<config>" } , "/p:Configuration=<config>" ) ]
[InlineData(new string[] { "--configuration" , "<config>" } , "/p:Configuration=<config>" ) ]
[InlineData(new string[] { "--version-suffix" , "<versionsuffix>" } , "/p:VersionSuffix=<versionsuffix>" ) ]
2017-04-14 16:08:32 -05:00
[InlineData(new string[] { "--manifest" , "<manifestfiles>" } , "/p:TargetManifestFiles=<manifestfiles>" ) ]
2017-03-09 07:35:06 -08:00
[InlineData(new string[] { "-v" , "minimal" } , "/verbosity:minimal" ) ]
[InlineData(new string[] { "--verbosity" , "minimal" } , "/verbosity:minimal" ) ]
public void OptionForwardingIsCorrect ( string [ ] args , string expectedAdditionalArgs )
{
var expectedArgs = expectedAdditionalArgs . Split ( ' ' , StringSplitOptions . RemoveEmptyEntries ) ;
var parser = Parser . Instance ;
var result = parser . ParseFrom ( "dotnet publish" , args ) ;
result [ "dotnet" ] [ "publish" ]
. OptionValuesToBeForwarded ( )
. Should ( )
. BeEquivalentTo ( expectedArgs ) ;
2017-02-22 10:43:05 -08:00
}
}
2017-03-09 07:35:06 -08:00
}