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 ;
}
2018-04-02 15:14:32 -07:00
const string ExpectedPrefix = "exec <msbuildpath> -maxcpucount -verbosity:m" ;
2017-02-22 12:45:11 -08:00
[Theory]
[InlineData(new string[] { } , "" ) ]
2018-04-02 15:14:32 -07:00
[InlineData(new string[] { "-r" , "<rid>" } , "-property:RuntimeIdentifier=<rid>" ) ]
[InlineData(new string[] { "--runtime" , "<rid>" } , "-property:RuntimeIdentifier=<rid>" ) ]
[InlineData(new string[] { "-o" , "<publishdir>" } , "-property:PublishDir=<publishdir>" ) ]
[InlineData(new string[] { "--output" , "<publishdir>" } , "-property:PublishDir=<publishdir>" ) ]
[InlineData(new string[] { "-c" , "<config>" } , "-property:Configuration=<config>" ) ]
[InlineData(new string[] { "--configuration" , "<config>" } , "-property:Configuration=<config>" ) ]
[InlineData(new string[] { "--version-suffix" , "<versionsuffix>" } , "-property:VersionSuffix=<versionsuffix>" ) ]
[InlineData(new string[] { "--manifest" , "<manifestfiles>" } , "-property:TargetManifestFiles=<manifestfiles>" ) ]
2018-04-02 14:44:43 -07: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 ( )
2018-04-02 15:14:32 -07:00
. Be ( $"{ExpectedPrefix} -restore -target:Publish{expectedAdditionalArgs}" ) ;
2017-10-24 15:50:43 -07:00
}
[Theory]
2018-04-02 15:14:32 -07:00
[InlineData(new string[] { "-f" , "<tfm>" } , "-property:TargetFramework=<tfm>" ) ]
[InlineData(new string[] { "--framework" , "<tfm>" } , "-property:TargetFramework=<tfm>" ) ]
2017-10-24 15:50:43 -07:00
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 ( )
2018-04-02 15:14:32 -07:00
. Be ( $"{ExpectedPrefix} -target:Restore" ) ;
2017-10-24 15:50:43 -07:00
command . GetProcessStartInfo ( )
. Arguments . Should ( )
2018-04-02 15:14:32 -07:00
. Be ( $"{ExpectedPrefix} -nologo -target:Publish{expectedAdditionalArgs}" ) ;
2017-03-09 07:35:06 -08:00
}
2018-04-04 15:02:36 -07:00
[Fact]
public void MsbuildInvocationIsCorrectForNoBuild ( )
{
var msbuildPath = "<msbuildpath>" ;
var command = PublishCommand . FromArgs ( new [ ] { "--no-build" } , msbuildPath ) ;
command . SeparateRestoreCommand
. Should ( )
. BeNull ( ) ;
// NOTE --no-build implies no-restore hence no -restore argument to msbuild below.
command . GetProcessStartInfo ( )
. Arguments
. Should ( )
. Be ( $"{ExpectedPrefix} -target:Publish -property:NoBuild=true" ) ;
}
2017-03-09 07:35:06 -08:00
[Theory]
[InlineData(new string[] { } , "" ) ]
2018-04-02 15:14:32 -07:00
[InlineData(new string[] { "-f" , "<tfm>" } , "-property:TargetFramework=<tfm>" ) ]
[InlineData(new string[] { "--framework" , "<tfm>" } , "-property:TargetFramework=<tfm>" ) ]
[InlineData(new string[] { "-r" , "<rid>" } , "-property:RuntimeIdentifier=<rid>" ) ]
[InlineData(new string[] { "--runtime" , "<rid>" } , "-property:RuntimeIdentifier=<rid>" ) ]
[InlineData(new string[] { "-o" , "<publishdir>" } , "-property:PublishDir=<publishdir>" ) ]
[InlineData(new string[] { "--output" , "<publishdir>" } , "-property:PublishDir=<publishdir>" ) ]
[InlineData(new string[] { "-c" , "<config>" } , "-property:Configuration=<config>" ) ]
[InlineData(new string[] { "--configuration" , "<config>" } , "-property:Configuration=<config>" ) ]
[InlineData(new string[] { "--version-suffix" , "<versionsuffix>" } , "-property:VersionSuffix=<versionsuffix>" ) ]
[InlineData(new string[] { "--manifest" , "<manifestfiles>" } , "-property:TargetManifestFiles=<manifestfiles>" ) ]
2018-04-02 14:44:43 -07:00
[InlineData(new string[] { "-v" , "minimal" } , "-verbosity:minimal" ) ]
[InlineData(new string[] { "--verbosity" , "minimal" } , "-verbosity:minimal" ) ]
2018-04-04 15:02:36 -07:00
[InlineData(new string[] { "--no-build" } , "-property:NoBuild=true" ) ]
2017-03-09 07:35:06 -08:00
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
}
}
2018-04-04 15:02:36 -07:00
}