2017-02-14 10:41:58 -08:00
using Microsoft.DotNet.Tools.Build ;
using FluentAssertions ;
using Xunit ;
2017-02-15 10:38:41 -08:00
using WindowsOnlyFactAttribute = Microsoft . DotNet . Tools . Test . Utilities . WindowsOnlyFactAttribute ;
using NonWindowsOnlyFactAttribute = Microsoft . DotNet . Tools . Test . Utilities . NonWindowsOnlyFactAttribute ;
using System.Collections.Generic ;
2017-02-14 10:41:58 -08:00
namespace Microsoft.DotNet.Cli.MSBuild.Tests
{
public class GivenDotnetBuildInvocation
{
2017-02-14 11:38:01 -08:00
[Theory]
[InlineData(new string[] { } , @"exec <msbuildpath> /m /v:m /t:Build /clp:Summary" ) ]
[InlineData(new string[] { "-o" , "foo" } , @"exec <msbuildpath> /m /v:m /t:Build /p:OutputPath=foo /clp:Summary" ) ]
[InlineData(new string[] { "--output" , "foo" } , @"exec <msbuildpath> /m /v:m /t:Build /p:OutputPath=foo /clp:Summary" ) ]
[InlineData(new string[] { "-o" , "foo1 foo2" } , @"exec <msbuildpath> /m /v:m /t:Build ""/p:OutputPath=foo1 foo2"" /clp:Summary" ) ]
2017-02-14 16:23:33 -08:00
[InlineData(new string[] { "--no-incremental" } , @"exec <msbuildpath> /m /v:m /t:Rebuild /clp:Summary" ) ]
[InlineData(new string[] { "-f" , "framework" } , @"exec <msbuildpath> /m /v:m /t:Build /p:TargetFramework=framework /clp:Summary" ) ]
[InlineData(new string[] { "--framework" , "framework" } , @"exec <msbuildpath> /m /v:m /t:Build /p:TargetFramework=framework /clp:Summary" ) ]
[InlineData(new string[] { "-r" , "runtime" } , @"exec <msbuildpath> /m /v:m /t:Build /p:RuntimeIdentifier=runtime /clp:Summary" ) ]
[InlineData(new string[] { "--runtime" , "runtime" } , @"exec <msbuildpath> /m /v:m /t:Build /p:RuntimeIdentifier=runtime /clp:Summary" ) ]
[InlineData(new string[] { "-c" , "configuration" } , @"exec <msbuildpath> /m /v:m /t:Build /p:Configuration=configuration /clp:Summary" ) ]
[InlineData(new string[] { "--configuration" , "configuration" } , @"exec <msbuildpath> /m /v:m /t:Build /p:Configuration=configuration /clp:Summary" ) ]
[InlineData(new string[] { "--version-suffix" , "mysuffix" } , @"exec <msbuildpath> /m /v:m /t:Build /p:VersionSuffix=mysuffix /clp:Summary" ) ]
[InlineData(new string[] { "--no-dependencies" } , @"exec <msbuildpath> /m /v:m /t:Build /p:BuildProjectReferences=false /clp:Summary" ) ]
[InlineData(new string[] { "-v" , "verbosity" } , @"exec <msbuildpath> /m /v:m /t:Build /verbosity:verbosity /clp:Summary" ) ]
[InlineData(new string[] { "--verbosity" , "verbosity" } , @"exec <msbuildpath> /m /v:m /t:Build /verbosity:verbosity /clp:Summary" ) ]
[InlineData(new string[] { "--no-incremental" , "-o" , "myoutput" , "-r" , "myruntime" , "-v" , "diag" } , @"exec <msbuildpath> /m /v:m /t:Rebuild /p:OutputPath=myoutput /p:RuntimeIdentifier=myruntime /verbosity:diag /clp:Summary" ) ]
public void WhenArgsArePassedThenMsbuildInvocationIsCorrect ( string [ ] args , string expectedCommand )
2017-02-14 10:41:58 -08:00
{
2017-02-14 11:38:01 -08:00
var msbuildPath = "<msbuildpath>" ;
BuildCommand . FromArgs ( args , msbuildPath )
. GetProcessStartInfo ( ) . Arguments . Should ( ) . Be ( expectedCommand ) ;
2017-02-14 10:41:58 -08:00
}
2017-02-15 10:38:41 -08:00
[WindowsOnlyFact]
public void WhenInvokingBuildCommandOnWindowsTheDotnetIsExecuted ( )
{
var msbuildPath = "<msbuildpath>" ;
BuildCommand . FromArgs ( new string [ 0 ] , msbuildPath )
. GetProcessStartInfo ( ) . FileName . Should ( ) . Be ( "dotnet.exe" ) ;
}
[NonWindowsOnlyFact]
public void WhenInvokingBuildCommandOnNonWindowsTheDotnetIsExecuted ( )
{
var msbuildPath = "<msbuildpath>" ;
BuildCommand . FromArgs ( new string [ 0 ] , msbuildPath )
. GetProcessStartInfo ( ) . FileName . Should ( ) . Be ( "dotnet" ) ;
}
2017-02-15 12:28:13 -08:00
[Theory]
[InlineData("MSBuildExtensionsPath", "(?i)[\\/\\\\] netcoreapp [ 0 - 9 ] \ \ . [ 0 - 9 ] ( [ \ \ / \ \ \ \ ] | $ ) ")]
[InlineData("CscToolExe", "(?i)[\\/\\\\] ( run ) ? csc ( \ \ . | $ ) ")]
[InlineData("MSBuildSDKsPath", "(?i)[\\/\\\\] \ \ d \ \ . \ \ d \ \ . \ \ d \ \ - [ a - z ] + \ \ - \ \ d + [ \ \ / \ \ \ \ ] sdks ( \ \ / | \ \ \ \ | $ ) ")]
[InlineData("DOTNET_CLI_TELEMETRY_SESSIONID", "(^$|\\d+)")]
public void WhenInvokingBuildCommandItSetsEnvironmentVariables ( string envVarName , string envVarPattern )
2017-02-15 10:38:41 -08:00
{
var msbuildPath = "<msbuildpath>" ;
var startInfo = BuildCommand . FromArgs ( new string [ 0 ] , msbuildPath ) . GetProcessStartInfo ( ) ;
2017-02-15 12:28:13 -08:00
startInfo . Environment . ContainsKey ( envVarName ) . Should ( ) . BeTrue ( ) ;
( startInfo . Environment [ envVarName ] ? ? "" ) . Should ( ) . MatchRegex ( envVarPattern ) ;
2017-02-15 10:38:41 -08:00
}
[Fact]
public void WhenInvokingBuildCommandItDoesNotSetCurrentWorkingDirectory ( )
{
var msbuildPath = "<msbuildpath>" ;
var startInfo = BuildCommand . FromArgs ( new string [ 0 ] , msbuildPath )
. GetProcessStartInfo ( ) . WorkingDirectory . Should ( ) . Be ( "" ) ;
}
2017-02-14 10:41:58 -08:00
}
}