2016-10-27 18:46:43 -07: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.
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Linq ;
using System.Runtime.CompilerServices ;
using System.Threading.Tasks ;
using Microsoft.DotNet.Cli.Utils ;
namespace Microsoft.DotNet.TestFramework
{
public class TestAssets
{
private DirectoryInfo _root ;
2017-01-06 01:40:26 -08:00
private FileInfo _dotnetCsprojExe ;
private FileInfo _dotnetProjectJsonExe ;
private const string ProjectJsonSearchPattern = "project.json" ;
private const string CsprojSearchPattern = "*.csproj" ;
public TestAssets ( DirectoryInfo assetsRoot , FileInfo dotnetCsprojExe , FileInfo dotnetProjectJsonExe )
2016-10-27 18:46:43 -07:00
{
2017-01-06 01:40:26 -08:00
if ( assetsRoot = = null )
{
throw new ArgumentNullException ( nameof ( assetsRoot ) ) ;
}
if ( dotnetCsprojExe = = null )
{
throw new ArgumentNullException ( nameof ( dotnetCsprojExe ) ) ;
}
if ( dotnetProjectJsonExe = = null )
{
throw new ArgumentNullException ( nameof ( dotnetProjectJsonExe ) ) ;
}
2016-10-27 18:46:43 -07:00
if ( ! assetsRoot . Exists )
{
throw new DirectoryNotFoundException ( $"Directory not found at '{assetsRoot}'" ) ;
}
2017-01-06 01:40:26 -08:00
if ( ! dotnetCsprojExe . Exists )
{
throw new FileNotFoundException ( "Csproj dotnet executable must exist" , dotnetCsprojExe . FullName ) ;
}
if ( ! dotnetProjectJsonExe . Exists )
{
throw new FileNotFoundException ( "project.json dotnet executable must exist" , dotnetProjectJsonExe . FullName ) ;
}
2016-10-27 18:46:43 -07:00
_root = assetsRoot ;
2017-01-06 01:40:26 -08:00
_dotnetCsprojExe = dotnetCsprojExe ;
_dotnetProjectJsonExe = dotnetProjectJsonExe ;
2016-10-27 18:46:43 -07:00
}
public TestAssetInfo Get ( string name )
{
return Get ( TestAssetKinds . TestProjects , name ) ;
}
public TestAssetInfo Get ( string kind , string name )
{
var assetDirectory = new DirectoryInfo ( Path . Combine ( _root . FullName , kind , name ) ) ;
2017-01-06 01:40:26 -08:00
return new TestAssetInfo (
assetDirectory ,
name ,
_dotnetCsprojExe ,
CsprojSearchPattern ) ;
}
public TestAssetInfo GetProjectJson ( string name )
{
return GetProjectJson ( TestAssetKinds . TestProjects , name ) ;
}
public TestAssetInfo GetProjectJson ( string kind , string name )
{
var assetDirectory = new DirectoryInfo ( Path . Combine ( _root . FullName , kind , name ) ) ;
return new TestAssetInfo (
assetDirectory ,
name ,
_dotnetProjectJsonExe ,
ProjectJsonSearchPattern ) ;
}
2017-02-15 15:35:03 -08:00
public DirectoryInfo CreateTestDirectory ( string testProjectName = "temp" , [ CallerMemberName ] string callingMethod = "" , string identifier = "" )
2017-01-06 01:40:26 -08:00
{
2017-02-15 15:35:03 -08:00
var testDestination = GetTestDestinationDirectoryPath ( testProjectName , callingMethod , identifier ) ;
2017-01-06 01:40:26 -08:00
var testDirectory = new DirectoryInfo ( testDestination ) ;
testDirectory . EnsureExistsAndEmpty ( ) ;
return testDirectory ;
}
private string GetTestDestinationDirectoryPath ( string testProjectName , string callingMethod , string identifier )
{
#if NET451
string baseDirectory = AppDomain . CurrentDomain . BaseDirectory ;
#else
string baseDirectory = AppContext . BaseDirectory ;
#endif
return Path . Combine ( baseDirectory , callingMethod + identifier , testProjectName ) ;
2016-10-27 18:46:43 -07:00
}
}
}