2016-10-28 01:46:43 +00: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 09:40:26 +00: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-28 01:46:43 +00:00
|
|
|
|
{
|
2017-01-06 09:40:26 +00: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-28 01:46:43 +00:00
|
|
|
|
if (!assetsRoot.Exists)
|
|
|
|
|
{
|
|
|
|
|
throw new DirectoryNotFoundException($"Directory not found at '{assetsRoot}'");
|
|
|
|
|
}
|
|
|
|
|
|
2017-01-06 09:40:26 +00: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-28 01:46:43 +00:00
|
|
|
|
_root = assetsRoot;
|
2017-01-06 09:40:26 +00:00
|
|
|
|
|
|
|
|
|
_dotnetCsprojExe = dotnetCsprojExe;
|
|
|
|
|
|
|
|
|
|
_dotnetProjectJsonExe = dotnetProjectJsonExe;
|
2016-10-28 01:46:43 +00: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 09:40:26 +00: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 23:35:03 +00:00
|
|
|
|
public DirectoryInfo CreateTestDirectory(string testProjectName = "temp", [CallerMemberName] string callingMethod = "", string identifier = "")
|
2017-01-06 09:40:26 +00:00
|
|
|
|
{
|
2017-02-15 23:35:03 +00:00
|
|
|
|
var testDestination = GetTestDestinationDirectoryPath(testProjectName, callingMethod, identifier);
|
2017-01-06 09:40:26 +00: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-28 01:46:43 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|