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-02-22 12:45:11 -08:00
const string ExpectedPrefix = "exec <msbuildpath> /m /v:m /t:Publish" ;
[Theory]
[InlineData(new string[] { } , "" ) ]
[InlineData(new string[] { "-f" , "<framework>" } , "/p:TargetFramework=<framework>" ) ]
[InlineData(new string[] { "--framework" , "<framework>" } , "/p:TargetFramework=<framework>" ) ]
[InlineData(new string[] { "-r" , "<runtime>" } , "/p:RuntimeIdentifier=<runtime>" ) ]
[InlineData(new string[] { "--runtime" , "<runtime>" } , "/p:RuntimeIdentifier=<runtime>" ) ]
[InlineData(new string[] { "-o" , "<output>" } , "/p:PublishDir=<output>" ) ]
[InlineData(new string[] { "--output" , "<output>" } , "/p:PublishDir=<output>" ) ]
[InlineData(new string[] { "-c" , "<configuration>" } , "/p:Configuration=<configuration>" ) ]
[InlineData(new string[] { "--configuration" , "<configuration>" } , "/p:Configuration=<configuration>" ) ]
[InlineData(new string[] { "--version-suffix" , "<version-suffix>" } , "/p:VersionSuffix=<version-suffix>" ) ]
2017-03-03 14:27:35 -08:00
[InlineData(new string[] { "--filter" , "<filter>" } , "/p:FilterProjectFiles=<filter>" ) ]
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-02-22 12:45:11 -08:00
PublishCommand . FromArgs ( args , msbuildPath )
2017-03-09 07:35:06 -08:00
. GetProcessStartInfo ( )
. Arguments . Should ( )
. Be ( $"{ExpectedPrefix}{expectedAdditionalArgs}" ) ;
}
[Theory]
[InlineData(new string[] { } , "" ) ]
[InlineData(new string[] { "-f" , "<framework>" } , "/p:TargetFramework=<framework>" ) ]
[InlineData(new string[] { "--framework" , "<framework>" } , "/p:TargetFramework=<framework>" ) ]
[InlineData(new string[] { "-r" , "<runtime>" } , "/p:RuntimeIdentifier=<runtime>" ) ]
[InlineData(new string[] { "--runtime" , "<runtime>" } , "/p:RuntimeIdentifier=<runtime>" ) ]
[InlineData(new string[] { "-o" , "<output>" } , "/p:PublishDir=<output>" ) ]
[InlineData(new string[] { "--output" , "<output>" } , "/p:PublishDir=<output>" ) ]
[InlineData(new string[] { "-c" , "<configuration>" } , "/p:Configuration=<configuration>" ) ]
[InlineData(new string[] { "--configuration" , "<configuration>" } , "/p:Configuration=<configuration>" ) ]
[InlineData(new string[] { "--version-suffix" , "<version-suffix>" } , "/p:VersionSuffix=<version-suffix>" ) ]
[InlineData(new string[] { "--filter" , "<filter>" } , "/p:FilterProjectFiles=<filter>" ) ]
[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 ) ;
output . WriteLine ( result . Diagram ( ) ) ;
result [ "dotnet" ] [ "publish" ]
. OptionValuesToBeForwarded ( )
. Should ( )
. BeEquivalentTo ( expectedArgs ) ;
2017-02-22 10:43:05 -08:00
}
}
2017-03-09 07:35:06 -08:00
}